Мне нужно написать метод, чтобы определить, когда в игре не может быть победителя (t ie) - PullRequest
0 голосов
/ 16 июня 2020

моя игра - это модифицированная версия (посчитайте 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...