C# 中的洗牌
洗牌是纸牌游戏中引入随机性的一个重要方面。本文深入探讨了 C# 中的洗牌主题,解决了需要根据用户输入重复洗牌的特定场景。
在提供的代码中,您已经定义了用于表示一副牌的类、个人卡片和各种枚举。要合并卡片洗牌,我们建议使用 Fisher-Yates 洗牌算法,该算法可以有效地随机化集合中的元素。
以下是如何将 Fisher-Yates 洗牌功能添加到代码中:
用于洗牌的辅助类:
创建一个名为 FisherYates 的静态辅助类实现洗牌算法。
static public class FisherYates { static Random r = new Random(); static public void Shuffle(int[] deck) { for (int n = deck.Length - 1; n > 0; --n) { int k = r.Next(n+1); int temp = deck[n]; deck[n] = deck[k]; deck[k] = temp; } } }
将洗牌应用到 Deck:
在您的 Program.cs 类中,获取用户想要的洗牌次数,并利用 FisherYates 洗牌方法洗牌
int numOfShuffles = int.Parse(Console.ReadLine()); for (int i = 0; i < numOfShuffles; i++) { FisherYates.Shuffle(mydeck.Cards); }
显示洗完的牌:
洗牌后,可以显示更新后的一副洗牌。
foreach (Card c in mydeck.Cards) { Console.WriteLine(c); }
通过利用 Fisher-Yates 洗牌算法,您的程序现在可以按照用户指定的次数洗牌并显示洗牌后的牌组。
以上是如何在 C# 中根据用户输入高效地多次洗一副牌?的详细内容。更多信息请关注PHP中文网其他相关文章!