【问题标题】:Extended Tic-Tac-Toe, troubles with checking winner (Java)扩展井字游戏,检查获胜者的麻烦(Java)
【发布时间】:2017-01-19 10:01:36
【问题描述】:

我是 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;
    }

问题出在这里。对于 empty 字段或字段,例如:

 {"[ ]", " 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;
    }

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

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

【问题讨论】:

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


    【解决方案1】:

    试试这样:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多