C# 在unity 3d中绘制卡片会产生不同的结果
我有我的剧本,是关于移动的东西,从甲板名单到提请一堆手到丢弃一堆 我的问题是,当我绘制一张卡片时(使用一个按钮调用DrawtoHand),它会工作,但有时绘制的卡片少于DrawCount变量设置的数量(在本例中为5)。从我测试的情况来看,事情似乎没有正确地进入Discardlist/成为Discardpile的孩子,它们有时会,但并不总是 我已经在这上面停留了足够长的时间,代码在我的脑海中真的在一起运行,所以任何帮助都将不胜感激C# 在unity 3d中绘制卡片会产生不同的结果,c#,unity3d,C#,Unity3d,我有我的剧本,是关于移动的东西,从甲板名单到提请一堆手到丢弃一堆 我的问题是,当我绘制一张卡片时(使用一个按钮调用DrawtoHand),它会工作,但有时绘制的卡片少于DrawCount变量设置的数量(在本例中为5)。从我测试的情况来看,事情似乎没有正确地进入Discardlist/成为Discardpile的孩子,它们有时会,但并不总是 我已经在这上面停留了足够长的时间,代码在我的脑海中真的在一起运行,所以任何帮助都将不胜感激 public class Draw : MonoBehaviour
public class Draw : MonoBehaviour
{
public GameObject Card1;
public GameObject Card2;
public int DrawCount;
public CharacterController charactercontroller;
public GameObject Deckpile;
public GameObject Handpile;
public GameObject Discardpile;
List<GameObject> Drawlist = new List<GameObject>();
List<GameObject> Discardlist = new List<GameObject>();
List<GameObject> Handlist = new List<GameObject>();
List<GameObject> Decklist = new List<GameObject>();
// Start is called before the first frame update
void Start()
{
for (int i = 0; i < 5;)
{
Decklist.Add(Card2);
Decklist.Add(Card1);
i++;
}
Deckpile = GameObject.Find("DeckPile");
Handpile = GameObject.Find("Yours");
Discardpile = GameObject.Find("DiscardPile");
Shuffle(Decklist);
Makedraw();
charactercontroller.Energyreset();
DrawtoHand();
}
public void Makedraw()
{
int a = 0;
foreach (GameObject x in Decklist)
{
GameObject deckCard = Instantiate(Decklist[0 + a], new Vector3(0, 0, 0), Quaternion.identity);
deckCard.transform.SetParent(Deckpile.transform, false);
Drawlist.Add(deckCard);
a++;
}
}
public void DrawtoHand()
{
HandtoDiscard();
charactercontroller.Drawing();
charactercontroller.Energyreset();
for (var i = 0; i < DrawCount;)
{
if (Drawlist.Count >= DrawCount)
{
Drawlist[0].transform.SetParent(Handpile.transform, false);
Handlist.Add(Drawlist[0]);
Drawlist.RemoveAt(0);
i++;
}
else
{
Shuffle(Discardlist);
DiscardtoDraw();
}
}
}
public void HandtoDiscard()
{
for (var i = 0; i < Handlist.Count; i++)
{
Handlist[i].transform.SetParent(Discardpile.transform, false);
Discardlist.Add(Handlist[i]);
}
for (var i = 0; i < Handlist.Count; i++)
{
Handlist.RemoveAt(0);
}
}
void Shuffle<T>(List<T> list)
{
System.Random random = new System.Random();
int n = list.Count;
while (n > 1)
{
int k = random.Next(n);
n--;
T temp = list[k];
list[k] = list[n];
list[n] = temp;
}
}
public void DiscardtoDraw()
{
for (var i = 0; i < Discardlist.Count; i++)
{
Discardlist[i].transform.SetParent(Deckpile.transform, false);
Drawlist.Add(Discardlist[i]);
}
for (var i = 0; i < Discardlist.Count; i++)
{
Discardlist.RemoveAt(i);
}
}
}
公共类绘图:单一行为
{
公共游戏对象卡1;
公共游戏对象卡2;
公共提款;
公共字符控制器字符控制器;
公共游戏对象;
公共游戏对象处理堆;
公共游戏对象;
List Drawlist=新列表();
列表丢弃列表=新列表();
List Handlist=新列表();
List Decklist=新列表();
//在第一帧更新之前调用Start
void Start()
{
对于(int i=0;i<5;)
{
甲板列表。添加(卡片2);
甲板列表。添加(Card1);
i++;
}
Deckpile=GameObject.Find(“Deckpile”);
Handpile=GameObject.Find(“您的”);
Discardpile=GameObject.Find(“Discardpile”);
洗牌(甲板名单);
Makedraw();
charactercontroller.Energyreset();
DrawtoHand();
}
公开作废Makedraw()
{
int a=0;
foreach(Decklist中的游戏对象x)
{
游戏对象deckCard=实例化(Decklist[0+a],新向量3(0,0,0),四元数.identity);
deckCard.transform.SetParent(Deckpile.transform,false);
提款单。添加(deckCard);
a++;
}
}
公开作废
{
HandtoDiscard();
charactercontroller.Drawing();
charactercontroller.Energyreset();
对于(变量i=0;i=DrawCount)
{
图纸列表[0].transform.SetParent(Handpile.transform,false);
手工列表。添加(提取列表[0]);
提取列表。删除(0);
i++;
}
其他的
{
洗牌(丢弃列表);
丢弃todraw();
}
}
}
公开作废手册()
{
对于(变量i=0;i1)
{
int k=随机。下一个(n);
n--;
T温度=列表[k];
列表[k]=列表[n];
列表[n]=临时;
}
}
public-void-draw()
{
对于(var i=0;i
我在DrawtoHand()中看到的第一件事是在循环中一次绘制一张卡,但在循环的每次迭代中,您都会检查Drawlist中剩余的卡是否至少是您需要绘制的卡的总数
假设你正试图从4张牌中抽出3张牌。你画第一个,留下一堆3。然后画第二个,留下一堆2。那么就不画第三个了,因为Drawlist.Count