复杂的想法 - 如何为我的RPG游戏玩家创造赛车

时间:2010-04-25 12:24:00

标签: php mysql optimization

所以,我想为我的RPG游戏玩家创造赛车。玩家可以创建种族并选择参与比赛的参与者数量。比赛开始后,其他人可以加入比赛。收集最大参与者后,比赛开始。

我的想法,当最后一个参与者加入时,然后立即选择胜利者(谁的车是最好的,那个人赢了),但我怎么能这样做?如果我选择在最后一个参与者加入后选择获胜者,那么我必须在一个页面中添加许多查询(从表格中选择数据,然后删除比赛,然后选择玩家的汽车统计数据并选择获胜者然后再次使用mysql,发送消息给每个人)。

但是这个想法实际上并不是最优的,而且对于最后一个人来说,这个想法会非常残酷。也许你有任何想法如何我可以避免滞后并使其更优化。 非常感谢你。

3 个答案:

答案 0 :(得分:2)

  

但这个想法实际上并不是最优的   并且它将最后残酷地落后   人

是什么让你这么想? “获得比赛,获得参与者的角色统计数据,获取参与者的汽车统计数据,检查统计数据以选择获胜者”并不是一个繁重的处理负荷。除非您在真正古老的硬件上运行服务器与其他100个应用程序共享它,否则用户的浏览器应该更长时间与您的服务器建立网络连接,而不是确定比赛结果

如果你真的测试了这个设计并且看到最终玩家的延迟超过游戏中其他页面加载的延迟,那么你确实遇到了问题并且需要进行优化 - 但问题几乎可以肯定使用您用于计算获胜者的算法,而不是使用多个查询来生成单个页面。

永远记住The Rules of Optimization Club

答案 1 :(得分:0)

如果你想在最后一个人加入比赛时处理比赛,你可能想要使用异步处理,以便最后一个人不需要等待。

关于使用PHP here和另一个here进行异步处理的问题

基本思想是最后一个参赛者执行的页面快速返回(可能只是一条消息让他们知道比赛正在进行中),但处理在服务器上继续。

答案 2 :(得分:0)

复杂的反应 - 我怎么想象这个游戏有效。

  1. 用户点击“创建比赛”按钮,然后将它们带到游戏大厅。
  2. 其他用户会看到当前可用的比赛列表,点击“加入比赛”
  3. 每个用户(创建者除外)都应点击“准备好”复选框。这可以使用ajax完成。您还可以使用此后台请求来计算该用户的统计信息并更新数据库。
  4. 每个用户每秒或每次都会有一个ajax请求,以查看其他人是否准备好,游戏是否已经开始等等。
  5. 游戏创建者看到每个人都准备好并点击“种族!” (所有ajax,你可以让一辆小型赛车缓慢移动屏幕以显示它的全部处理)激活所有复杂计算的过程请求应该在这里完成,同时用户被迷住了通过那辆小型赛车(或简称为“赛车......”的文字)。更新数据库,也许是一个包含结果的表。
  6. 此时比赛结束,创建者从服务器获取ajax回复。 “浏览器每隔一秒左右检查一次服务器的其他每个用户现在都会收到服务器的回复结果。
  7. 我希望这一切都有道理。如果您还没有使用JavaScript库,我建议您这样做,因为他们使跨浏览器ajax如此简单。