Als Übungsprojekt habe ich ein Tic-Tac-Toe-Spiel auf JSFiddle gemacht (weil es nicht genug gibt, oder?) Und ich habe eine unschlagbare KI hinzugefügt. Zum größten Teil funktioniert es, aber es gibt einige Kombinationen (z. B. das Setzen von X in die Felder 5, 9, 3 oder in die Felder 3, 7, 9), die dazu führen, dass der Computer die optimale Bewegung nicht richtig berechnet.Minimax in Javascript funktioniert nicht richtig
Das Projekt auf JSFiddle: https://jsfiddle.net/jd8x0vjz/
Und die entsprechende Funktion in Zeile 63 beginnen:
function evaluateMove(move, player, depth) {
var gameStatus = evaluateGameStatus(move); //get status of current board
if (gameStatus < 2 && player)
return -1; //if human won, return -1
if (gameStatus < 2 && !player)
return 1; //if human lost, return 1
var returnValue = 0 //value to be returned later
for (var z = 0; z < 3; z++) { //loop for row
for (var s = 0; s < 3; s++) { //loop for column
if (move[z][s]) //if current slot has an x or o,
continue; //skip it
var nextMove = cloneGameStatus(move); //create temporary array with base of current grid
nextMove[z][s] = !player ? "x" : "o"; //assign first free field the appropriate symbol
var value = evaluateMove(nextMove, !player, depth+1); //recursion but with switched player, to add the correct icon afterwards
if ((value > returnValue) && player)
returnValue = value;
if ((value < returnValue) && !player)
returnValue = value;
}
}
return returnValue; //return value of current simulation
}
Ich denke, die letzten beiden if-Klauseln diese Probleme verursachen, da der Computer die richtige ist zu berechnen Werte (wie im Debugger beobachtbar), aber sie sind manchmal überschrieben, aber ich bin mir nicht sicher, ob dies wirklich die Wurzel des Problems ist. Jede Hilfe oder Tipps wären willkommen!
EDIT: Problem gelöst! Suchen Sie unten nach meiner Antwort, falls es nicht die erste ist.