Heim >Backend-Entwicklung >C++ >Wie kann ich ein Kartenspiel in C# basierend auf benutzerdefinierten Mischvorgängen effizient mischen?

Wie kann ich ein Kartenspiel in C# basierend auf benutzerdefinierten Mischvorgängen effizient mischen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-03 13:10:38317Durchsuche

How can I efficiently shuffle a deck of cards in C# based on user-specified shuffles?

Kartenmischen in C#

Eine häufige Programmierübung besteht darin, eine Kartenmischsimulation in einer bestimmten Sprache zu schreiben. Bei dieser Frage geht es darum, ein Kartenspiel zu mischen und den Benutzer nach der Anzahl der Mischvorgänge zu fragen.

Problembeschreibung

Der bereitgestellte Code enthält Klassen für ein Kartenspiel, eine Karte usw Farbe zusammen mit einem Programm, das die anfängliche Kartenreihenfolge anzeigt und Benutzereingaben zur Anzahl der Mischvorgänge entgegennimmt. Die Herausforderung liegt in der Implementierung des Mischmechanismus.

Lösung

Der Fisher-Yates-Shuffle, auch bekannt als Knuth-Shuffle, ist ein weit verbreiteter Algorithmus zum Mischen eines Arrays an Ort und Stelle. Der aktualisierte Code enthält diesen Algorithmus:

statische öffentliche Klasse FisherYates<br>{</p>
<pre class="brush:php;toolbar:false">static Random r = new Random();

  static public void Shuffle(Card[] deck)</p>
<pre class="brush:php;toolbar:false">{
    for (int n = deck.Length - 1; n > 0; --n)
    {
        int k = r.Next(n+1);
        Card temp = deck[n];
        deck[n] = deck[k];
        deck[k] = temp;
    }
}

}

Diese Klasse definiert eine statische Methode, Shuffle, die ein Array von Karten annimmt Eingang. Dann durchläuft es den Stapel in umgekehrter Reihenfolge und wählt eine zufällige Karte aus, die mit der aktuellen Karte ausgetauscht werden soll. Durch die Iteration über das gesamte Deck sorgt der Algorithmus für eine gründliche Durchmischung.

Implementierung

Um den Shuffle in den Originalcode zu integrieren, fügen Sie einen Aufruf der Shuffle-Methode im hinzu Hauptmethode der Program-Klasse nach Erhalt der Anzahl der Shuffles vom Benutzer:

Deck myDeck = new Deck(); // Erstelle ein neues Deck<br>int numShuffles = Int32.Parse(Console.ReadLine()); // Lesen Sie die Benutzereingaben zu den gewünschten Mischvorgängen<br>FisherYates.Shuffle(myDeck.Cards); // Mische den Stapel so oft wie gewünscht<br>foreach (Card c in myDeck.Cards) // Drucke den gemischten Stapel aus<br>{</p>
<pre class="brush:php;toolbar:false">Console.WriteLine(c);

}

Fazit

Die Einbeziehung des Fisher-Yates-Shuffle-Algorithmus ermöglicht dies effizientes Mischen des Kartenstapels und erfüllt die Anforderung einer vom Benutzer festgelegten Mischzahl. Der Code gibt den gemischten Stapel wie gewünscht aus.

Das obige ist der detaillierte Inhalt vonWie kann ich ein Kartenspiel in C# basierend auf benutzerdefinierten Mischvorgängen effizient mischen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn