14. 制作卡牌库实现抽卡

卡牌库

添加卡牌库对象,以及卡牌库代码

using System.Collections.Generic;
using UnityEngine;

public class CardDeck : MonoBehaviour
{
    public CardManager cardManager;

    // 抽牌堆
    private List<CardDataSO> drawDeck = new List<CardDataSO>();
    // 弃牌堆
    private List<CardDataSO> discardDeck = new List<CardDataSO>();
    // 当前手牌(每回合)
    private List<Card> handCardObjectList = new List<Card>();

    private void Start() 
    {
        InitializeDeck();
    }

    public void InitializeDeck()
    {
        drawDeck.Clear();
        foreach (var entry in cardManager.currentLibrary.entryList)
        {
            for (int i = 0; i < entry.amount; i++)
            {
                drawDeck.Add(entry.cardData);
            }
        }

        // TODO: 洗牌/更新抽牌堆or弃牌堆的数字
    }

    [ContextMenu("测试抽牌")]
    public void TestDrawCard()
    {
        DrawCard(1);
    }

    private void DrawCard(int amount)
    {
        for (int i = 0; i < amount; i++)
        {
            if (drawDeck.Count == 0)
            {
                // 抽牌堆为空,从弃牌堆中重新生成
                // ShuffleDiscardIntoDraw();
            }

            // 从抽牌堆中抽一张牌
            CardDataSO cardData = drawDeck[0];
            drawDeck.RemoveAt(0);

            var card = cardManager.GetCardObject().GetComponent<Card>();
            // 初始化
            card.Init(cardData);

            // 将这张牌添加到手牌中
            handCardObjectList.Add(card);
        }
    }
}

上面的代码逻辑也很简单,就是从抽牌堆中抽一张牌,然后放进自己的手牌中

项目相关代码

代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git

标签:20240305_1109

posted @ 2024-03-05 11:14  hellozjf  阅读(49)  评论(0编辑  收藏  举报