Ich versuche, Minimax zu implementieren, um die beste Bewegung in jede Runde zu finden in Tic-Tac-Toe in js.
Allerdings gibt es immer die erste freie Stelle: 0,0 und wenn dieser Punkt wird 0,1 und so weiter gemacht. Es stellt sich heraus, dass die miniMax Funktion immer 1 zurück.
let board = [
['', '', ''],
['', '', ''],
['', '', '']
];
const p1 = 'X';
const p2 = 'O';
const scores = {
'X': 1,
'O': -1
}
function bestMove(board, isMaximizing, player, turns) {
let bestScore = isMaximizing ? -Infinity : Infinity;
let bestMove;
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);
board[i][j] = '';
if (isMaximizing) {
if (score > bestScore) {
bestScore = score;
bestMove = [i, j];
}
}
else {
if (score < bestScore) {
bestScore = score;
bestMove = [i, j];
}
}
}
}
}
return bestMove;
}
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);
board[i][j] = '';
if (isMaximizing)
bestScore = Math.max(score, bestScore);
else
bestScore = Math.min(score, bestScore);
}
}
}
return bestScore;
}
Ich habe versucht, bei anderen Menschen der Implementierung von Minimax für Tic-Tac-Toe suchen, aber ich konnte nicht verstehen, was macht meine scheitern.
Was habe ich falsch gemacht?