Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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代码可以工作,但不能立即工作_Javascript_Html_Css_Tic Tac Toe - Fatal编程技术网

Javascript代码可以工作,但不能立即工作

Javascript代码可以工作,但不能立即工作,javascript,html,css,tic-tac-toe,Javascript,Html,Css,Tic Tac Toe,我试着写一个简单的井字游戏。当我编写代码时,我会说我遇到了一个奇怪的“bug”?一个名为“isWinner”的函数检查是否有人赢了。它将一个名为“winningCombinations”的数组与其得到的组合进行比较。问题是,代码应该在找到获胜组合后立即显示“获胜鸡肉晚餐”。嗯,没有。它在3次额外移动后显示出来。我不知道出了什么问题,所以我会感谢你的帮助。提前谢谢。哦,这是代码: 代码笔: constturndiv=document.getElementById('turn'); const

我试着写一个简单的井字游戏。当我编写代码时,我会说我遇到了一个奇怪的“bug”?一个名为“isWinner”的函数检查是否有人赢了。它将一个名为“winningCombinations”的数组与其得到的组合进行比较。问题是,代码应该在找到获胜组合后立即显示“获胜鸡肉晚餐”。嗯,没有。它在3次额外移动后显示出来。我不知道出了什么问题,所以我会感谢你的帮助。提前谢谢。哦,这是代码:

代码笔:

constturndiv=document.getElementById('turn');
const board=document.getElementById(“board”);
const-box=document.queryselectoral('.box');
常数Winning组合=[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[1, 4, 7],
[2, 5, 8],
[3, 6, 9],
[1, 5, 9],
[3, 5, 7]
];
设claimedcells=newarray();
让xtrn=true;
/*这些变量将分别具有X和O组合*/
设xcombination=new Array();
让ocombination=newarray();
let turn=xcombination;
/*向每个单元格添加事件侦听器*/
box.forEach(单元格=>{
单元格.addEventListener('click',handleCellClick);
});
/*处理单元格,在此阶段确认此单元格首次单击*/
函数handleCellPlayed(单元格,值){
如果(xtrn){
cell.textContent='x';
xtrn=false;
xcombination.push(值);
}
否则{
cell.textContent='o';
xtrn=真;
o组合。推送(值);
}
}
/*句柄单击任意单元格*/
函数handleCellClick(){
如果(xtrn){
if(isWinner(xcombination)){
警惕(“赢家鸡肉晚餐”);
}
}
否则如果(isWinner(O组合)){
警惕(“赢家鸡肉晚餐”);
}
让clickedcell=this.getAttribute('value');
让freeCell=isCellFree(单击单元格);
if(自由单元){
handleCellPlayed(this,this.getAttribute('value'));
claimedcells.push(点击单元格);
}
}
/*支票是免费的*/
函数为无单元(单元){
让freeCell=true;
对于(i=0;i{
设a=组合[0]+“”;
设b=组合[1]+“”;
设c=组合[2]+“”;
if(usercomposition.includes(a)&&usercomposition.includes(b)&&usercomposition.includes(c)){
胜利者=真;
}
});
返回赢家;
}
正文{
背景颜色:天蓝;
}
.集装箱{
最小宽度:100%;
最小高度:100%;
显示器:flex;
对齐项目:居中;
证明内容:中心;
}
#玩家{
宽度:30vw;
背景颜色:米色;
填充:10px;
文本对齐:居中;
}
#董事会{
显示器:flex;
对齐项目:居中;
证明内容:中心;
柔性包装:包装;
弹性基准:33.333%;
文本转换:大写;
字体大小:粗体;
字体大小:100px;
}
.盒子{
宽度:31%;
高度:8vw;
边框:0.5px黑色实心;
}
.box:第一个子项,.box:第n个子项(2),.box:第n个子项(3){
边界顶部:无;
}
.box:第一个孩子,.box:第n个孩子(4),.box:第n个孩子(7){
左边界:无;
}
.box:第n个孩子(7),.box:第n个孩子(8),.box:第n个孩子(9){
边框底部:无;
}
.盒子:第n个孩子(3),
.盒子:第n个孩子(6),
.盒子:第n个孩子(9){
边界权:无;
}

转X!

您的
HandleCell在winner执行任何其他操作之前,请单击
功能测试

因此,我点击“X”,代码进入并检查赢家(目前还没有赢家)。然后它更新所有内容,然后轮到o,它进来检查o的获胜者,什么都没有。然后它更新了所有内容,然后再次X旋转它检查赢家,现在它的响应为真


在处理完其余的点击操作后,您需要将赢家支票移动到。

您的
handleCellClick
对赢家进行功能测试,然后再执行其他操作

因此,我点击“X”,代码进入并检查赢家(目前还没有赢家)。然后它更新所有内容,然后轮到o,它进来检查o的获胜者,什么都没有。然后它更新了所有内容,然后再次X旋转它检查赢家,现在它的响应为真

在处理完剩余的点击操作后,您需要将赢家支票移至。

您有两个问题

  • 在你做标记之前,你正在做isWinner检查
  • 在进行检查之前,您正在更改Xtrn
  • 下面我将修改以修复这两个问题

    我做了一个简单的
    xtorn=!克斯特恩
    在计算用户是否获胜后翻转用户

    constturndiv=document.getElementById('turn');
    const board=document.getElementById(“board”);
    const-box=document.queryselectoral('.box');
    常数Winning组合=[
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
    [1, 4, 7],
    [2, 5, 8],
    [3, 6, 9],
    [1, 5, 9],
    [3, 5, 7]
    ];
    设claimedcells=newarray();
    让xtrn=true;
    /*这些变量将分别具有X和O组合*/
    设xcombination=new Array();
    让ocombination=newarray();
    let turn=xcombination;
    /*向每个单元格添加事件侦听器*/
    box.forEach(单元格=>{
    单元格.addEventListener('click',handleCellClick);
    });
    /*处理单元格,在此阶段确认此单元格首次单击*/
    函数handleCellPlayed(单元格,值){
    如果(xtrn){
    cell.textContent='x';
    //xtrn=false;
    xcombination.push(值);
    }
    否则{
    cell.textContent='o';
    //xtrn=真;
    o组合。推送(值);
    }
    }
    /*句柄单击任意单元格*/
    功能手柄