Ich versuche, eine KI für Tic Tac Toe zu bauen, das ist das erste Mal, dass ich irgendeine Art von KI mache, und ich habe Probleme herauszufinden, wie man die KI alle zu versuchen unterschiedliche Bewegung möglich für eine bestimmte Situation (Board). "E" sind leere Zellen und ich speichere ihre Indizes in einem Array namens "verfügbar". Die AI-Bewegung würde "O" in die nextBoard-Variable mit den Indizes einfügen, die von dem verfügbaren Array einmal zu jedem Zeitpunkt bereitgestellt werden. Diese Funktion ändert sowohl die nextBoard-Variable, mit der ich die nächste KI-Bewegung bewerten möchte, indem ich ihr eine Punktzahl gebe, als auch die reale Board-Variable, mit der ich den Status des Spiels auswerte. sie Modifizieren und keinen mit erwarteten Ausgangfür die Schleife, die das falsche Array ändert
function AiPossibleActions() {
available=[0,1,2,3,5,6,7,8];
board=["E","E","E","E","X","E","E","E","E"];
var nextBoard=board
for (var i=0; i<available.length; i++) {
nextBoard = board;
nextBoard[available[i]]="O";
}
oMovesCount++
}
Wenn ich die Funktion beider Variablen (nextBoard und board) ausgeführt werden.
//wrong output
["O", "O", "O", "O", "X", "O", "O", "O", "O"]
Der ideale Ausgangs dass für jede Iteration der Variablen nextBoard wäre gleich:
//1st iteration
["O", "E", "E", "E", "X", "E", "E", "E", "E"]
//2nd iteration
["E", "O", "E", "E", "X", "E", "E", "E", "E"]
//3rd iteration
["E", "E", "O", "E", "X", "E", "E", "E", "E"]
//4th iteration
["E", "E", "E", "O", "X", "E", "E", "E", "E"]
//5th iteration
["E", "E", "E", "E", "X", "O", "E", "E", "E"]
//6th iteration
["E", "E", "E", "E", "X", "E", "O", "E", "E"]
//7th iteration
["E", "E", "E", "E", "X", "E", "E", "O", "E"]
//8th iteration
["E", "E", "E", "E", "X", "E", "E", "E", "O"]
Nun, das sollte Ihnen sagen, dass Sie tatsächlich das gleiche Array ändern, und dass Sie eine andere Möglichkeit finden müssen, eine Kopie zu erstellen, da klar eine bloße Zuweisung es nicht tut. –
JavaScript speichert Objekt durch Referenz, nicht Wert, wenn Sie 'nextBoard = board' dann nextBard ist keine Kopie von board, es ** ist ** board. –