ios - 玩家滑动以删除比赛

标签 ios game-center gkturnbasedmatch

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

问题:

一个。玩家 1 的轮流计时器永远不会过期。因此当时间到期时,比赛的轮到不会切换到玩家 2。

B.该游戏还提供了一种仅查看模式,因此玩家可以在轮到他时查看游戏进度。但是由于没有状态更新表明玩家 1 手动删除了比赛。应用程序无法提供解决方案。此外,您只能在轮到您时结束比赛。

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

遇到这种情况你是怎么处理的?

最佳答案

我终于找到了解决方法。

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

我认为我们可以合理地假设作弊者将再次玩游戏;否则,他们为什么会在乎蒙受损失?因此,我实现了以下措施:

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

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

然后我根据需要调用 participantQuitInTurnWithOutcomeparticipantQuitOutOfTurnWithOutcome,结果为 GKTurnBasedMatchOutcomeLost

这将轮到下一位玩家并记录作弊者的损失。但是,如果作弊者不再玩游戏,它就不会起作用。 (但是,如果他们不参加比赛,他们就不会再破坏任何比赛,所以困惑得到控制)

关于ios - 玩家滑动以删除比赛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34994621/

相关文章:

ios - GKTurnBasedMatch 如何接受新的比赛邀请

ios - 如何识别显示为空括号的空 NSData 对象?

ios - 体系结构 i386 的 undefined symbol : _FlutterMethodNotImplemented

ios - UITableView 在我的自定义单元 UILabel 和重用问题中无法正确显示数据

iOS:我的应用程序应该只在本地应用程序商店发布吗?

ios - UICollectionView 具有不同单元格的自动布局

ios - 游戏中心验证本地玩家

iphone - iOS开发: Adding an "Add Friend" button inside my app

ios - GC Matchmaking邀请人能收到 "declined"消息吗?

ios - GameKit 错误表示玩家未经过身份验证,但 .authenticated 属性 = true