2016-04-26 9 views
0

Ich versuche, ein Tic Tac Toe Spiel zu bauen, aber es funktioniert nicht, was ich damit meine, wenn ich auf das Spielbrett klicke, möchte ich das Spiel starten und habe meine Funktionen entsprechend. Jetzt ist das Problem, ich möchte, dass dieses Spiel Mensch gegen Maschine ist und der Maschinenteil (Funktion AI()) nicht richtig funktioniert.Javascript Tic Tac Toe

Hier ist der Link codepen

Ich habe alle meine Funktionen im „Spiel“ -Funktion (Spiel()), die ausgeführt werden sollen, wenn ein Benutzer klickt auf dem Spiel-Brett, das am Ende der JS-Datei ist.

Versuchen Sie einfach, das Spiel zu spielen und Sie werden verstehen, worüber ich spreche - seltsames Verhalten und ich kratze mir die Augen aus und immer noch stecke ich fest.

Ich würde es wirklich schätzen, wenn mir jemand helfen könnte. Vielen Dank.

+0

hilft Wenn Sie die Antworten nützlich gefunden, bitte upvote und akzeptieren die man denken, Sie waren sehr hilfreich. Vielen Dank. –

Antwort

1

AI() Funktion funktioniert (mehr oder weniger). Es ist eigentlich nur die KI, die das Spiel spielt. Spieler bewegt funktionieren nicht, weil Sie nicht über die symbDisp() Funktion sagen, die quadratisch angeklickt wurde (‚this‘ bezieht sich auf das Dokument, nicht die Quadrate)

Sie die Eventhandler ändern könnte bilden

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

Innerhalb dieser anonymen Funktion bezieht sich dies auf das Quadrat, da dies das Element ist, an das der Ereignishandler gebunden war.

Jetzt müssen Sie dieses quadratische Element auch ein wenig weitergeben, indem Sie die Funktionen game() und symbDisp() so ändern, dass das Element als Argumente verwendet wird und innerhalb von symbDisp() verwendet wird.

zum Beispiel:

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

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

Es gibt auch andere Fehler in Ihrem Spiel, aber ich werde die für Sie bewältigen lassen.

+0

Vielen Dank Bruder, ich versuche, die Bugs anzugehen, aber sie hören einfach nicht auf zu lol kommen. Ich verstehe jetzt, wenn ich "this" zu dem symbDisp() sage, weiß es nicht, was "dies" ist, weil es kein Objekt ist oder ein Ereignis daran gebunden ist. Habe ich recht?? Jetzt ist das Problem, es schaltet die Symbole um, warum ist das so? –

0

Erste symbDisp empfängt window als this anstelle der korrekten td.

Änderungslinie 10 bis

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

wegen der Änderung, die Sie this den Unterfunktionen passieren müssen. So stellen Sie die folgenden Änderungen:

124: function game(ths){ 
125:  
126: symbDisp(ths); 

und dann symbDisp ändern:

function symbDisp (ths) { 
    if($(ths).text()==='') { 
    $(ths).text(pTurn); 
     if(pTurn == player){ 
     pTurn =comp; 
     }else{ 
     pTurn=player; 
     } 
    } 
} 

Es gibt einen weiteren Fehler: pTurn nicht definiert ist, wenn es zuerst symbDisp Funktion erreicht. Also ändere userIcon zu:

sehe, dass ich pTurn eingestellt habe, wenn der Spieler eingestellt ist.

Das ist es. Es sollte jetzt funktionieren.Ich gegabelt eine funktionierende Version hier:

http://codepen.io/anon/pen/oxPyej

Hoffe, dass es

+0

player = pTurn = "X"; Warum, wenn ich die Variable pturn = player schon deklariert habe ?? Und wenn es nicht richtig funktioniert, schaltet es weiterhin mein Icon um, warum ist das so? http://codepen.io/anon/pen/oxPyej –