2016-04-26 3 views
0

Я пытаюсь создать игру с tic tac toe, но она не работает, я имею в виду, когда я нажимаю на игровое поле, я хочу, чтобы игра начиналась и выполнялась мои функции соответственно. Теперь проблема в том, что я хочу, чтобы эта игра была человеком против машины, а часть машины (функция AI()) работает неправильно.javascript tic tac toe

Вот ссылка codepen

У меня есть все мои функции в функции «игры» (игра()), которая должна выполняться, когда пользователь нажимает на игровой доске, которая находится в конце файла JS.

Просто попробуйте сыграть в игру, и вы поймете, о чем я говорю - странное поведение, и я царапаю глаза, и все же я застрял.

Я был бы очень признателен, если бы кто-нибудь мог мне помочь. Благодарю.

function game(){ 
    symbDisp(); 
    winCheck(); 
    turns += 1; 
    if (gameEnd == false && turns % 2 == 0) { 
     AI(); 
     winCheck(); 
     turns += 1; 
    } 
} 
+0

Если вы нашли ответы полезными, пожалуйста upvote и принять тот, который вы думаете, были самыми полезным. Благодарю. –

ответ

1

Функция AI() работает (более или менее). На самом деле это только ИИ, который играет в игру. двигается игрок не работает, потому что вы не говорите функции symbDisp(), которая была нажата квадрат («это» относится к документу, а не квадраты)

Вы можете изменить EventHandler сформировать

$('.square').on('click', function() { 
    game($(this)); 
}); 

Внутри этой анонимной функции это относится к квадрату, так как это элемент, к которому привязан обработчик событий.

Теперь вам нужно пройти этот квадратный элемент немного, изменив функции game() и symbDisp(), чтобы взять элемент в качестве своих аргументов и использовать его внутри symDisp().

, например:

function game(elem){ 
    symbDisp(elem); 
    //more stuff 

function symbDisp(elem) { 
    if(elem.text()==='') { 
    //more stuff 

Там также другие ошибки в игре, но я оставлю для вас решения.

+0

Спасибо большое, я пытаюсь решить ошибки, но они просто не перестают приходить lol. Теперь я понимаю, когда я говорю «это» с symDisp(), он не знает, что такое «это», потому что это не объект и не имеет привязанного к нему события. Я прав?? Теперь проблема в том, что он продолжает переключать значки, почему? –

0

Первый симбисский получает 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

Надеется, что это помогает

+0

player = pTurn = "X"; Почему это, если я уже объявил переменную pturn = player? И пока он не работает должным образом, он продолжает переключать мой значок, почему? http://codepen.io/anon/pen/oxPyej –