3

假设我有两个玩家的回合制比赛。在某一时刻,玩家 1 意识到他即将输掉比赛。轮到玩家 1 时,他使用 Game Center App 进行滑动以移除比赛。

问题:

A. 玩家 1 的回合计时器永远不会过期。因此,当时间到期时,比赛的回合不会切换到玩家 2。

B. 游戏还提供了仅查看模式,因此玩家可以在他不按顺序查看游戏进度。但是由于没有更新状态以表明玩家 1 已手动删除了匹配项。应用程序不能提供任何解决方案。此外,您只能在轮到您的时候结束比赛。

理想情况下,我想宣布玩家 2 为赢家并结束比赛。

在这种情况下你如何处理?

4

1 回答 1

1

我终于找到了解决方法。

如果您删除匹配项,然后调用GKTurnBasedMatch:loadMatchesWithCompletionHandler,则删除的匹配项不会出现(如预期的那样)。但是,事实证明,如果您碰巧还有已删除匹配的 ID,您仍然可以使用 重新下载已删除的匹配。GKTurnBasedMatch:LoadMatchWithID

我认为我们可以合理地假设 The Cheater 将再次玩这款游戏。否则,他们为什么会在意蒙受损失?因此,我实现了以下内容:

  1. 在设备上本地维护一个匹配表。
  2. 在启动时,从 Game Center 中提取本地玩家的比赛列表并与我的本地列表进行比较。

当 The Cheater 识别情况并使用 Game Center 界面删除比赛时,比赛将从 Game Center 中删除,但不会从我的本地数据库中删除。当 The Cheater 再次开始我的游戏时,我发现他们在本地的比赛比在 Game Center 上的比赛多。

然后,我酌情调用participantQuitInTurnWithOutcomeparticipantQuitOutOfTurnWithOutcome,结果为GKTurnBasedMatchOutcomeLost

这将转牌传递给下一位玩家并记录骗子的损失。但是,如果作弊者不再玩游戏,它就行不通了。(但是,如果他们不参加比赛,他们就不会再破坏比赛,所以混乱是可控的)

于 2016-03-27T20:07:03.513 回答