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 @   hellozjf  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示