我正在尝试构建一个tic tac toe游戏,但它不起作用,我的意思是当我点击游戏板时,我希望游戏开始并相应地拥有我的功能。现在问题是我希望这个游戏是人类与机器和机器部分(功能AI())不能正常工作。
这是链接codepen
我在“游戏”功能(游戏())中拥有所有功能,当用户点击位于js文件末尾的游戏板时,该功能应该运行。
试着玩游戏,你会明白我在说什么 - 奇怪的行为,我正在睁开眼睛,但我仍然被卡住了。
如果有人能帮助我,我会非常感激。感谢。
function game(){
symbDisp();
winCheck();
turns += 1;
if (gameEnd == false && turns % 2 == 0) {
AI();
winCheck();
turns += 1;
}
}
答案 0 :(得分:1)
AI()函数有效(或多或少)。它实际上只是玩游戏的人工智能。玩家移动不起作用,因为你没有告诉symbDisp()函数点击了哪个方格('this'指的是文档,而不是方块)
您可以将事件处理程序更改为
$('.square').on('click', function() {
game($(this));
});
在这个匿名函数中,这指的是方形,因为它是事件处理程序绑定的元素。
现在你还需要通过改变你的game()和symbDisp()函数来传递这个方形元素,以将元素作为它们的参数,并在symbDisp()中使用它。
例如:
function game(elem){
symbDisp(elem);
//more stuff
function symbDisp(elem) {
if(elem.text()==='') {
//more stuff
你的游戏中还有其他错误,但我会留下那些让你解决。
答案 1 :(得分:0)
第一个symbDisp正在接收window
this
而不是正确的td
。
将第10行更改为
$('.square').on('click', function() { game(this) } );
因为您必须将this
传递给子功能。因此,请进行以下更改:
124: function game(ths){
125:
126: symbDisp(ths);
然后将symbDisp更改为:
function symbDisp (ths) {
if($(ths).text()==='') {
$(ths).text(pTurn);
if(pTurn == player){
pTurn =comp;
}else{
pTurn=player;
}
}
}
还有另一个错误:pTurn在第一次到达symbDisp函数时未定义。所以将userIcon更改为:
function userIcon() {
if($(this).attr("id")=="x"){
player = pTurn ="X";
comp ="O";
} else if($(this).attr("id")=="o"){
player = pTurn ="O";
comp ="X";
}
$('#user').fadeOut(1000);
}
看到我在设置播放器时设置了pTurn。
就是这样。它现在应该工作。我在这里分发了一个工作版本:
http://codepen.io/anon/pen/oxPyej
希望有所帮助