2016-07-23 125 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

在Javascript中,你應該幾乎從不做這樣的循環,因爲這樣做意味着JS引擎沒有機會處理事件隊列。你將不得不向我們展示'takeTurn()'中實際發生了什麼,讓我們知道該建議什麼,但是可能你應該從各種事件處理程序中決定下一步做什麼 - 而不是循環。 – jfriend00

+0

你的真正問題在於設計。刪除while循環,並向我們展示takeTurn函數 – Ibu

回答

0

這個循環不會給JS它所需要的呼吸空間。

無論takeTurn()函數內部發生,你應該返回promise

這樣,你告訴瀏覽器「執行takeTurn(),等待我的指示」

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

某些東西似乎缺失 - 當我運行該程序時,第一個玩家輪到他們然後拋出「錯誤:無法讀取屬性',然後'未定義。」任何想法爲什麼會這樣? –

+0

您需要將Promise機制合併到您的程序中。請研究已提供的鏈接,看看它如何幫助您的遊戲。然後,您可以使用我的解決方案進一步瞭解事情應該如何工作, –