【问题标题】:Node and/or socket io multi-player whackamole节点和/或套接字 io 多人游戏打鼹鼠
【发布时间】:2017-05-08 21:27:47
【问题描述】:

所以,假设我想创建一个多人 whackamole 游戏。

并且...我发出了在多个客户端浏览器中显示在屏幕上的痣,可能有 20 或 30 个客户端,所有客户端同时显示相同的痣。并且...几个玩家同时点击同一个痣...

我如何确定谁赢了并处理碰撞或???

我真的不想创建一个 whackamole 游戏,但这是我能想到的最简单的方法来解释我目前遇到的问题。

非常感谢任何帮助,在此先感谢。

【问题讨论】:

    标签: javascript node.js html socket.io


    【解决方案1】:

    几个玩家同时点击同一个痣....我如何确定谁赢了?

    通常,您只需让服务器根据哪个请求首先到达服务器来决定谁获胜。

    并处理碰撞?

    不知道你所说的碰撞是什么意思。服务器将不得不决定谁先来,并且客户端上的用户界面将不得不向用户展示这一点,即使用户认为他们得到了它,但因为他们刚刚被击败而在一次近距离接触中迷失了方向当另一个用户的请求到达服务器时。除非您想修改游戏并为在一定时间内到达服务器的两个请求打成“平局”。

    【讨论】:

    • 谢谢,但是,我知道服务器决定谁赢了,但是......如何?
    • @Todd - 第一个到达服务器的请求获胜。来自不同客户端的对同一事件的第二次请求将被忽略。请求将在服务器上按照先到达的顺序进行处理。一个必须先于另一个。
    • 我明白了,但是如何将信息存储在节点应用程序中?例如,第一次点击进入了第 4 号痣,我如何在我的节点应用程序中保留该信息并将其与后来对第 4 号痣的声明相关联?
    • 对于间隔 10 秒的点击来说不是问题,因为我有时间展示客户中声称的痣,因此其他人无法点击。但是在这种情况下,多个人将同时或非常接近同时点击,我只是迷失了如何跟踪这一切。任何示例代码都可以帮助我更好地理解。不找人给我写,只是为了帮我解决这个同时点击的问题。例如,我可以更新数据库记录以显示所声称的痣,但这对于这样的应用程序来说还不够快。
    • 当有人第一个在服务器上声称拥有一颗痣时,您必须向所有其他客户端广播一条消息,以便他们可以显示它是由其他人声称的。如果两个用户几乎同时声明,客户端可能会暂时显示为本地用户声明的,但在短时间内,他们的客户端会收到一条消息,表明它实际上是由其他人首先声明的,它可以更新他们的用户界面。对于现场游戏,除了将其称为平局并奖励两个用户一些积分之外,您无能为力。在传达其他用户的操作时存在一个小的固有延迟。
    猜你喜欢
    • 1970-01-01
    • 2012-05-03
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多