2016-10-04 19 views
0

私は作業していますが、何らかの理由で勝利条件を設定するとボードが完全に外れて、コンピュータの選択がすべての四角形に置かれます。私は勝利でゲームのリセットを書いていないので、問題はありませんが、私はそれがないときに勝利を引き起こしていると信じています。どんな助けも大歓迎です! 警告は、ブラウザで問題が発生した場合にブラウザーをクラッシュさせて実行しないでください。配列が正しく動作しない場合else else文

特定のコード。アプリケーション全体がここにあります:http://codepen.io/jeffm64/pen/BLmjvv?editors=1011

function checkWin() { 
    for (let i = 0; i < symbols.length; i++) { 
     for (let j = 0; j < board.length; j++) { 
      //checks rows 
      if (board[j][0] === symbols[i] && board[j][1] === symbols[i] && board[j][2] === symbols[i]) { 
       rowWin = true; 
       console.log("Hey it worked"); 
      } 
      //checks columns 
      else if (board[0][j] === symbols[i] && board[1][j] === symbols[i] && board[2][j] === symbols[i]) { 
       columnWin = true; 
       console.log("Hey it worked"); 
      } 
      //checks diagonals 
      else if (board[j][j] === symbols[i] || board[2 - j][j] === symbols[i]) { 
       diagonalWin = true; 
       console.log("Hey it worked"); 
      } 
      else { 

      } 
     } 
    } 
}; 
+0

私は 'console.log(" dun dun DUN! "、i、j)'を最後の 'elseそしてゲームを走らせて、決して「私」を増やしていないようだ。あなたはどこかに悪い条件があります – vlaz

答えて

2

あなたは行と列を反復していますが、これは問題ありません。 しかし、board.lengthの対角線はありません。あなたがしていることは意味をなさない。

どのように対角線を確認できますか? (これは宿題のように思われるので答えは分かりません)

+0

私は一日中作業していたかもしれませんが、勝利のために文字通り1対角線の場所しかチェックしていないという対角線の問題を間違いなく見ています。 –

0

あなたの主な問題は勝てません(とにかく@aepureの説明どおりにチェックされていません)、コンピュータがすべての左側のフィールドを埋めるという事実です。 tttGameへの無限の再帰的呼び出し(問題のコードではありません)があるため、それが実行されます。私は、player2.turnの場合にのみ、computerAIと呼んで、ゲームが終了した後にplayer1.turnplayer2.turnfalseとすることをお勧めします。これは "何とか"(再帰的ループを削除するため、コンピュータは一度に1つの場所しか使用しません)。しかし、"You lose"部分のコードが不足したり、エンドゲームのチェック条件が無効になったりしません。もちろん、ゲームはまだリセットが欠けていますが、少なくとも停止しています。

0

まず、無限ループがあるので、最初に取り除くことをお勧めします。 コードを見て、コンピュータを常にターンさせてください。それは無限のループビットです。 checkWinはどちらも動作していません..しかし、最初に無限ループを途中まで出すことができます。

ここで、このビット - あなたのチェック対角線ロジックに問題が>

checkWin(); 
if(rowWin === true || columnWin === true || diagonalWin === true) { 
    $(".teal").text("You win"); 
} 
// else { //comment out this else part, so at least play return to you. 
    player1.turn = true; 
    player2.turn = false; 
// } 
+0

無限ループを引き起こしているものが何であったのか分かりませんでした。 –

0

あり 例えばたとえ一つだけのセルボード[0] [0] = X、その後diagonalWin =真

Aより良い方法は、勝利をチェックするのは、最新の移動の行、列、および対角線のみをチェックすることです

関連する問題