我试图做一个简单的基于文本的回合制游戏中使用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);
}
问题是,当玩家送他的文字,我需要先检查,轮到他(这是一个相关的问题,因为我不知道如何在所有玩家分享游戏实例/数据,现在来看我“M使用数据库),这可能需要足够的时间来计时跑出来,打电话下一回合,使得移动无效或可能跳到下一个玩家的回合,因为一旦文本被接收时,计时器应停止,把应该提前。
如果我只是检查,如果此举是有效的前清除超时,我不知道如何恢复定时器无效消息的情况下(即玩家发送外轮到他一文,也许通过与客户端代码/控制台摆弄)。
我怎样才能关闭超时当玩家发送消息,而不落入这些问题呢?