2016-11-19 171 views
0

我在電報機器人中創建了一個遊戲,現在我已經達到了「玩」狀態。最困難的部分是每回合超時算法(對我來說)。遊戲的超時邏輯

這裏的故障:

賽首發..得到4名球員

遊戲的目標是要回答的問題。問題是: 提及動物的名字。

順序回答是:玩家C - >玩家B - >播放器d - >播放器 A.

每個玩家有最大5秒至回答(可以是更小)。

好吧,現在,遊戲將在3 .. 2 .. 1 ..開始!

玩家C的答案:(1秒)

玩家B的答案:(1秒)

播放d答案:鹿(1秒)

播放器答案:(2秒)

當它回到播放呃C,它會是5秒,而我的邏輯是 來檢查oldTurnId(Player C)=== currentTurnId(播放器 C)。在這種情況下,玩家C會收到通知時間到了,他將被送出,但是玩家C將會第二次回答。

I have this columns on my table : previousTurnId, currentTurnId, nextTurnId

但我找不到解決這個問題的方向。

僅供參考,我使用node.js來創建這個遊戲,主要部分是我使用setTimeOut很多這個超時每轉的邏輯。

任何人有更好的主意來解決這個問題?

非常感謝很多傢伙, 所有幫助將不勝感激。

謝謝

回答

1

聽起來像你想要的是一個clearTimeout。基本上,如果玩家在接下來的5秒內回答,你會清除超時時間,否則,你繼續踢正常的遊戲。您可以從setTimeout獲取超時ID作爲返回值。

我做你的代碼的假設,但這主要是它會怎麼走:

var playerTimeout = setTimeout(function() { 
    removePlayer(player); 
    startNextPlayersTurn(); 
}, 5000); 

player.on('answer', function() { 
    clearTimeout(playerTimeout); 
    startNextPlayersTurn(); 
}); 
+0

AHHHH,讓人的想法,我不知道那件事。無論如何,感謝兄弟。稍後再嘗試,並會更新結果。謝謝!! – Webster

+1

你的意思是在超時後傳遞一個參數給'setTimeout'調用的函數嗎?你可以只包住'setTimeout'在功能'函數startPlayerTimeout(播放器){返回的setTimeout(函數(){removePlayer(播放器);},5000); }' – cejast

+0

還好,但如果我把它包起來,我不能使用從外部權clearTimeout功能? – Webster