【发布时间】:2020-01-13 21:03:17
【问题描述】:
我正在尝试实现 Minimax 以在 js 中的井字游戏中找到最佳移动。
但是,它总是返回第一个空闲位置:0,0,当这个位置被占用时,0,1 等等。 事实证明,miniMax 函数总是返回 1。
let board = [
['', '', ''],
['', '', ''],
['', '', '']
];
const scores = {
'X': 1,
'O': -1
}
function miniMax(board, isMaximizing, player, turns) {
let winner = checkForWinner(board);
if (winner != null)
return scores[winner];
if (turns > 9)
return 0;
let bestScore = isMaximizing ? -Infinity : Infinity;
let score;
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (board[i][j] == '') {
board[i][j] = player;
score = miniMax(board, !isMaximizing, isMaximizing ? p2 : p1, turns + 1)[1];
board[i][j] = '';
if (isMaximizing) {
if (score > bestScore) {
bestScore = score;
bestMove = [i, j];
}
}
else {
if (score < bestScore) {
bestScore = score;
bestMove = [i, j];
}
}
}
}
}
return [bestMove, bestScore];
}
我曾尝试查看其他人对井字游戏的 Minimax 实现,但我不明白是什么让我的失败。
我做错了什么?
编辑:我更新了我的代码,但现在它返回 0,0 然后 1,0 然后 0,1 然后 2,0 然后 0,2。
【问题讨论】:
标签: javascript minimax