有人可以检查我是否正确实现了 minimax 算法吗?

问题描述 投票:0回答:0

感觉算法有问题


public int miniMax(Button[][] board, int depth, boolean maximizingPlayer) {
        if (depth == 0 || isGameOver()) {
            if (checkForWin() && this.turn.equals("X")) {
                return 1; //AI wins
            }else if (checkForWin() && this.turn.equals("O")) {
                return -1; //Human wins
            }else {
                return 0; //Tie
            }
        }
        if (maximizingPlayer) {
            int maxEval = Integer.MIN_VALUE;
            for (int row = 0; row < board.length; row++) {
                for (int col = 0; col < board[row].length; col++) {
                    if (board[row][col].getText().isBlank()) {
                        Button[][] child = Arrays.copyOf(board, board.length);
                        child[row][col].setText("X");
                        int eval = miniMax(board, depth - 1, false);
                        child[row][col].setText("");
                        maxEval = Math.max(maxEval, eval);
                    }
                }
            }
            return maxEval;
        }else {
            int minEval = Integer.MAX_VALUE;
            for (int row = 0; row < board.length; row++) {
                for (int col = 0; col < board[row].length; col++) {
                    if (board[row][col].getText().isBlank()) {
                        Button[][] child = Arrays.copyOf(board, board.length);
                        child[row][col].setText("O");
                        int eval = miniMax(child, depth -1, true);
                        child[row][col].setText("");
                        minEval = Math.min(minEval, eval);
                    }
                }
            }
            return minEval;
        }
    }

显然,当游戏看起来是平局时,minimax 函数的返回值似乎在第 5 步返回“-1”(测试期间也将深度设置为 5)。这是我第一次使用这样的算法,所以我需要一些帮助。

java algorithm minimax
© www.soinside.com 2019 - 2024. All rights reserved.