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);
}
}
}
上面的代码逻辑也很简单,就是从抽牌堆中抽一张牌,然后放进自己的手牌中