首頁 >後端開發 >C++ >如何在 C# 中根據使用者輸入有效率地多次洗一副牌?

如何在 C# 中根據使用者輸入有效率地多次洗一副牌?

Linda Hamilton
Linda Hamilton原創
2025-01-05 03:55:38459瀏覽

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