【问题标题】:Two player chess game using Firebase使用 Firebase 的二人国际象棋游戏
【发布时间】:2017-01-24 19:21:02
【问题描述】:

编辑:答案是使用 firebase 实时数据库。

我为下一个人写了一个库。

https://github.com/flipflopapp/turnbased-games-with-firebase

-- 问题--

我正在实施两人国际象棋游戏 (www.halfchess.com),并且正在考虑使用 firebase 消息传递(而不是使用套接字来创建房间和两人比赛)。该游戏将涉及在两到三分钟内在两台设备(可以是安卓或 iOS)之间发送 60-100 步棋作为消息。我的 nodejs 服务器将具有启用设备到设备消息传递的代码(从一个播放器接收并发送到另一个播放器)。

我无法使用 Google 游戏服务,因为我的应用中没有实现 google 登录(我只打算保留 facebook 登录)。使用 firebase(与套接字相比)的优点是我将需要编写更少的代码(重新连接等),并且可以解决可伸缩性问题。

我的问题是:-

(1) 当用户在两台iOS设备(而不是安卓设备)上互相对战时,会不会出现问题? (例如更高的延迟)

(2) 如果用户在物理上改变位置并且包含棋步的消息未传递,何时重试?

(3) 对于快速的国际象棋游戏,延迟是否可控?这相当于正常聊天速度的 8-10 倍。

虽然我阅读了有关该主题的更多内容,但也许已经尝试过的人可以发表评论。

【问题讨论】:

    标签: firebase-realtime-database real-time firebase-cloud-messaging multiplayer


    【解决方案1】:

    Firebase 云消息传递并非用于某种用途,而且除了不保证交付时间(来自2013 - 2014 的一些研究显示每条消息平均超过 1 秒),FCM 可能暗示@ 987654323@ 在这样的用例中。

    另请参阅SO post

    【讨论】:

    • 谢谢。我意识到我应该查看 Firebase 实时数据库(如果我想使用 firebase)。 - 链接:stackoverflow.com/questions/36119776/…
    • 我也确信 GCM 消息传递比以前更好。我认为他们从去年开始使用 firebase 进行 GCM 消息传递。这应该会改善博客约会(比如 2014 年)和之前提到的旧问题
    • 我毫不怀疑 FCM/GCM 比 2014 年更好。然而,它不是为此目的而设计的,可能会干扰游戏玩法。我认为 websockets 可能是你最好的选择,使用 OkHttp 之类的库,集成应该不会比 FCM 难,而且你会知道连接何时断开,你可以在 UI 上反映这一点。
    【解决方案2】:

    我确信上面的答案会起作用,但是我很难让它们发挥作用。这就是最终对我和我的 firebase 聊天应用有用的方法!

    希望这能帮助一些人。

    我能够在我的 firebase 聊天应用程序中添加一个国际象棋游戏,而且我只使用了一个 iframe!但是,第一次并没有奏效,因为我所做的只是将 iframe 编码添加到我的应用程序中。

    这就是我让 iframe 在 Firebase 应用程序中工作的方式...

    首先,将目录 (cd) 更改为您的聊天应用程序的“公共”文件夹(您通常会在其中运行“firebase deploy”命令),然后将您的 iframe 添加到位于该处的“index.html”文档中。将此地址用作 iframe 的源 URL (src)...

    src="chess/index.html"

    • 如果不包含“index.html”页面名称,它将无法正常工作!

    接下来,我在同一个公共目录中创建了一个名为“chess”的新文件夹,并在其中添加了国际象棋游戏的“index.html”文档和依赖项(js、css、图像...等)。

    最后,但不是租用,在同一个“公共”文件夹中打开一个终端并运行“firebase deploy”以将整个内容上传到您的 firebase 帐户和控制台。

    完成!

    我很确定将您的国际象棋应用文档包含在您的 firebase 应用中是 iframe 最终工作的原因。我还用几个“div”标签包裹了 iframe,但我不确定这是否有什么不同。

    • 请随时来看看,但您必须使用 Google 登录才能进入!

    • 之后,只需右键单击页面上的任意位置并选择“查看源代码”即可查看代码。干杯!

    https://friendly-chat-b2d6a.firebaseapp.com/

    【讨论】:

      【解决方案3】:

      与其让其他玩家向客户端发送消息,为什么不让客户端根据游戏中发生的情况显示消息?对您来说,这似乎是一个更简单的解决方案,因为唯一需要发送的是实际移动,如果需要,您可以搭载它。

      【讨论】:

      • 消息(firebase 术语)和移动(国际象棋术语)是相同的。我还尝试在聊天应用和国际象棋应用之间进行类比,因为 Firebase 主要与前者进行了尝试,并且有一些相似之处。
      • 你已经准备好主游戏了吗?如果是这样,您已经通过移动棋子发送了一条消息,您可以在客户端获取它并显示一条消息。
      • 我不明白 Vivan。这是一个关于 Firebase v/s Socket.io v/s 其他基于回合的实时游戏解决方案的问题。谢谢。
      • 我明白,我是说你似乎在为自己做额外的工作。如果游戏的玩法已经创建,那么为什么不让消息完全是客户端的呢?你不需要其他玩家发送移动消息,只要有这样的东西(当然是伪代码)if (pieceMoves) { get where the piece moved to, print it }
      【解决方案4】:
      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 2015-07-16
      相关资源
      最近更新 更多