簡體   English   中英

如何在socket.io游戲中限制玩家的回合時間?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM