実践的なプロジェクトとして、私はJSFiddleでTic-Tac-Toeゲームを作った(既に十分ではないので正しい?)、無敵のAIを追加するように進んだ。ほとんどの場合、それは機能しますが、コンピュータが最適な移動を適切に計算しないように導くいくつかの組み合わせ(フィールド5,9,3、またはフィールド3,7,9にXを設定するなど)があります。JavascriptのMinimaxが正しく動作しない
JSFiddle上のプロジェクト:https://jsfiddle.net/jd8x0vjz/
そして、63行から始まる関連機能:句があれば、これらの問題を引き起こしている私は、コンピュータが適切に計算しないので、最後の二つを考える
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
}
値は(デバッガでは観測可能ですが)上書きされることもありますが、これが本当に問題の根源かどうかはわかりません。どんな助けやヒントもありがとう!
EDIT:問題解決済み!それが最初のものでない場合は、私の答えを探してください。