目前正致力于为Windows游戏大战的Windows Forms版本编写代码。我需要一种方法来重新排列列表来随机化甲板。我已经将deck和shuffledDeck的列表定义为字符串列表。
当我运行createDeck()时,我将它输出到我的Windows窗体中的文本框,以确保它正确地创建列表。我还测试了它以确保deck.Count()等于52
private void shuffle()
{
createDeck();
shuffledDeck = deck;
Random r = new Random();
int randomIndex = 0;
while (deck.Count > 0)
{
randomIndex = r.Next(0, deck.Count);
shuffledDeck.Add(deck[randomIndex]);
deck.RemoveAt(randomIndex);
}
这是我的测试,甲板实际上是洗牌的
for (int a = 0; a <= 51; a++)
{
textBox1.Text += " " + shuffledDeck[a];
}
我希望每次我都会看到一个洗牌,但每当我运行它时,Visual Studio会冻结,我必须强制退出程序退出。
线shuffledDeck = deck;
使shuffledDeck
和deck
成为同一个对象的引用。所以在你的while循环中,你正在移除并添加“卡片”到同一个套牌和条件套牌.Count> 0将永远为真。
尝试使用此对象克隆:Deep cloning objects
并用shuffledDeck = deck;
取代shuffledDeck = deck.Clone();