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

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

Linda Hamilton
发布: 2025-01-05 03:55:38
原创
504 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板