Class 与';Tic-Tac-Toe';班级

Class 与';Tic-Tac-Toe';班级,class,tic-tac-toe,Class,Tic Tac Toe,我对JS比较陌生,一直在做一个Tic-Tac-Toe游戏作为练习。我想我已经完成了90%的任务,但是在第一次玩完之后(例如,当一个新游戏被渲染时),我遇到了一个恼人的bug。在这个游戏中,当相应的玩家点击每个方块时,每个方块都会被赋予一个类(“x”或“o”)。游戏逻辑检查该玩家是否有任何游戏获胜组合,以及它们是否重置游戏(删除“x”和“o”平铺类)。这似乎是可行的,但在下一轮中单击后,一些瓷砖同时被赋予“x”和“o”等级,这基本上打破了游戏。例如,可以用一行“x”、“x”和“o”来赢得游戏 编辑

我对JS比较陌生,一直在做一个Tic-Tac-Toe游戏作为练习。我想我已经完成了90%的任务,但是在第一次玩完之后(例如,当一个新游戏被渲染时),我遇到了一个恼人的bug。在这个游戏中,当相应的玩家点击每个方块时,每个方块都会被赋予一个类(“x”或“o”)。游戏逻辑检查该玩家是否有任何游戏获胜组合,以及它们是否重置游戏(删除“x”和“o”平铺类)。这似乎是可行的,但在下一轮中单击后,一些瓷砖同时被赋予“x”和“o”等级,这基本上打破了游戏。例如,可以用一行“x”、“x”和“o”来赢得游戏

编辑1:好的,我认为问题在于newGame()运行了两次。仍在努力找出解决办法

我一直在寻找答案,但没有结果!我在下面包含了我的代码。谢谢

$(文档).ready(函数(){
var xtorn=真;
var-xScore=0;
var oScore=0;
var计数=0;
新游戏();
函数newGame(){
$(“td”).removeClass();
$(“td”).empty();
计数=0;
xtrn=真;
render();
游戏();
}
函数render(){
$(“#xScore”).text(“x分数:+xScore”);
$(“#oScore”).text(“o分数:+oScore”);
}
函数游戏(){
$(“td”)。在(“单击”)上,函数(){
var self=$(这是);
如果(xtrn){
self.text(“X”);
self.addClass(“x”);
}
否则{
$(本).text(“O”);
自添加类(“o”);
}
xtrn=!xtrn;
$(此).off(“单击”);
计数++;
scoreEval();
});
函数scoreEval(){
如果(
美元(“#一”).hasClass('x')&&('二”).hasClass('x')&&('三”).hasClass('x'))||
美元(“#四”).hasClass('x')&&$('#五”).hasClass('x')&&$('#六”).hasClass('x'))||
美元(“#七”).hasClass('x')&&$('#八”).hasClass('x')&&$('九”).hasClass('x'))||
美元(“#一”).hasClass('x')&&$('#四”).hasClass('x')&&$('七”).hasClass('x'))||
美元(“#二”).hasClass('x')&&$('#五”).hasClass('x')&$('八”).hasClass('x'))||
美元(“#三”).hasClass('x')&&$('#六”).hasClass('x')&&$('九”).hasClass('x'))||
美元(“#一”).hasClass('x')&&$('#五”).hasClass('x')&&$('九”).hasClass('x'))||
美元(“#三”).hasClass('x')&&('五”).hasClass('x')&&('seven').hasClass('x'))
) {
xScore++;
警告(“玩家X赢了游戏!”);
新游戏();
}
否则如果(
美元(“#一”).hasClass('o')&&$('o').hasClass('o')&&$('o').hasClass('o')&$).hasClass('o'))||
美元(“#四”).hasClass('o')&&$('o').hasClass('o')&&$('o').hasClass('o')&$).hasClass('o'))||
美元(“#七”).hasClass('o')&&('hasClass('o')&&$).hasClass('o')&('九”).hasClass('o'))||
美元(“#一”).hasClass('o')&&('hasClass('o')&&$).hasClass('o')&('seven')。hasClass('o'))||
美元(“#2”)。hasClass('o')&&('5o')。hasClass('o')&&('8th')。hasClass('o'))||
美元(“#三”).hasClass('o')&&('hasClass('o')&&$).hasClass('o')&('九”).hasClass('o'))||
美元(“#一”).hasClass('o')&&('5o').hasClass('o')&&('nine').hasClass('o'))||
美元(“#三”).hasClass('o')&&('5o').hasClass('o')&('seven').hasClass('o'))
) {
oScore++;
警惕(“玩家O赢了游戏!”);
新游戏();
}
否则如果(计数===9){
警惕(“抽签!”);
新游戏();
}
}
}
});
表格,td{
边框:1px纯黑;
字体大小:50px;
文本对齐:居中;
}
运输署{
高度:100px;
宽度:100px;
}

井字过三关
得分


在执行任何操作之前,如果分配了X或O,则应签入onClick事件。我通过单击已包含X/O的框重现了一个错误。

您应该在问题标签中添加javascript以获得更好的响应