目前正在为纸牌游戏战争的Windows Forms版本编写代码。 我需要一种方法来洗牌列表以随机化甲板。 我已经将 deck 和 shuffledDeck 的列表定义为字符串列表。
当我运行createDeck((时,我将其输出到窗口窗体中的文本框中,以确保它实际上正在正确创建列表。 我还对其进行了测试以确保甲板。计数(( 等于 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 循环中,您正在删除"牌"并将其添加到同一套牌和条件牌组中。计数> 0 将永远为真。
尝试使用此对象克隆器:深度克隆对象
并将shuffledDeck = deck;
替换为shuffledDeck = deck.Clone();