Самое простое решение - просто проверить последний сделанный ход ... очевидно, ни один предыдущий ход не мог бы выиграть игру, иначе вас бы здесь не было ... поэтому вам просто нужно проверить, есть ли 5 (или сколько угодно) в строке / столбце / диагонали вокруг только что размещенного хода.
Например, если доска выглядит следующим образом, а X отмечает самый последний ход:
.............
.............
.............
.............
.....X.......
.............
.............
.............
.............
.............
Вам не нужно проверять что-либо вне диапазона «C»:
.C...C...C...
..C..C..C....
...C.C.C.....
....CCC......
.CCCCXCCCC...
....CCC......
...C.C.C.....
..C..C..C....
.C...C...C...
.............
Это помогает? (Похоже, вы намекаете на это в своем первоначальном вопросе, но я не был уверен.)
Помимо этого, простые петли станут вашим лучшим другом. Возможно, вы могли бы провести некоторую микрооптимизацию, но (в зависимости от того, что делает ваше реальное приложение), это, вероятно, того не стоит.
Одна вещь, которую нужно отслеживать, это то, что вы не можете просто выпрыгнуть 5 в любом направлении из самого последнего хода, ища столько подряд, потому что этот ход может быть в середине полосы. Так что я бы сделал что-то вроде
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.