感觉算法有问题
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)。这是我第一次使用这样的算法,所以我需要一些帮助。