2012-05-08 6 views
-4

私はチック・タック・トゥ・ゲームを作っています。できるだけ早く勝者を宣言する関数を修正する

完全なものが真(すべて四角で塗りつぶされている)になる前に勝者を宣言できるように、勝者は最後に勝つのではなく3つの一致する値を達成するために、次のコードをどのように変更しますか?

function check_squares() { 
    var values = new Array(); 
    var complete = true; 

    $('.square').each(function() {  
     values.push($(this).html()); 
     //if ($(this).html() == '') complete = false; 
    }); 

    if (complete == true) { 
     var winner = false; 

     if (values[0] == values[1] && values[1] == values[2]) winner = values[0]; 
     if (values[3] == values[4] && values[4] == values[5]) winner = values[3]; 
     if (values[6] == values[7] && values[7] == values[8]) winner = values[6]; 
     if (values[0] == values[3] && values[3] == values[6]) winner = values[0]; 
     if (values[1] == values[4] && values[4] == values[7]) winner = values[1]; 
     if (values[2] == values[5] && values[5] == values[8]) winner = values[2]; 
     if (values[0] == values[4] && values[4] == values[8]) winner = values[0]; 
     if (values[2] == values[4] && values[4] == values[6]) winner = values[2]; 

     if (winner) {   
      $('#output').html('Winner: ' + winner); 
     } else {   
      $('#output').html('No Winner'); 
     } 
    } else {  
     if (player_x == true) {  
      $('#output').html('x turn to move'); 
     } else {   
      $('#output').html('o turn to move'); 
     }  
    } 
} 
+2

ええと、ちょうど*そのロジックを処理するには良い方法があります... –

+3

ゲームのルールは何ですか?勝者を定義するものをどのように知っていますか?これはティックタックトーンですか? –

+1

チックタックトゥのように見える – ThiefMaster

答えて

0

機能はほぼ正しいです。主に、プレーヤーがセルの値を変更するたびに呼び出す必要があります。

私はあなたの機能を少し変更して複数回呼び出すことができるようにしました。変更したセクションにコメントを追加して、簡単に見つけることができました。

// Move these two variables into the global scope so that they are not reset 
// by each call to check_squares and so that our click function can access them. 
var complete = false; 
var winner = null; 

function check_squares() { 
    var values = new Array(); 

    $('.square').each(function() {  
     values.push($(this).html()); 
     //if ($(this).html() == '') complete = false; 
    }); 

    // Debug statement to see the order of the values. 
    console.log(values); 

    if (!complete) { 
     if (values[0] == values[1] && values[1] == values[2]) winner = values[0]; 
     if (values[3] == values[4] && values[4] == values[5]) winner = values[3]; 
     if (values[6] == values[7] && values[7] == values[8]) winner = values[6]; 
     if (values[0] == values[3] && values[3] == values[6]) winner = values[0]; 
     if (values[1] == values[4] && values[4] == values[7]) winner = values[1]; 
     if (values[2] == values[5] && values[5] == values[8]) winner = values[2]; 
     if (values[0] == values[4] && values[4] == values[8]) winner = values[0]; 
     if (values[2] == values[4] && values[4] == values[6]) winner = values[2]; 

     if (winner) {   
      $('#output').html('Winner: ' + winner); 
      // Indicate that there was a winner so no more input is allowed. 
      complete = true; 
     } else {   
      $('#output').html('No Winner'); 
     } 
    } else {  
     if (player_x == true) {  
      $('#output').html('x turn to move'); 
     } else {   
      $('#output').html('o turn to move'); 
     }  
    } 
} 

// Add a click handler to each square that checks for win conditions after each 
// X or 0 is added. 
$(".square").click(function() { 
    if (!complete) 
    { 
    // This obviously needs to be changed to determine which player is going. 
    $(this).html("X"); 
    check_squares(); 
    } 
}); 

私は実際の例を見るために簡単なJSFiddleを作成しました。

+0

ありがとうございます。それは勝者を宣言し、さらなるプレーを止める。私が行方不明になっている勝者の事例について、詳しく説明できますか?私は完全なボードの最後に "if(complete == true && winner == null){$( '#output')。html( 'No Winner'); } " –

+0

@JanvH' $( "。square")で見つかった要素の順序を期待通りにしないで 'td'要素を使ってすべてを設定しているので、おそらく私の例のようです。 –

関連する問題