Die wirklich einfache Lösung ist es, nur vom letzten Zug aus zu überprüfen ... offensichtlich hätte kein vorheriger Zug das Spiel gewinnen können, oder Sie wären nicht hier ... also müssen Sie nur überprüfen, ob Es gibt 5 (oder wie viele) in einer Reihe/Spalte/Diagonale um den Zug, der gerade platziert wurde.
Zum Beispiel, wenn der Vorstand wie folgt aussieht, und X markiert den jüngsten Schritt:
.............
.............
.............
.............
.....X.......
.............
.............
.............
.............
.............
Sie brauchen nichts außerhalb des Bereichs von „C“ zu überprüfen:
.C...C...C...
..C..C..C....
...C.C.C.....
....CCC......
.CCCCXCCCC...
....CCC......
...C.C.C.....
..C..C..C....
.C...C...C...
.............
Hilft das? (Es sah so aus, als ob du in deiner ursprünglichen Frage darauf anspielst, aber ich war mir nicht sicher.)
Darüber hinaus werden einfache Loops dein bester Freund sein. Sie könnten wahrscheinlich einige Mikro-Optimierung, aber (je nachdem, was Ihre eigentliche Anwendung tut) ist es wahrscheinlich nicht wert.
Eine Sache zu verfolgen ist, dass Sie nicht einfach 5 aus dem letzten Zug in jede Richtung springen können, auf der Suche nach dem viele in Folge, weil diese Bewegung in der Mitte einer Streak sein könnte. Also würde ich etwas tun, wie
From the new move
left = how many in a row we have to the left of the lastest move
right = how many in a row we have to the right of the latest move
if (left + right + 1 >= 5) then you have a winner
up = how many in a row we have above the latest move
down = how many in a row we have below the latest move
if (up + down + 1 >= 5) then you have a winner
// repeat for both diagonal directions.
Hmm, http://stackoverflow.com/questions/2245801/code-golf-tic-tactoe? – kennytm
Sie sagten in einem Kommentar, dass das Board nicht 3x3 sein muss ... und ein 5x5-Spiel ist im Wesentlichen nicht gewinnbar, wenn Sie 5 in einer Reihe zu gewinnen brauchen, also nehme ich an, dass die Gewinnlänge geringer sein kann als das Board Länge ... ist das richtig? Vielleicht möchten Sie Ihre Frage aktualisieren, um es etwas übersichtlicher zu gestalten. – Beska