моя игра - это модифицированная версия (посчитайте 4) вам нужно 5 в ряд, а не только 4, а поле - 8 * 9
public static String checkWinner(String[][] field) {
первое тип выигрышной линии, горизонтальная линия
, так как наши X / O / Empty могут быть только в нечетных местах, из-за того, как мы создали шаблон в первом методе, тогда наш счет должен быть увеличен на 2 и начнется с 0 (который будет 1) и остановится на 8 (что будет 9)
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 9; j += 2) {
if ((field[i][j + 1] != " ")
&& (field[i][j + 3] != " ")
&& (field[i][j + 5] != " ")
&& (field[i][j + 7] != " ")
&& (field[i][j + 9] != " ")
&& ((field[i][j + 1] == field[i][j + 3])
&& (field[i][j + 3] == field[i][j + 5])
&& (field[i][j + 5] == field[i][j + 7])
&& (field[i][j + 7] == field[i][j + 9])
)
)
return field[i][j + 1];
//If we found a same pattern, we'll return
//the pattern so that we will know who won
}
}
Для вертикальной линии давайте сначала l oop над каждым нечетным - пронумерованный столбец путем увеличения на 2 и проверьте наличие в одном столбце следующих друг за другом квадратов с одинаковым шаблоном
for (int i = 1; i < 18; i += 2) {
for (int j = 0; j < 4; j++) {
if ((field[j][i] != " ")
&& (field[j + 1][i] != " ")
&& (field[j + 2][i] != " ")
&& (field[j + 3][i] != " ")
&& (field[j + 4][i] != " ")
&& ((field[j][i] == field[j + 1][i])
&& (field[j + 1][i] == field[j + 2][i])
&& (field[j + 2][i] == field[j + 3][i])
&& (field[j + 3][i] == field[j + 4][i])
))
return field[j][i];
}
}
Для диагональной линии слева направо вниз
for (int i = 0; i < 4; i++) {
for (int j = 1; j < 18; j += 2) {
if ((field[i][j] != " ")
&& (field[i + 1][j + 2] != " ")
&& (field[i + 2][j + 4] != " ")
&& (field[i + 3][j + 6] != " ")
&& (field[i + 4][j + 8] != " ")
&& ((field[i][j] == field[i + 1][j + 2])
&& (field[i + 1][j + 2] == field[i + 2][j + 4])
&& (field[i + 2][j + 4] == field[i + 3][j + 6])
&& (field[i + 3][j + 6] == field[i + 4][j + 8])))
return field[i][j];
}// for j
}// for i,32
Подобно описанному выше методу, но мы просто меняем нашу траекторию, т.е. мы начинаем с самого правого столбца, а не с самого левого, как мы делали выше
for (int i = 0; i < 4; i++) {
for (int j = 9; j < 19; j += 2) {
if ((field[i][j] != " ")
&& (field[i + 1][j - 2] != " ")
&& (field[i + 2][j - 4] != " ")
&& (field[i + 3][j - 6] != " ")
&& (field[i + 4][j - 8] != " ")
&& ((field[i][j] == field[i + 1][j - 2])
&& (field[i + 1][j - 2] == field[i + 2][j - 4])
&& (field[i + 2][j - 4] == field[i + 3][j - 6])
&& (field[i + 3][j - 6] == field[i + 4][j - 8])))
return field[i][j];
}// for j
}// for i
//If after going over the table and we find no
//same pattern lines, then we have to return something
//that says that we didn't find a winner :P
return null;
}