Die wirklich einfache Lösung ist, einfach vom letzten Zug aus zu prüfen... offensichtlich kann kein vorheriger Zug das Spiel gewonnen haben, sonst wären Sie nicht hier... also müssen Sie nur prüfen, ob es 5 (oder wie viele auch immer) in einer Reihe/Spalte/Diagonale um den Zug gibt, der gerade gesetzt wurde.
Wenn das Brett zum Beispiel so aussieht und X den letzten Zug markiert:
.............
.............
.............
.............
.....X.......
.............
.............
.............
.............
.............
Sie brauchen nichts außerhalb des Bereichs "C" zu prüfen:
.C...C...C...
..C..C..C....
...C.C.C.....
....CCC......
.CCCCXCCCC...
....CCC......
...C.C.C.....
..C..C..C....
.C...C...C...
.............
Ist das hilfreich? (Es sah so aus, als würden Sie in Ihrer ursprünglichen Frage darauf anspielen, aber ich war mir nicht sicher).
Darüber hinaus werden einfache Schleifen Ihr bester Freund sein. Sie könnten wahrscheinlich einige Mikro-Optimierung zu tun, aber (je nachdem, was Ihre tatsächliche Anwendung tut) ist es wahrscheinlich nicht wert.
Eine Sache, die man im Auge behalten sollte, ist, dass man nicht einfach 5 in eine beliebige Richtung vom letzten Zug aus springen kann, wenn man nach so vielen Zügen in einer Reihe sucht, weil dieser Zug in der Mitte einer Serie liegen könnte. Ich würde also 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.