2016-07-23 6 views
1

私は "while"ループを作成しようとしているので、4つの条件が成立するまでゲームは継続しています。プレイヤーはオブジェクトとして配列に格納され、その順番を追跡する「アクティブな」キーもあります。whileループを中断する存在条件を書く

私はtakeTurn()関数で自分の順番にプレイヤーが行ったことすべてを切り離しましたが、私はallPlayers配列をループして、各プレイヤーに4勝利条件が満たされる。私は何をすべきか?私は "newActivePlayer"関数を書こうとしましたが、実際にはまだ理解していないスコープの問題のため、whileループ内では機能しません。

var allPlayers = [player1, player2, player3, player4] 
var activePlayer = player1; 

while (!win) { 
    takeTurn(); 
    if (activePlayer.wincondition1 === true && activePlayer.wincondition2 === true && activePlayer.wincondition3 === true && activePlayer.wincondition4 === true) { 
     win = true; 
    }; 
}; 
+1

をブラウザに伝えるこの道を返す必要があり、あなたがすべきJSエンジンにはイベントキューを処理する機会がないので、このようなループはほとんどありません。どのようなことを知っているのかは、 'takeTurn()'で実際に何が起こったのかを示す必要がありますが、ループ処理ではなく、さまざまなイベントハンドラから何をすべきかを決定する必要があります。 – jfriend00

+0

あなたの本当の問題はデザインにあります。 whileループを削除してtakeTurn関数を表示してください – Ibu

答えて

0

このループはJSに必要な呼吸スペースを与えません。 takeTurn()関数の内部で起こるものは何でも

、あなたがpromise

あなたが「takeTurnを(実行)と私の指示を待つ」JavaScriptで

var activePlayer, i = 0; 

takeTurn().then(promiseDone()); //Way to say "check conditions and launch again" 

//This function checks the condition and call takeTurn() if game is still on 
function promiseDone(){ 

    if (!activePlayer.wincondition1 || !activePlayer.wincondition2 || !activePlayer.wincondition3 || !activePlayer.wincondition4) { 

     i === 3 ? i = 0 : i++ // see "ternary operators" if you don't get this 

     activePlayer = allPlayers[i] 
     takeTurn().then(promiseDone()); 

    } 
    else 
     alert('Game over'); 

} 
+0

何かが見当たりません - 私がプログラムを実行すると、最初のプレイヤーがターンをしてから "Error:Undefinedのプロパティを '読み込めません。それがどうしていいのか? –

+0

Promiseメカニズムをプログラムに組み込む必要があります。あなたが提供したリンクを勉強して、あなたのゲームにどのように役立つかを見てください。次に、私のソリューションを使用して、どのように動作するかをさらに理解することができます。 –

関連する問題