Erkennen-gewinnen-Spiel in nichts und Kreuze
Ich muss wissen, der beste Weg, um entdecken ein gewinnzug in einem Spiel von Nullen und Kreuze. Source-code ist egal, ich brauche nur ein Beispiel oder etwas, was ich kann beginnen mit.
Das einzige, was ich mit oben kommen kann ist die Verwendung von Schleifen und testen jede Richtung für jeden Schritt den der Spieler macht, wird die Suche nach e.g fünf in einer Reihe. Ist es ein schneller und effizienter Weg?
- Hmm, stackoverflow.com/questions/2245801/code-golf-tic-tac-toe?
- Sie sagte in einem Kommentar, dass der Ausschuss nicht sein müssen, 3x3...und ein 5x5-Spiel ist im wesentlichen nicht zu gewinnenden, wenn Sie müssen 5 in einer Reihe zu gewinnen, daher gehe ich davon aus, dass die gewinnen können die Länge weniger als die board-Länge...ist das richtig? Möglicherweise möchten Sie aktualisieren Sie Ihre Frage, um es ein bisschen klarer.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die wirklich einfache Lösung ist, einfach mal vom letzten Umzug gemacht...offensichtlich nicht die Vorherige Bewegung könnte haben das Spiel gewonnen, oder Sie würden nicht hier sein...so brauchen Sie nur zu überprüfen, um zu sehen, ob es gibt 5 (oder wie viele) in einer Zeile/Spalte/Diagonale rund um den Umzug, das war einfach platziert.
Zum Beispiel, wenn das board so aussieht, und das X markiert den letzten Zug:
Brauchen Sie nicht zu überprüfen, alles, was außerhalb des Bereichs von "C":
Hilft das? (Es sah aus wie Sie möglicherweise in Anspielung auf diese in Ihrer ursprünglichen Frage, aber ich war mir nicht sicher.)
Darüber hinaus einfache loops gehen zu Ihrem besten Freund. Sie könnte wahrscheinlich einige Mikro-Optimierung, aber (je nachdem, was Ihre tatsächliche Anwendung tut), ist es wahrscheinlich nicht Wert.
Eins zu behalten ist, dass Sie nicht nur springen 5 in jede Richtung von den jüngsten zu bewegen suchen, dass viele in einer Reihe, weil diese Bewegung könnte in der Mitte einen Streifen. Also ich würde so etwas tun
Nullen und Kreuze ist ein ordentliches Programmier-Herausforderung, denn es gibt eine Menge mathematische tricks, die Sie verwenden können, zu vereinfachen das problem.
Nullen und Kreuze ist in der Regel eine 3 x 3-raster. Wenn Sie ordnen jeder position in Ihrem Netz eine Zahl von eins bis neun (nicht in numerischer Reihenfolge) ordnen Sie die zahlen so, dass jede horizontale, vertikale und Diagonale Reihe fügt bis zu 15
Warum ist das nützlich? Wenn können Sie wählen alle drei Plätze gehören entweder 'O' oder 'X', und diese drei Plätze summieren sich zu einer Summe von 15, Sie wissen, dass die Spieler das Spiel gewonnen hat.
Betrachten Sie die 3X3-Brett
Let X = 1
Lassen Sie A = -1
und ein Raum wird repräsentiert durch eine null.
Also, wenn in der oberen Zeile sieht wie folgt aus [X][X][X] die Summe ist 3, daher ist es ein Gewinn
[O][O][O] die Summe ist -3, also ist es der andere gewinnen.
[X][X][ ] 2 ist, also wenn es X ist dran, er kann gewinnen durch den Umzug in die leer ist, oder O blockieren muss.
[X][O][X] ist 1, daher auch kein Gewinn.
In einem 3x3-Brett gibt es 8 Positionen zu bewerten.
In NXN die Zahl größer wird, aber die Idee bleibt die gleiche
wenn N=8 und einer Zeile oder Spalte Summen zu 7, dann wissen Sie, es ist ein gewinnzug für X in dieser Zeile/Spalte
Dass die Methode funktioniert für mich in der high school.
Die Besten Wünsche
Böse
Ich bin mir nicht bewusst, eine bessere Methode, dann Schleifen, aber das board ist so klein, es ist ziemlich trivial.
Einem kleinen Python-Pseudo-code:
Gibt es effizientere Möglichkeiten, aber Sie sind wirklich nur eine Rolle, wenn Sie erweitern Sie in diesem Spiel für viel, viel größer board-Konfigurationen. Zum Beispiel, wenn Sie gespeicherte Gruppen von Nullen und Kreuze in direktionale Objekte (speichern einer diagonalen Konfiguration, zum Beispiel), können Sie Sortieren, indem Sie mit einer Länge von
winLength-1
, und nur zum testen der neuen Bewegung gegen diese Gruppierungen. Sparen Sie einige Iterationen, aber Sie haben zu halten Sie eine Menge von zusätzlichen Informationen im Speicher.Es ist eine Frage der Darstellung. Wie speichern Sie den Spielplan? Jetzt denken Sie außerhalb der box; wie sonst konnte Sie es speichern? Sie könnten zum Beispiel darstellen, das board als ein paar von bitmaps - eine für die Nullen und eine für Kreuze - dann Mach eine numerische Muster entsprechen, um zu erkennen, gewinnen Bedingungen.