Javascript代码可以工作,但不能立即工作
我试着写一个简单的井字游戏。当我编写代码时,我会说我遇到了一个奇怪的“bug”?一个名为“isWinner”的函数检查是否有人赢了。它将一个名为“winningCombinations”的数组与其得到的组合进行比较。问题是,代码应该在找到获胜组合后立即显示“获胜鸡肉晚餐”。嗯,没有。它在3次额外移动后显示出来。我不知道出了什么问题,所以我会感谢你的帮助。提前谢谢。哦,这是代码: 代码笔:Javascript代码可以工作,但不能立即工作,javascript,html,css,tic-tac-toe,Javascript,Html,Css,Tic Tac Toe,我试着写一个简单的井字游戏。当我编写代码时,我会说我遇到了一个奇怪的“bug”?一个名为“isWinner”的函数检查是否有人赢了。它将一个名为“winningCombinations”的数组与其得到的组合进行比较。问题是,代码应该在找到获胜组合后立即显示“获胜鸡肉晚餐”。嗯,没有。它在3次额外移动后显示出来。我不知道出了什么问题,所以我会感谢你的帮助。提前谢谢。哦,这是代码: 代码笔: constturndiv=document.getElementById('turn'); const
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旋转它检查赢家,现在它的响应为真
在处理完剩余的点击操作后,您需要将赢家支票移至。您有两个问题
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组合。推送(值);
}
}
/*句柄单击任意单元格*/
功能手柄