私は単純な三目並べゲームを作成しており、winAlert というブール値があり、それが true の場合、プレイヤーに勝ったことを警告する必要があります。これはほとんどの場合正しく機能しますが、そうでない場合が 1 つあります。ゲームに勝利し、すべてのセルが埋められた場合、コンソールは winAlert の値が false であることをログに記録しますが、プレイヤーに勝利したことを true であるかのように警告します。誰かがこのコードを調べて、なぜこれがこのように動作するのかを理解できますか? http://jsfiddle.net/Z5c9P/3/ この関数に問題があると思いますが、よくわかりません。
var determineWin = function (pMoves) {
for (var i = 0; i < winConditions.length; i++) {
if (winConditions[i].length > pMoves.length) {
continue;
}
for (var j = 0; j < winConditions[i].length; j++) {
winAlert = false;
for (var k = 0; k < pMoves.length; k++) {
if (pMoves[k] === winConditions[i][j]) {
winAlert = true;
break;
}
}
if (!winAlert) break;
}
if (winAlert) {
alert(currentPlayer + " wins!");
break;
}
}
};
この関数を呼び出すコードは次のとおりです。
$('td').one('click', function () {
turnCount += 1;
setCurrentPlayer();
$(this).text(currentPlayer);
cellTracker = $(this).attr('id');
storeMoves();
determineWin(xMoves);
determineWin(oMoves);
if(turnCount === 9 && winAlert === false) {
alert("Tie game!");
}
console.log(turnCount, xMoves, oMoves, winAlert);
});