java 自定义大小和难度井字游戏的检查赢算法[复制]

8ljdwjyq  于 2023-01-24  发布在  Java
关注(0)|答案(1)|浏览(86)
    • 此问题在此处已有答案**:

Customizable TicTacToe game board with Java(1个答案)
十小时前关门了。
已经实现了水平和垂直的方法,我不能搞清楚对角线这是我的工作方法:

private boolean checkHorizontalWin(String gameBoard, int gameSize, int gameDifficulty) {
        // CHECK HORIZONTAL WIN
        for (int row = 0; row < gameSize; row++) {
            char candidate = getPawnAtCoords(gameBoard, gameSize, row, 0);
            int counter = 1;
            for (int column = 0; column < gameSize; column++) {
                char pawn = getPawnAtCoords(gameBoard, gameSize, row, column);

                if ((pawn == candidate) && (pawn != '-')) {
                    counter++;
                } else {
                    counter = 1;
                    candidate = pawn;
                }

                if (counter == gameDifficulty) {
                    return true;
                }
            }
        }
        return false;
    }

    private boolean checkHVerticalWin(String gameBoard, int gameSize, int gameDifficulty) {
        // CHECK VERTICAL WIN
        for (int column = 0; column < gameSize; column++) {
            char candidate = getPawnAtCoords(gameBoard, gameSize, 0, column);
            int counter = 1;
            for (int row = 0; row < gameSize; row++) {
                char pawn = getPawnAtCoords(gameBoard, gameSize, row, column);

                if ((pawn == candidate) && (pawn != '-')) {
                    counter++;
                } else {
                    counter = 1;
                    candidate = pawn;
                }

                if (counter == gameDifficulty) {
                    return true;
                }
            }
        }
        return false;
    }

有谁对对角线有想法吗?
我已经尝试了我自己能做的一切。

cbjzeqam

cbjzeqam1#

ChatGPT做到了

private boolean checkDiagonalWin(String gameBoard, int gameSize, int gameDifficulty) {
    // CHECK DIAGONAL WIN (LEFT TO RIGHT)
    for (int row = 0; row < gameSize - gameDifficulty + 1; row++) {
        for (int col = 0; col < gameSize - gameDifficulty + 1; col++) {
            char candidate = getPawnAtCoords(gameBoard, gameSize, row, col);
            int counter = 1;
            for (int i = 1; i < gameDifficulty; i++) {
                int nextRow = row + i;
                int nextCol = col + i;
                char pawn = getPawnAtCoords(gameBoard, gameSize, nextRow, nextCol);
                if ((pawn == candidate) && (pawn != '-')) {
                    counter++;
                } else {
                    counter = 1;
                    candidate = pawn;
                }
                if (counter == gameDifficulty) {
                    return true;
                }
            }
        }
    }

    // CHECK DIAGONAL WIN (RIGHT TO LEFT)
    for (int row = 0; row < gameSize - gameDifficulty + 1; row++) {
        for (int col = gameSize - 1; col >= gameDifficulty - 1; col--) {
            char candidate = getPawnAtCoords(gameBoard, gameSize, row, col);
            int counter = 1;
            for (int i = 1; i < gameDifficulty; i++) {
                int nextRow = row + i;
                int nextCol = col - i;
                char pawn = getPawnAtCoords(gameBoard, gameSize, nextRow, nextCol);
                if ((pawn == candidate) && (pawn != '-')) {
                    counter++;
                } else {
                    counter = 1;
                    candidate = pawn;
                }
                if (counter == gameDifficulty) {
                    return true;
                }
            }
        }
    }

    return false;
}

相关问题