游戏中心结果发布

我正在做一个基于回合的游戏……传输的唯一信息是玩家的分数以及是否已经发送了一个回合。

当下一个玩家收到回合。 数据存储到“scoreToBeat”并turnSent = 1。 玩家然后轮到他们。 之后游戏结束被称为turnSent = 1。 我使用了Ray Wenderlich在http://www.raywenderlich.com/5480/beginning-turn-based-gaming-with-ios-5-part-1上的基于回合的教程。

在他的情况下,比赛结束,是一个领带。 像这样…我似乎无法让它显示失去的人。

for (GKTurnBasedParticipant *part in currentMatch.participants) { part.matchOutcome = GKTurnBasedMatchOutcomeTied; } 

我似乎无法得到它显示失去它的人总是performance出胜利。 这是我许多的最新尝试…在比赛顺便说一句,有2名球员…任何想法将不胜感激。

  for (GKTurnBasedParticipant *part in currentMatch.participants) { if(part==currentMatch.currentParticipant) { if(points>scoreToBeat) { part.matchOutcome=GKTurnBasedMatchOutcomeWon; } else { part.matchOutcome=GKTurnBasedMatchOutcomeLost; } } else { if(points>scoreToBeat) { part.matchOutcome=GKTurnBasedMatchOutcomeLost; } else { part.matchOutcome=GKTurnBasedMatchOutcomeWon; } } 

这是我最近的一个项目的摘录,适合2人游戏。 这是在sendTurn过程中,当游戏决定结束的时候调用的。 这比前面的答案(第一个代码块)更正确,在我看来,因为你必须在结束游戏之前为所有参与者设置matchOutcome。

如果你有两个以上的球员,那么你必须循环所有的参与者,并相应地设置matchOutcome。

  GKTurnBasedParticipant *curr = currentMatch.currentParticipant; NSUInteger currentIndex = [currentMatch.participants indexOfObject:currentMatch.currentParticipant]; NSUInteger nextIndex = (currentIndex + 1) % [currentMatch.participants count]; GKTurnBasedParticipant *next = [currentMatch.participants objectAtIndex:nextIndex]; if (currScore < otherScore) { // Curr player lost curr.matchOutcome = GKTurnBasedMatchOutcomeLost; next.matchOutcome = GKTurnBasedMatchOutcomeWon; } else if (currScore == otherScore) { // Tied curr.matchOutcome = GKTurnBasedMatchOutcomeTied; next.matchOutcome = GKTurnBasedMatchOutcomeTied; } else { // Won curr.matchOutcome = GKTurnBasedMatchOutcomeWon; next.matchOutcome = GKTurnBasedMatchOutcomeLost; } 

请注意,您将在devise上看到两个设备上的“赢”。

一个会在下面说“我”,“Won”在下面,另一个会说“(Winners Name)”和“Won”。

积分是设备上得分的当地积分吗? 如果是的话,我会做以下几点:

  if([part.playerID isEqualToString [GKLocalPlayer localPlayer].playerID]]) { if(points>scoreToBeat) { part.matchOutcome = GKTurnBasedMatchOutComeWon; } else { part.matchOutcome = GKTurnBasedMatchOutComeLost; } } else { if(points>scoreToBeat) { part.matchOutcome=GKTurnBasedMatchOutcomeLost; } else { part.matchOutcome=GKTurnBasedMatchOutcomeWon; } } } 

另外,请记住使用NSLog来查看是否实际传输了分数。 继续使用currentTurnBasedMatch.matchData可能会导致一个错误,您应该将currentTurnBasedMatch设置为在委托方法中返回的GKTurnBasedMatch。

编辑:我使用的代码剪切看起来像这样

 if([participant.playerID isEqualToString:[GKLocalPlayer localPlayer].playerID]){ NSLog(@"we are the last player in the game -end the game"); for (GKTurnBasedParticipant *part in match.participants) { part.matchOutcome = GKTurnBasedMatchOutcomeTied; } [match endMatchInTurnWithMatchData:match.matchData completionHandler:^(NSError *error) { if ([AppDelegate mainMenuController].multiGameMenu.turnBasedMenu !=nil) { [[AppDelegate mainMenuController].multiGameMenu.turnBasedMenu reloadTableView]; } } ]; }