新手问题 实现一个类似多人游戏的功能, 在 Web 页面, 使用 Rails

waytohigh · 2017年07月29日 · 最后由 waytohigh 回复于 2017年07月31日 · 2077 次阅读

类似常见的多人游戏,需要多个 player, 人满了才能开始游戏,就是说整体游戏是否能往下进行受到个别 player 的制约,不能进行的话游戏中的 player 就被卡在一个 page 不能推进游戏。然后游戏过程中在不同的 steps, 也就是不同的 web pages, 需要个别 player 做完一些动作(如 post data), 所有 players 才能前进,才能去下一个 web page. 游戏因此而向前推进。游戏本身是静态 web page 的不断跳转而已,如果是单人游戏就很简单。

这个应该算 asynchronous, 应该是要监听某个 port 某个服务器端的变量是不是发送过来,然后改变本机 browser 的 web page 上的页面内容(改变的方式之一可能是发送 request 到 server,将 response 插入当前页面). 具体我也不知道什么术语怎么描述,因为没做过。

想请教各位,有没有最最简单的此类 app, 把类似这个的功能做出来,以最最简单的形式,GitHub 上有代码可以看的。又或者有这方面经验的,请教在 Rails 的基础上,用哪个工具配合做合适些?

谢谢

萌新还是从最简单的增删改查开始吧

不答题请别回贴,谢谢。 答题,我的问题不够精确有可以改进的,回帖则不胜感谢。总之围绕问题。社区规则没有答题的智慧,可惜。

你在描述的是 Real-time web 在 HTML 5 普及的今天,解决这个领域的关键技术是 WebSocket,在 Rails 上有封装过的前后端解决方案 Action Cable

至于你的需求,想想微信网页版的扫码登录是怎么做的。

jasl 回复

谢谢。我一年前用 scala 写过一小片代码,实现 tweet 输入框剩余字数显示。背后概念近似。不过,这种根据他人的 web 动作,而不是自己的,决定自己 web page 显示内容的,第一眼,感觉测试可以写?直接在 feature spec 模拟 2 个用户可以行?这个问题只是我的第一反应,感觉上应该能 google 到答案,不一定要答。

waytohigh 回复

HTTP 是无状态的,只要不是在同一个页面,“你”就不是“你”,所以我提到“扫码登录”,你先搞明白这里前后端是怎么互动的,写出来原型去肉测,写测试无非是肉测自动化而已

不答题也来回贴。

利用 websocket,对每个连入的用户建立 websocket,然后依据游戏共用多少个页面建立多少个 room。把 websocket 移入 room 里,判断 room 中 websocket 数是否满足设定的要求才放行。

你这个功能似乎不用操作数据库,建议使用 sinatra 这种微框架。
个人推荐使用 Crystal 语言的 kemal 框架,它对 websocket 这种方式有很好的支持,而且学起来非常简单,两个小时就够了。
我用 kemal 实现了一个多人聊天室,欢迎参考 github:shootingfly/shop 里面的 chat 子模块

ThxFly 回复

谢谢。有其他方面的需求的,现在的意图是尽量简化其他方面的需求,先争取把这个多人同步的需求所需要的技术熟悉一下,做几个 side project 练手。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号