使用PHP / MySQL创建回合制系统的可能方法

时间:2012-01-27 18:36:43

标签: php mysql

是的,我正在尝试创建一个系统,用户可以在其中执行某些操作,但必须等到mysql表中的所有其他用户都已移动,即

User1移动,user2和3必须等待 user2进行移动,用户1和3必须等待 user3进行移动,用户1和2必须等待 user1移动...

我想到的一种方法是给每个用户一个号码(从1到玩家总数,比如6),然后当玩家进行移动时,将他们的号码设置为最大数量(6)并且将其他人的号码减少一个,因此具有最小号码的人是唯一可以玩的人。

这是我唯一的想法,是否有更简单或替代方式?

6 个答案:

答案 0 :(得分:1)

我的建议是将最后一次移动日期存储为日期时间。当您需要检查用户是否可以移动时,只需从表中选择最后移动日期小于或等于当前玩家最后移动日期的所有其他玩家。如果行数不为0,则播放器无法移动。

这种方法的好处是简单 - 每次允许玩家进行移动时,只需使用当前日期和时间更新列。

答案 1 :(得分:1)

您提出的解决方案似乎有些迂回:

  • 当您需要维护的最少信息移动时,您正在更新+每次移动每个玩家的数据。
  • 在编码下一轮信息时,您丢失了有关玩家订单的信息。

高级解决方案:

  1. 使用games
  2. 等列创建一个INT currentTurn表,每行一行
  3. 在每个游戏的基础上创建一个gameUsers表,与games
  4. 中的游戏相关联
  5. 分配gameUsers中的每个 n 用户INT playerOrder范围 [1-n] < / LI>
  6. 仅接受playerN playerN == "SELECT playerID FROM gameUsers WHERE playerOrder = currentTurn"
  7. 后的移动
  8. 成功移动后:"UPDATE games SET currentTurn = currentTurn + 1 WHERE game = thisGame"
  9. 我相信上面的表结构是一个很好的面向对象的实际游戏模型表示。您可以将其他每个游戏内容隐藏到games中,例如获胜者,长度,日期等。请原谅pseudoSQL。

答案 2 :(得分:0)

您可以拥有一个包含hasMoved tinyint(1) required default 0列的表格,并查询where hasMoved == 0;如果查询返回null,则所有玩家都已移动。

(注意:这是基于“必须等待所有其他用户”,而不是严格的移动顺序 - 即'A'必须在“B”必须在'C'之前移动之前移动等)。

此外,使用此方法的查询有点慢,(对我而言)似乎有点不必要的资源密集型 - 或许考虑使用Ajax?

答案 3 :(得分:0)

拥有从零开始的游戏序列号。为每位玩家提供“最后移动”号码。当玩家移动时,将他们的“最后移动”数字设置为等于游戏序列号。每个玩家移动后,递增游戏序列号。

你可能想要使用超时,否则不移动的玩家可以无限期地延迟其他玩家。

答案 4 :(得分:0)

我首先通过计算速度确定$ sequence。然后比较速度以确定顺序。然后使用该订单发送通知以进行移动。使用时间戳来确保用户不会接管一天或多长时间,您将需要一个cron作业。

让变量或数组保持前n个序列,这样你就可以轻松地将最后移动的玩家移动到后面,而不会混合uP命令。

让页面检查玩家的顺序并且不允许操作,除非它在1或0处。确保清理输入,因此不存在操作。然后插入表单和图形以及游戏方程式。

答案 5 :(得分:0)

您可以保存每个用户上次移动的日期时间。因此,当您使用此日期时间列对此表进行DESC排序时,您将只需获取结果的第一行,该行将包含允许移动播放器的ID。