扩展的Tic-Tac-Toe,检查获胜者的麻烦(Java)

时间:2017-01-19 10:01:36

标签: java validation multidimensional-array tic-tac-toe

我是Java的新手,我正在制作TicTacToe的扩展版本(基本上它与通常的3x3版本的游戏领域大小不同 - 它可能是4x4,5x5等等,玩家必须赢得一个连续几次获得最后的胜利,等等。用户可以自定义他的游戏)。 我有一些检查方法。

// 1。对于行:

boolean checkHorizontal(String[][] field) {
                boolean valid = true;
                for (int i = 0; i < field.length; i++) {
                    for (int j = 1; j < field[i].length; j++) {
                        if (!field[i][0].equals(field[i][j]) && !field[i][0].equals("[ ]")) {
                            valid = false;
                        }
                    }
                }
                return valid;
            }

// 2。对于列:

boolean checkVertical(String[][] field) {
                    boolean valid = true;
                    for (int i = 0; i < field.length; i++) {
                        for (int j = 1; j < field[i].length; j++) {
                            if (!field[0][i].equals(field[j][i]) && !field[0][i].equals("[ ]")) {
                                valid = false;
                            }
                        }
                    }
                    return valid;
                }

// 3。 '\'和'/'对角线有两种方法:

boolean checkDiagonal(String[][] field) {
        boolean valid = true;
        for (int i = 0; i < field.length; i++) {
            if (!field[0][0].equals(field[i][i]) && !field[0][0].equals("[ ]")) {
                valid = false;
            }
        }
        return valid;
    }

boolean checkAnotherDiagonal(String[][] field) {
        boolean valid = true;
        for (int i = 0, j = field.length - 1; i < field.length; i++, j--) {
            if (!field[0][field.length - 1].equals(field[i][j]) && !field[i][0].equals("[ ]")) {
                valid = false;
            }
        }
        return valid;
    }

以下是问题。对于字段或字段,如:

 {"[ ]", " X ", "[ ]"},
 {"[ ]", " X ", "[ ]"},
 {"[ ]", " X ", "[ ]"}

checkHorizontal(String[][] field)的结果是true。这意味着有比赛,但他们不是。同样适用于checkVertical(String[][] field)和字段:

{"[ ]", "[ ]", "[ ]"},
{" X ", " X ", " X "},
{"[ ]", "[ ]", "[ ]"}

我将这些方法合二为一:

boolean validate(String[][] field) {
        boolean valid = false;
        if (checkHorizontal(field)
                || checkVertical(field)
                || checkDiagonal(field)
                || checkAnotherDiagonal(field)) {
            valid = true;
        }
        return valid;
    }

但是由于问题,程序无法正常运行。

我不知道如何解决这个问题。是否有其他更好的方法来检查2D数组的行,列和对角线?也许,通过一种通用方法有一些方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

试试这样:

boolean checkHorizontal(String[][] field) {
    // iterate over all rows
    for (int i = 0; i < field.length; i++) {
        boolean validRow = true;
        // iterate over all columns
        for (int j = 0; j < field[i].length; j++) {
            // to consider a row valid, none of its cells can be empty
            if (field[i][j].equals("[ ]")) {
                validRow = false;
                break; // this row is invalid
            }
        }
        // is the row we're currently checking valid?
        if (validRow) {
            // we're done
            return true;
        }
        // try the next row
    }
    // all horizontal rows are invalid
    return false;
}