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
Freigeben: 2025-01-03 13:10:38
Original
409 Leute haben es durchsucht

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">static Random r = new Random();
Nach dem Login kopieren

  static public void Shuffle(Card[] deck)</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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;
    }
}
Nach dem Login kopieren

}

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">Console.WriteLine(c);
Nach dem Login kopieren

}

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!

Vorheriger Artikel:Wie identifizieren HashCodes Objekte in der Programmierung eindeutig? Nächster Artikel:Ist die Gleitkommadivision immer langsamer als die Multiplikation?
Erklärung dieser Website
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
Neueste Artikel des Autors
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage