iOS / iPhone - 如何在与断开连接的玩家匹配的情况下实现计算机播放器(随机演员)?

时间:2013-10-09 11:07:51

标签: iphone ios networking game-center gamekit

首先,我将承认我没有在代码中尝试过这个,所以如果这是在跳枪,我会道歉。我意识到,充分的努力和研究是发布好问题的先决条件。但在阅读了GameKit和Game Center文档以及iOS Developer Cookbooks之后,我似乎无法在GameKit中找到合适的功能,并且想知道如何在API之外冒险解决这个问题。

在最简单的层面上,我想实现一个有时间限制的双人游戏,在一个玩家意外或恶意断开连接后不会关闭(我目前没有区别,也不知道我是否在技术上可以)。基本上,一旦完成比赛,并且双人比赛开始,我希望比赛继续,直到一名球员获胜,或比赛时间(比如说,10分钟)到期。

我想要建议的是当一个玩家断开连接时如何保持比赛。 (目前,两个玩家同时断开并过早地导致比赛立即终止并且没有可见结果,因此没有问题。)如果用户断开连接,如何设置iOS客户端以随机选择一个动作?我是否需要在服务器或两个iOS客户端上运行此程序?最好是在Objective-C中匹配iOS应用程序,还是应该是其他网络语言的服务器端代码,比如PHP?是否有任何API可以很好地处理这种行为?在每一个回合中,就像石头剪刀一样,玩家有​​一分钟的时间限制来选择攻击或防守等动作,如果计时器在没有选择的情况下到期,则计算机程序会随机选择一个玩家的动作。我想以同样的方式对待断开连接的玩家:如果他或她没有连接到比赛以提供动作选择,那么计算机将在一分钟后随机为他或她做,如果他或她是连接的。我这样保持在线比赛的目的是(a。)确保在失败前不久断开的球员将被评估为适当的损失,(b。)真诚地保持在线的球员将被评估他们应得的胜利,并且(c) 。)意外或偶然断开连接的球员仍然可以通过及时返回来挽救他们的比赛。我相信很多在线游戏都是这样做的,但我还没有找到适当的API或过去的iOS示例,或者两个玩家连接他们的iPhone。游戏中心似乎放弃了比赛,或者在回合制游戏中,没有一些可执行的转弯计时器(据我所知);我没有看到一种方法来告诉谁在文档中断开连接,我也没有看到一些明显的方法在发生故障时保持在线状态,但是计时器继续运行。对等中的所有内容似乎都模拟了客户端 - 服务器关系(一个与客户端对等,一个与服务器对等),如果服务器单元断开连接,则匹配必须结束,如果断开的播放器重新连接,则匹配无法恢复。

简而言之,我不会反对代码解决方案,但即使是一些关于支持此行为的框架的指针或建议也会非常感激。谢谢!

2 个答案:

答案 0 :(得分:0)

您是否考虑过turn-based matches超时?如果远程玩家没有响应(超时)控制可以返回到前一个玩家,然后可以在必要时进行中间随机移动。针对类似场景的超时应用是例如在WWDC 2013会议视频中讨论过。

答案 1 :(得分:0)

如果您还实现了用户可以在本地与计算机玩家一起启动游戏的模式,那么将任何超时的GameCenter游戏拿到UI上作为本地游戏重新加载都是很简单的。

我的假设是,一旦您使用AI实现了本地游戏,您就可以在每次玩家行动时在本地保存回合。此外,我假设您将对两种类型的游戏使用相同的数据格式(也许更改一个表示“计算机玩家”而不是“远程玩家”的位置)。

GC播放器超时时,您可以编写游戏代码,将一种类型的播放器换成另一种类型的播放器。在GC中注册为赢/暂停,并允许玩家继续使用本地/ AI玩家。