2016-06-21 6 views
-1

私のプロジェクトは継続しています。これは、codepenでtic tac toeゲームを作ることです。私が抱えている問題は以下の機能です。 誰かが勝ったかどうかを計算することを想定していますが、1つの例外を除いてそうなります。今すぐAIは次の利用可能な場所にキャラクターを置くだけで、私のキャラクターを真っ直ぐなライン(中間ラインなど)に置いて、次のターンにコンピューターが勝つはずですコンピュータが勝ったことを返します。ループを終了することはできませんes6

私はゲームで私自身のアプローチを取っているので、これは理解しにくいかもしれません。勝利ブロックに達したことを示すコンソールログを作成しましたが、ループが実行されていると思います。これがes6やブロックスコープと関係があるのであれば私はしませんが、この場合には正しいアクションを得ることができません。私が試した他のほとんどのケースは正しく動作するようです。ここで

は、完全なコンテキストのcodepenへのリンクは次のとおりです。

CLICK ME.

編集:私は誤ってプロジェクトから機能をカットし、ペンはので、私はそれを固定動作を停止しました。それは別の関数を呼び出す前に関数が終了していない可能性がありますか?私が尋ねる理由は、コンピュータが勝った場合、小切手への呼び出しが真実に戻ってはならないからです。それが私が混乱している理由です。

hasWon(){ 
 
     let scores = this.scoring(); 
 
     allScores: { 
 
     for(let i = 0; i < scores.length; i++){ 
 
      let win = $('.end'); 
 

 
      let currentScore = scores[i]; 
 
      console.log("The scores here: " + scores); 
 
      console.log("the current score: " + currentScore); 
 
      console.log("the player score: " + (this.player * 3)); 
 
      console.log("the truth: " + (currentScore === (this.player * 3))); 
 
     
 
      if(currentScore === (this.player * 3)){ 
 
      console.log("we got in here but this line isn't counting"); 
 
      win.html("<h4>Player won the Game!</h4>"); 
 
      this.hasWonEnd(); 
 
      break allScores; 
 
      } else if (currentScore === (this.computer * 3)) { 
 
      console.log("we are displaying this line....."); 
 
      win.html("<h4>Computer won the Game!</h4>"); 
 
      this.hasWonEnd(); 
 
      break allScores; 
 
      } else if (this.emptyIndices().length === 0 && i === (scores.length - 1)){ 
 
      win.html("<h4>It's a draw!</h4>"); 
 
      this.hasWonEnd(); 
 
      break allScores; 
 
      } 
 
     } 
 
     } 
 
    }

答えて

0

私は問題を発見しました。私はそれが無関係であると信じています。

勝者が既に決定され、それによって上書きされた後、勝者を検出する関数が呼び出されていました。私の解決策は勝者がすでに存在するかどうかを確認するゲーム状態変数を作成することでした。 しかし、なぜ新しい値をとる前に関数が完了しないのか分かりません。しかし、それは行われ、それは正常に動作するようです。 それを見た皆様に感謝します。

関連する問題