首页 >后端开发 >C++ >如何在 C# 中根据用户输入高效地多次洗一副牌?

如何在 C# 中根据用户输入高效地多次洗一副牌?

Linda Hamilton
Linda Hamilton原创
2025-01-05 03:55:38507浏览

How Can I Efficiently Shuffle a Deck of Cards Multiple Times in C# Based on User Input?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn