2012-01-27 34 views
2

對,我試圖創建一個系統,用戶可以在其中執行某些操作,但必須等到mysql表中的所有其他用戶都已移動,即使用PHP/MySQL創建基於回合的系統的可能方法

用戶1使得移動,用戶2和3必須等待 user2的舉動,使用戶1和3必須等待 用戶3使移動,用戶1和2必須等待 USER1使得移動...

的一種方式我想是給每個用戶一個號碼(從1到玩家總數,例如6),然後當玩家移動時,將他們的號碼設置爲最大號碼(6)並減少其他人一個號碼,所以最少號碼的人是唯一可以玩的人。

這是我唯一的想法,有沒有更容易或替代方法?

+0

我認爲programmers.stackexchange.com是這個問題的一個更好的地方。 – 2012-01-27 18:44:30

+0

同意Toby; [meta](http://bit.ly/zrmGDQ): 「堆棧溢出問題幾乎所有的問題或答案都有實際的源代碼,對於包含程序員問題的程序員來說,更爲罕見(儘管當然可以)源代碼。」 – mzhang 2012-01-27 18:48:39

回答

1

我的建議只是將最後一個移動日期存儲爲日期時間。當您需要檢查用戶是否可以移動時,只需從表格中選擇最後移動日期小於或等於當前玩家的最後移動日期的所有其他玩家。如果行數不爲0,則玩家不能移動。

這種方法的好處是簡單 - 每次你允許玩家進行移動時,只需用當前日期和時間更新列。

0

你可以有一個列表hasMoved tinyint(1) required default 0,查詢where hasMoved == 0;如果查詢返回null,則所有玩家都已移動。

(注:這是基於「必須等待所有其他用戶」,而不是嚴格的招秩序 - 即「A」必須「B」必須在「C」移動等移動前)

此外,使用這種方法的查詢有點慢,對我來說似乎有些不必要的資源密集型 - 也許考慮使用Ajax呢?

0

有一個從零開始的遊戲序列號。爲每個玩家設置一個「上次移動」號碼。當玩家移動時,將他們的「上次移動」數字設置爲等於遊戲序列號。一旦每個玩家都移動了,增加遊戲序列號。

雖然您可能想要使用超時,否則不移動的玩家可以無限期延遲其他玩家。

0

我會首先通過計算速度來確定$序列。然後比較速度以確定訂單。然後使用該訂單發送移動通知。使用時間戳來確保用戶不會接管一天或不久,您只需要一個cron作業即可。

有一個變量或數組保存前n個最後序列,因此您可以輕鬆地將上次移動的播放器移到後面,而無需混合uP命令。

讓頁面檢查玩家順序的順序,並且不允許採取行動,除非它處於1或0.請確保對輸入進行消毒,以避免操縱。然後插入你的表格和圖形和遊戲方程。

0

您可以保存每個用戶最後一次移動的日期時間。因此,當您通過此日期時間列對DESC進行排序時,您只需要提取結果的第一行,其中將包含允許移動播放器的ID。

1

你提出的解決方案似乎有點迂迴:

  • 你更新+閱讀每一個球員的一舉一動,當你需要保持最小信息,其舉動是
  • 當您編碼下一回合信息時,您正在丟失關於玩家順序的信息。

的高級別溶液:

  1. 創建games表,每場一行,像INT currentTurn
  2. 一列上的每個遊戲進行創建gameUsers表,鏈接到它的遊戲games
  3. 分配給每個n用戶gameUsersINT playerOrder測距[1-N]
  4. 僅接收來自playerN如果playerN == "SELECT playerID FROM gameUsers WHERE playerOrder = currentTurn"
  5. 移動後成功一步:"UPDATE games SET currentTurn = currentTurn + 1 WHERE game = thisGame"

相信上述表結構是定向的表示良好的對象實際的遊戲模式。您可以將其他每場比賽的東西存入games,如獲勝者,長度,日期等。請原諒pseudoSQL。

相關問題