多人实时安卓游戏的最佳解决方案


11

我打算为Android(2-8个玩家)制作多人实时游戏,并且我认为哪种组织最佳的解决方案是最好的:

  1. 使服务器在PC上,客户端在移动设备上,所有通讯都通过服务器(ClientA-> PC SERVER->所有客户端)

  2. 使用蓝牙,我还没用过,我也不知道在蓝牙上制作多人游戏很难

  3. 使服务器位于其中一台设备上,并与其他设备连接(通过网络,但是我不知道通过NAT解决设备的问题是否很困难?)

  4. 其他解决方案?


3
您是否打算将其设计成仅限本地使用的游戏,还是希望人们能够与互联网上的人们一起玩?您是否托管游戏机?
四分

我选择了小型多人游戏,打算在人们在房间里见面的情况下制作游戏,并且可以玩同一游戏(这是我的主题:移动平台上的多人游戏)。但是,如果有人对在互联网上玩游戏有有趣的解决方案,我也很感兴趣。
piotrek 2011年

Answers:


2

免责声明;我没有做太多的Java和Android平台。

但是,我在Windows Mobile平台以及Windows平台上使用'.net'语言的更广泛的经验是,创建和维护蓝牙或网络数据连接所需的所有代码中有75-90%都得到维护/支持操作系统或访问硬件所需的库。

到目前为止,对于Android来说似乎也是如此,操作系统公开了通过蓝牙或互联网创建数据连接的方法,以及启用/禁用相应硬件的功能。

我可以想象蓝牙将是首选的连接方法,因为这将是实施成本最低的方法(无服务器)。并允许进行更多本地聚会/游戏。蓝牙相当容易使用。一旦知道要连接到哪个设备,它的功能便与普通网络插座类似。

其他是正确的,因为蓝牙v2.0 / v2.1当前不支持大数据负载。随着v3.0和更高版本的最终普及,这种情况将会改变。并且有一些方法可以解决此限制。

目前,尽管您有一个简单的概念但很复杂的解决方案,您不妨尝试一下。我已经使用了一段时间,它与点对点类似,但是它涉及同时在所有设备上托管游戏。这样,如果连接暂时丢失,变慢或某个播放器由于任何原因而掉线,其他播放器将不会受到影响。这允许被丢弃的用户重新加入进行中的游戏,而对其他玩家或他们自己的游戏几乎没有破坏。

缺点:每个玩家实际上都在玩自己独特的游戏实例,该实例将与其他玩家联系在一起,以防止游戏错综复杂。

缺点:支持代码可能是广泛的/复杂的,并且很难根据您要实现的目标来决定。

PRO:不需要中央服务器或设备!无需$$维持。

PRO:仅当玩家(重新)加入或初始化游戏时,才会进行大量数据交换。-甚至可以通过确保将要生成所有游戏并以所有玩家相同的方式进行游戏来减少这种情况。潜在地减少由于大量网络使用而产生的能耗。

优点:数据变得对时间的敏感度降低了,因为设备在没有其他玩家的情况下已经拥有了保持游戏进行所需的所有数据。让更专注于单个用户而不是一组玩家的实际游戏体验。

我没有时间来实现利用此功能的完整的深度游戏引擎。我制作的游戏仅限于重新制作类似于Monopoly和Uno的游戏,它们的功能似乎非常出色。

最简单的是模仿Uno的那个。基本上,在赢家之后,我会堆叠输家的牌组,以确保该名玩家赢得所有比赛。95%以上的时间我不能说自己没有和其他人玩完全相同的游戏。

我开始开发类似于《猎户座大师II》的游戏,但游戏本身对我来说有点负担。


9

这在很大程度上取决于游戏,但是几个月前,我和一些朋友才考虑相同的问题,这就是我们确定的。我又一次处于利弊状态。

基于计算机的服务器

优点

  • 尝试和真实
  • 可缩放

缺点

  • 需要编写一个可以同时托管多个游戏的“多服务器”。这可能会使用与Android手机略有不同的技术。您仍然可以使用Java,但仍然可以使用android软件包吗?
  • 运行和维护成本可能很高
  • 由于种种原因,您有可能在一天之内将其撤下。如果服务器在购买游戏后仅几个月就出现故障,那么球迷可能会不满意。

点对点,其中之一处于控制状态

优点

  • 临时服务器,朋友可以在需要时加入其他朋友
  • 几乎没有运行成本
  • 服务器代码将与客户端代码混合在一起,无需编写单独的服务器应用程序。

缺点

  • 需要编写一个简单的集中式对等查找器。(我在几百行简单的php + mysql中完成了我的工作)
  • 服务器在电话上运行。电话可能很慢。所有目标手机都能托管游戏吗?
  • 如果服务器电话断开连接会怎样?
  • 比客户端服务器更容易被黑客入侵

至于蓝牙,我希望它类似于上面的点对点方法。我也不认为NAT应该没有任何问题。

编辑:这也很大程度上取决于您的经验。我将从编写一些相对较小的客户端/服务器游戏开始,以首先掌握网络。这是一个艰难的话题,很容易在第一次就犯错。我第三次尝试就对了。遵循已知的模式,不要尝试自己动手做一些事情。


我不认为这可以通过蓝牙来完成,我怀疑它是否支持广播:AFAIK它仅将一个主机连接到另一个主机,最大连接数量非常低,而且速度很慢。
o0'。

4

您需要考虑的最大因素之一就是可靠性。电话不是很可靠。实际上,您可能应该假设在8人游戏中有人可能会断开连接(来电,不良接待,玩家退出...)

考虑到这一点,请理解您应该最大程度地减少断开用户的影响。在第二种选择中,您实质上是将电话作为服务器。如果该手机转到MIA,则所有玩家的游戏实际上结束了。

John介绍了传统客户端<->服务器体系结构的优缺点。这可能是为所有人提供可靠的多人游戏体验的最灵活的方法。

您还可以按照锁定步骤模拟的方式考虑一种技术。这可以以纯粹的对等方式实现。总体思路是,每个客户端都应在每个模拟步骤中发送更新(命令系列,或缺少命令)。在随后的模拟步骤中,将每个玩家的命令应用于游戏逻辑。许多RTS游戏都采用这种网络方案。

该技术可能难以实现,并且可能非常难以调试。当然,这比拥有更传统的客户端-服务器体系结构更加困难。这也暗示了玩家输入与游戏响应输入之间的时滞。但是,如果一名球员退出比赛,其余的球员可能会将他从比赛中排除并继续比赛。与其他方案相比,它还可能减少网络流量。

如果您想了解更多关于这项技术,开始与关于这个问题的好文章。否则,我强烈建议不要使用由单个电话负责多人游戏会话的网络方案,并建议使用更简单的客户端<->服务器体系结构。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.