如何限制玩家的回合时间在socket.io游戏?(How to limit time of a pl

2019-10-19 20:41发布

我试图做一个简单的基于文本的回合制游戏中使用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使用数据库),这可能需要足够的时间来计时跑出来,打电话下一回合,使得移动无效或可能跳到下一个玩家的回合,因为一旦文本被接收时,计时器应停止,把应该提前。

如果我只是检查,如果此举是有效的前清除超时,我不知道如何恢复定时器无效消息的情况下(即玩家发送外轮到他一文,也许通过与客户端代码/控制台摆弄)。

我怎样才能关闭超时当玩家发送消息,而不落入这些问题呢?

Answer 1:

当您收到一招,你可以取消与当前定时器clearTimeout(timer)

你已经处理了该玩家的举动在此之后,只需调用advancePlayer()从您的移动处理程序代码。 这将前进到下一个播放器,并设置一个新的计时器。



文章来源: How to limit time of a player's turn in a socket.io game?