Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的Tictatcoe游戏是如何在O时将获胜者返回为X的_Javascript - Fatal编程技术网

Javascript 我的Tictatcoe游戏是如何在O时将获胜者返回为X的

Javascript 我的Tictatcoe游戏是如何在O时将获胜者返回为X的,javascript,Javascript,我是一个相对较新的程序员,我创建了一个Tic-Tac-Toe游戏,可以提醒赢得游戏的用户。问题是,当O对角获胜时,当X赢了比赛时,它会保留一个警报。我似乎在代码中找不到问题 我的源代码位于以下URL: 井字过三关 身体{ “Arial”,时代,衬线; } .路政署{ 填充:10px; 边框:1.25px纯黑; 高度:30px; 宽度:30px; 浮动:左; } .行{ 明确:两者皆有; 单击以播放Tic-Tac-Toe 再玩一次 var currentPlayer=“O”; var wo

我是一个相对较新的程序员,我创建了一个Tic-Tac-Toe游戏,可以提醒赢得游戏的用户。问题是,当O对角获胜时,当X赢了比赛时,它会保留一个警报。我似乎在代码中找不到问题

我的源代码位于以下URL:


井字过三关
身体{
“Arial”,时代,衬线;
}
.路政署{
填充:10px;
边框:1.25px纯黑;
高度:30px;
宽度:30px;
浮动:左;
}
.行{
明确:两者皆有;
单击以播放Tic-Tac-Toe

再玩一次

var currentPlayer=“O”; var won=假; 活动场所(箱){ 如果(box.innerText!=“赢得”)返回; box.innerText=currentPlayer; currentPlayer==“O”?currentPlayer=“X”:currentPlayer=“O” 棋盘(当前玩家); } 功能检查游戏板(currentPlayer){
因为(var i=0;i通常StackOverflow不是儿童游乐场,但你们两个男孩(你和@hacker19374)太有趣了,所以我决定向你们解释发生了什么


事实上,@TiiJ7已经回答了你的问题,他说:“你没有通过
currentPlayer
最后两次检查”。如果你不明白这是什么意思,让我解释一下

您的
checkWinner(first、second、third、currentPlayer)
函数等待四个参数。当您在
for
循环中调用此函数时,您将为其提供四个参数:

for (var i=0; i <= 2; i++) {
checkWinner(document.getElementById(i + "_0").innerText,
document.getElementById(i + "_1").innerText,
document.getElementById(i + "_2").innerText, currentPlayer);
checkWinner(document.getElementById("0_" + i).innerText,
document.getElementById("1_" + i).innerText,
document.getElementById("2_" + i).innerText, currentPlayer);
}
当您以这种方式调用
checkWinner
函数时,第四个参数会在该函数代码中获取一个值

  if (currentPlayer == "X"){
    alert(" Winner is O!" );
  }
  else {
    alert(" Winner is X!" );
  }
currentPlayer
变量的值是
undefined
,它会提醒您,由于检查未通过,所以赢家是X。
currentPlayer
的值不是
X
,但也不是
O
,它是未定义的

现在看看,如果你选择

function place(box) {
if (box.innerText !="" || won) return;
box.innerText = currentPlayer;
currentPlayer == "O" ? currentPlayer = "X" : currentPlayer = "O"
checkGameBoard(currentPlayer);
}
你会用

function place(box) {
if (box.innerText !="" || won) return;
box.innerText = currentPlayer;
checkGameBoard(currentPlayer);
currentPlayer == "O" ? currentPlayer = "X" : currentPlayer = "O"
}
i、 e.在检查获胜条件后,而不是之前,切换球员。这样代替

  if (currentPlayer == "X"){
    alert(" Winner is O!" );
  }
  else {
    alert(" Winner is X!" );
  }
你可以用

alert(" Winner is " + currentPlayer + "!" );
这将使您的调试更加容易,当您得到类似“Winner未定义!”

此外,您完全可以跳过将
currentPlayer
作为参数传递给函数。您已经有了一个全局变量
currentPlayer
,并且它在所有函数中都可用。事实上,您已经在
place
函数中使用了该变量。阅读本文,它应该会向您解释一些JavaScript概念


现在,如果您了解以上所有内容,并想进一步练习编程,我可以为您提出一个高级任务。您的游戏板上应该有一个标签,显示谁是当前玩家-“当前玩家是…”。标签应该在每次移动后更改,如果soneone赢了,标签应该显示“赢家是…”

请您将代码包含在问题中。考虑使用堆栈片段。您不通过<代码> CurrnPosivs/Coo>到最后2个检查。<代码>如果(CurrnPrime=“x”)警报(“胜利者是O!”)< /代码>…
alert(" Winner is " + currentPlayer + "!" );