我有一个正在进行的tic tac toe游戏,但出于某种原因设置胜利条件导致董事会完全翻转并将计算机的选择放在剩下的所有方格上,我相信这很好,因为我没有写过胜利后重置比赛,但问题是我认为没有比赛就会赢得胜利。一如往常,任何帮助都非常感谢! 警告不要按原样运行,因为它会使您的浏览器死于与环路相关的问题
具体代码。整个申请表在这里:http://codepen.io/jeffm64/pen/BLmjvv?editors=1011
function checkWin() {
for (let i = 0; i < symbols.length; i++) {
for (let j = 0; j < board.length; j++) {
//checks rows
if (board[j][0] === symbols[i] && board[j][1] === symbols[i] && board[j][2] === symbols[i]) {
rowWin = true;
console.log("Hey it worked");
}
//checks columns
else if (board[0][j] === symbols[i] && board[1][j] === symbols[i] && board[2][j] === symbols[i]) {
columnWin = true;
console.log("Hey it worked");
}
//checks diagonals
else if (board[j][j] === symbols[i] || board[2 - j][j] === symbols[i]) {
diagonalWin = true;
console.log("Hey it worked");
}
else {
}
}
}
};
答案 0 :(得分:2)
您正在迭代行和列,这很好。 但是你没有板长对角线。所以你在那里做的事情没有意义。
如何查看对角线? (这似乎是功课,因此不会说出答案)
答案 1 :(得分:0)
你的主要问题不是胜利(无论如何都没有正确检查,如@aepure所提到的),这是计算机填写所有左侧字段的事实。它就是这样做的,因为你对tttGame
进行了无限递归调用(不是在有问题的代码中)。我建议仅在computerAI
时调用player2.turn
,并在游戏结束后将player1.turn
和player2.turn
同时调为false
。这“以某种方式”工作(删除递归循环,因此计算机一次只使用一个点),但不解决"You lose"
部分代码的缺乏,也没有解决无效的最终游戏检查条件。当然,游戏仍然没有重置,但至少它停止了。
答案 2 :(得分:0)
首先你有一个无限循环,所以我建议我们先摆脱它。 看着代码,你不断让计算机转过来,这就是无限循环位。 checkWin也没有工作..但首先让我们无限循环。
这一位 - &gt;
checkWin();
if(rowWin === true || columnWin === true || diagonalWin === true) {
$(".teal").text("You win");
}
// else { //comment out this else part, so at least play return to you.
player1.turn = true;
player2.turn = false;
// }
答案 3 :(得分:0)
检查对角线逻辑有问题 例如,即使只有一个单元板[0] [0] = X,然后是diagonalWin = true
检查胜利的更好方法是仅检查行,列和对角线以获取最新动作