[英]How to limit time of a player's turn in a socket.io game?
我正在嘗試使用socket.io模塊在node.js中創建一個基於文本回合的簡單游戲。 玩家必須有超時才能在回合中發送文本。 如果他沒有這樣做,他將失去機會,現在輪到下一位玩家了。
超時是我真正的問題。 我做了一些簡單的setTimeout
來推進轉彎,如下所示:
var playerIndex = 0;
var timer = setTimeout(advancePlayer, turnTime);
function advancePlayer() {
playerIndex = (playerIndex + 1) % numPlayers;
// Warns the players about whose turn is now:
aknowledgeTurn(playerIndex);
timer = setTimeout(advancePlayer, turnTime);
}
問題在於,當玩家發送文本時,我需要首先檢查是否輪到他了(這是一個相關問題,因為我不確定如何在所有玩家之間共享游戲實例/數據,現在我'正在使用數據庫),這可能會花費足夠的時間使計時器用完並呼叫下一個回合,從而使移動無效或可能跳過下一個玩家的回合,因為一旦收到文本,計時器就應該停止並且轉彎應該前進。
如果我只是在檢查移動是否有效之前清除了超時,我將不知道如何在出現無效消息的情況下恢復計時器(例如,玩家在回合以外發送了文本,可能是擺弄了客戶代碼/控制台)。
播放器發送消息時如何關閉超時而不會陷入這些問題?
收到移動后,可以使用clearTimeout(timer)
取消當前計時器。
然后,在處理advancePlayer()
該玩家的移動之后,只需從移動處理程序代碼中調用advancePlayer()
。 這將前進到下一個播放器並設置一個新計時器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.