首页 > 解决方案 > 我必须编写一个方法来确定游戏中何时不能有赢家(平局)

问题描述

我的游戏是(计数 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

        }
    }

对于垂直线,让我们首先循环遍历每个奇数列,以 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;
}

标签: java

解决方案


推荐阅读