- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的代码有问题,我一直在尝试查看它有什么问题,但没有成功,我真的需要帮助。这里的问题是,代码对于两个玩家来说运行良好(还没有完成一个玩家的部分,即人工智能),但是当我按下重置按钮时,它不起作用,所有变量似乎都重置了,我'我猜测这是一些概念错误。 Here is the code ,问题出在第 108 行,我相信,当我做第一个游戏时,它工作正常,但随后它开始变得疯狂,就像某些东西没有重置好一样,我很抱歉,如果这是我犯的菜鸟错误,但我我对此很陌生。
如果您不想检查codepen链接,则代码是这样的:
$(document).ready(function(){
//Lets work on the variables and what they do
var set=0; //I'll use this to control the 3x3 grids
var tempx=0; //I'll use this to control player X
var temp0=0; //I'll use this to control player O
var myturn='X'; //This is what I'll actually put out in the grid and is the human player
var AI='O'; //But it will change according on who's the first player to move and is the Computer
var contador=0;
//I declare the winning conditions for player vs player
var onex=0;
var onexx=0;
var twox=0;
var twoxx=0;
var threex=0;
var threexx=0;
var one0=0;
var one00=0;
var two0=0;
var two00=0;
var three0=0;
var three00=0;
//This is especifically for AI vs player
//Going to set the original state of everything
$('.reset').hide();
$('.player').hide();
$('.turns').hide();
$('.whichplay').hide();
//First lets work on each button function
//Reset button!
function reset(){
$('.rows').prop("disabled",true);
$('.reset').hide();
$('.player').hide();
$('.turns').hide();
$('.whichplay').hide();
$('.two-players').show();
$('.one-player').show();
$('.text').show();
$('#playo').prop('disabled', false);
$('#playx').prop('disabled', false);
$('.rows').empty();
set=0;
temp0=0;
tempx=0;
contador=0;
onex=0;
onexx=0;
twox=0;
twoxx=0;
threex=0;
threexx=0;
one0=0;
one00=0;
two0=0;
two00=0;
three0=0;
three00=0;
console.log('tempx after reset is '+tempx);
console.log('temp0 after reset is '+temp0);
}
$('.reset').click(function(){
reset();
});
function start(){
console.log('IM STARTING LOOOOK')
$('.one-player').hide();
$('.reset').show();
$('.player').show();
$('.two-players').hide();
$('.text').hide();
$('.whichplay').show();
//set=2;
//console.log('set is '+set);
$('.rows').removeAttr('disabled');
//Player X function
$('#playx').click(function(){
$('.whichplay').hide();
$('.turns').show();
$('#playo').prop('disabled', true);
$('#playx').prop('disabled', true);
$('.rows').prop("disabled",false);
tempx=1;
console.log('tempx after start is '+tempx);
console.log('tempO after start is '+temp0);
});
//Player O function
$('#playo').click(function(){
$('.whichplay').hide();
$('.turns').show();
$('#playo').prop('disabled', true);
$('#playx').prop('disabled', true);
$('.rows').prop("disabled",false);
temp0=1;
console.log('tempx after start is '+tempx);
console.log('tempO after start is '+temp0);
});
};
//When I hit one of these two options I will go into GAME MODE
//LETS ENTER GAME MODE!
$('.one-player').click(function(){
//start();
console.log('ERROR');
});
$('.two-players').click(function(){
start();
$('.rows').click(function(){
//I will create a variable that will store the ID's from the grid I click
var idstore=$(this).attr('id');
$(this).prop("disabled",true);
contador++;
//Now I got to control the turns X and O
if(tempx===1){
$(this).text('X');
console.log('This is the letter '+$(this).text('X'));
var s=$(this).get(0).id; //With this I extract the ID value into a string
tempx=0; //I close PX turn
temp0=1; //I start PY turn
var checker0=s.charAt(0); //I check the first letter of the id
var checker1=s.charAt(1); //I check the second letter of the id
$('#playo').show(); //I show its PO turn
$('#playx').hide();
if(checker0==='1'){
onex++; //Everytime this gets up to 3 PX win because it means a full row
//console.log('onex is '+onex);
}else if(checker0==='2'){
twox++; //Same here because it means a full row
//console.log('twox is '+twox);
}else if(checker0==='3'){
threex++; //Aaaaand same
//console.log('threex is '+threex);
}
if(checker1==='1'){
onexx++; //This means a full column
//console.log('onexx is '+onexx);
}else if(checker1==='2'){
twoxx++; //This means another full column
//console.log('twoxx is '+twoxx);
}else if(checker1==='3'){
threexx++; //Same
//console.log('threexx is '+threexx);
}
if(onexx===3||onex===3||twoxx===3||twox===3||threex===3||threexx===3){
alert('Player X win!'); //This checks full rows and columns
$('.rows').prop("disabled",true);
}else if(onexx===1&&onex===1&&twoxx===1&&twox===1&&threex===1&&threexx===1){
alert('Player X win!'); //This is for diagonals
$('.rows').prop("disabled",true);
}else if(contador===9){
alert('draw..');
$('.rows').prop("disabled",true);
}
}else if(temp0===1){
$(this).text('O');
var ss=$(this).get(0).id;
tempx=1;
temp0=0;
var checker00=ss.charAt(0);
var checker11=ss.charAt(1);
$('#playo').hide();
$('#playx').show();
//We're going to check the winner
if(checker00==='1'){
one0++;
//console.log('one0 is '+one0);
}else if(checker00==='2'){
two0++;
//console.log('two0 is '+two0);
}else if(checker00==='3'){
three0++;
//console.log('three0 is '+three0);
}
if(checker11==='1'){
one00++;
//console.log('one00 is '+one00);
}else if(checker11==='2'){
two00++;
//console.log('two00 is '+two00);
}else if(checker11==='3'){
three00++;
//console.log('three00 is '+three00);
}
if(one00===3||one0===3||two00===3||two0===3||three0===3||three00===3){
alert('Player O win!');
$('.rows').prop("disabled",true);
}else if(one00===1&&one0===1&&two00===1&&two0===1&&three0===1&&three00===1){
alert('Player O win!');
$('.rows').prop("disabled",true);
}else if(contador===9){
alert('draw..');
$('.rows').prop("disabled",true);
}
}
});
});
});
最佳答案
发生这种情况是因为当您使用启动函数时,它会在 .rows
中添加绑定(bind)单击函数。然后在重置后,您没有删除绑定(bind),而是将另一个绑定(bind)重新添加到 .rows
点击函数中。
可以通过使用.on
.off
点击功能来避免这种情况。当你想附加点击功能时,你使用.on
,当你重置或删除它时,你使用off
$( ".rows" ).off( "click");
$('.rows').on("click", function(){
});
关于javascript - 我的 JQUERY 的重置按钮让我的 TIC TAC TOE 代码变得疯狂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44448025/
我尝试理解[c代码 -> 汇编]代码 void node::Check( data & _data1, vector& _data2) { -> push ebp -> mov ebp,esp ->
我需要在当前表单(代码)的上下文中运行文本文件中的代码。其中一项要求是让代码创建新控件并将其添加到当前窗体。 例如,在Form1.cs中: using System.Windows.Forms; ..
我有此 C++ 代码并将其转换为 C# (.net Framework 4) 代码。有没有人给我一些关于 malloc、free 和 sprintf 方法的提示? int monate = ee; d
我的网络服务器代码有问题 #include #include #include #include #include #include #include int
给定以下 html 代码,将列表中的第三个元素(即“美丽”一词)以斜体显示的 CSS 代码是什么?当然,我可以给这个元素一个 id 或一个 class,但 html 代码必须保持不变。谢谢
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我试图制作一个宏来避免重复代码和注释。 我试过这个: #define GrowOnPage(any Page, any Component) Component.Width := Page.Surfa
我正在尝试将我的旧 C++ 代码“翻译”成头条新闻所暗示的 C# 代码。问题是我是 C# 中的新手,并不是所有的东西都像 C++ 中那样。在 C++ 中这些解决方案运行良好,但在 C# 中只是不能。我
在 Windows 10 上工作,R 语言的格式化程序似乎没有在 Visual Studio Code 中完成它的工作。我试过R support for Visual Studio Code和 R-T
我正在处理一些报告(计数),我必须获取不同参数的计数。非常简单但乏味。 一个参数的示例查询: qCountsEmployee = ( "select count(*) from %s wher
最近几天我尝试从 d00m 调试网络错误。我开始用尽想法/线索,我希望其他 SO 用户拥有可能有用的宝贵经验。我希望能够提供所有相关信息,但我个人无法控制服务器环境。 整个事情始于用户注意到我们应用程
我有一个 app.js 文件,其中包含如下 dojo amd 模式代码: require(["dojo/dom", ..], function(dom){ dom.byId('someId').i
我对“-gencode”语句中的“code=sm_X”选项有点困惑。 一个例子:NVCC 编译器选项有什么作用 -gencode arch=compute_13,code=sm_13 嵌入库中? 只有
我为我的表格使用 X-editable 框架。 但是我有一些问题。 $(document).ready(function() { $('.access').editable({
我一直在通过本教程学习 flask/python http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-wo
我想将 Vim 和 EMACS 用于 CNC、G 代码和 M 代码。 Vim 或 EMACS 是否有任何语法或模式来处理这种类型的代码? 最佳答案 一些快速搜索使我找到了 this vim 和 thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve this
这个问题在这里已经有了答案: Enabling markdown highlighting in Vim (5 个回答) 6年前关闭。 当我在 Vim 中编辑包含 Markdown 代码的 READM
我正在 Swift3 iOS 中开发视频应用程序。基本上我必须将视频 Assets 和音频与淡入淡出效果合并为一个并将其保存到 iPhone 画廊。为此,我使用以下方法: private func d
pipeline { agent any stages { stage('Build') { steps { e
我是一名优秀的程序员,十分优秀!