簡體   English   中英

擴展的井字游戲,無法檢查獲勝者(Java)

[英]Extended Tic-Tac-Toe, troubles with checking winner (Java)

我是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數組的行,列和對角線嗎? 也許,有一種方法可以通過一種通用方法來做到這一點?

像這樣嘗試:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM