Ich versuche, Minimax für Tic-Tac-Toe zu implementieren. Das Problem ist, es ist nicht immer wie erwartet. Ich habe versucht, es zu debuggen und festgestellt, dass in Fällen, in denen es nicht die richtige Bewegung auswählt, es ist, wenn die Punktzahl für diese Bewegung aus irgendeinem Grund "negative Unendlichkeit" ist. Hier ist der Code:Mein Minimax wählt nicht immer den besten Zug
`
function minimaxMove(board) {
let nextMove = null;
const mmRecurse = function (board, lastPlayer, depth) {
let winner = checkGameState(board);
if(winner == state.AIplayer) {
return -1000 + depth;
} else if(winner == state.playerIs) {
return depth - 1000;
}
let nextPlayer = lastPlayer == state.playerIs ? state.AIplayer : state.playerIs;
let moves = [], scores = [];
for(let i = 0; i < state.board.length; i++) {
let boardCopy = board.slice();
if(boardCopy[i] == "E") {
boardCopy[i] = nextPlayer;
moves.push(i);
scores.push(mmRecurse(boardCopy, nextPlayer, depth+1));
}
}
if(depth === 0) {
nextMove = moves[scores.indexOf(Math.max.apply(null,scores))];
console.log(moves, scores, nextMove);
} else {
if(depth == 9) {
return 0;
}
if(nextPlayer == state.AIplayer) {
return Math.max.apply(null, scores);
} else if(nextPlayer == state.playerIs){
return Math.min.apply(null, scores)
}
}
}
mmRecurse(board, state.playerIs, 0);
state.turn = state.playerIs;
return nextMove;
}
`
Manchmal ist es funktioniert gut, manchmal ist es nicht der richtige Schritt zu wählen.
Können Sie eine Arbeitsgeige erstellen? –
@IvanModric - https://jsfiddle.net/Askerov/ypgv4e8e/ - hier. – askerovlab