2012-03-29 5 views
0

Ich versuche, einfach XO-Spiel zu tun, scheint es gut zu funktionieren, aber wenn ich die 3 "Os" die Funktion call() erreichen, gibt es mir nicht verlieren Sie in der if-Anweisung , gibt es du gewinnst wehn ich erreiche 3 "Xs".Kann mir jemand sagen, warum dieser Jquery-Code nicht richtig reagiert?

<script type="text/javascript" src="jquery.js" ></script> 
<script type="text/javascript" > 



    function call() { 
     var x = Math.floor((Math.random() * 9) + 1); 
     if ($('#td' + x).text() === "x" || $('#td' + x).text() === "o") { 
      call(); 
     } 

     else if (check() === true) { 
      $('div').text("You win "); 
      return false; 
     } 

     else if (checkLoose() === true) { 
     $('p').text("You Loose "); 
      return false; 
     } 

     else 
      $('#td' + x).text("o"); 
     } 



    function win(as, bs, cc) { 
     return ($('#td'+as).text() === "x" && $('#td'+bs).text() === "x" && $('#td'+cc).text() === "x") ; 

    } 

    function check(){ 

     if (win(1, 2, 3) || win(1, 4, 7) || win(4, 5, 6) || win(7, 8, 9) || win(2, 5, 8) || win(3, 6, 9) || win(1, 5, 9) || win(3, 5, 7) === true) 
       return true; 
} 

function checkLoose() { 

    if (lose(1, 2, 3) || lose(1, 4, 7) || lose(4, 5, 6) || lose(7, 8, 9) || lose(2, 5, 8) || lose(3, 6, 9) || lose(1, 5, 9) || lose(3, 5, 7) === true) { 

     return true; 
    } 
} 




    function lose(as, bs, cc) { 
     return ($('#td' + as).text() === "o" && $('#td' + bs).text() === "o" && $('#td' + cc).text() === "o"); 

    } 

    function dsd(sad) { 

     if ($('#td' + sad).text() === "x" || $('#td' + sad).text() === "o") 
      return false; 

     else if (check() === true) 
      return false; 

     else if (checkLoose() === true) { 

      return false; 
     } 
     else { 
      $("#td" + sad).text("x"); 
      call(); 
     }  
     } 

     $(document).ready(function(){ 
     $("td").hover(function() { 
      $(this).css("background-color", "yellow"); 
     }, function() { 
      $(this).css("background-color", "white"); 
     }); 
    }); 

</script> 

</head> 
<body> 




<center> 
<h1 >"  X ,O Game "</h1><br /> 
<div></div> 
<p></p> 
<table> 
    <tr> 
     <td id="td1" onclick="dsd(1);" ></td> 
     <td id="td2" onclick="dsd(2);"></td> 
     <td id="td3" onclick="dsd(3);"></td> 
    </tr> 

    <tr> 
     <td id="td4" onclick="dsd(4);"></td> 
     <td id="td5" onclick="dsd(5);"></td> 
     <td id="td6" onclick="dsd(6);"></td> 
    </tr> 

    <tr> 
     <td id="td7" onclick="dsd(7);"></td> 
     <td id="td8" onclick="dsd(8);"></td> 
     <td id="td9" onclick="dsd(9);"</td> 
    </tr> 
</table> 
</center> 
+0

'checkloose' muss' checkLoose' sein Großbuchstabe – mgraph

+0

Müssen posten, was diese Funktion tut und alle damit verbundenen HTML. – j08691

+0

["Lose"] (http://dictionary.reference.com/browse/lose) ist nicht buchstabiert ["Loose"] (http://dictionary.reference.com/browse/loose) ... nachschlagen . – Sparky

Antwort

1

Ihre Prüfung (und checkLoose) wird nur während des Klicks aufgerufen. Sie müssen nach der Zeile, die Sie hinzufügen, in der Funktion call() nach Gewinnen und Verlusten suchen.

$('#td' + x).text("o"); 
/* add calls to check() and checkLoose() here */ 
0

In Funktionsaufruf, überprüfen Sie für den Gewinner/Verlierer vor dem „o“ Brief an die Zelle Zugabe (die checkLoose verursacht von nicht wahr Rückkehr). Wenn du es vorher hinzufügst, wird checkLoose true zurückgeben (und das Spiel wird korrekt aktualisiert)

Es gibt jedoch einen Nebeneffekt, es zu bewegen: Wenn der Mensch gewinnt, fügt der Computer noch ein "o" hinzu (Das Spiel sagt jedoch immer noch "Du gewinnst". - Du kannst dies auf verschiedene Arten angehen. Ich lasse dich das herausfinden :)

+1

Danke, das war wirklich sehr hilfreich. –

Verwandte Themen