游戏中心结果发布

时间:2012-05-09 18:15:07

标签: ios game-center

我正在做一个回合制游戏...传递的唯一信息是玩家的分数以及是否已发送回合。

当下一位玩家接到转弯时。数据存储在“scoreToBeat”和turnSent = 1中。然后玩家轮到他们。之后游戏结束被调用因为turnSent = 1。我在http://www.raywenderlich.com/5480/beginning-turn-based-gaming-with-ios-5-part-1使用了Ray Wenderlich的回合制教程。

在他的情况下,比赛结束并且是平局。像这样......我似乎无法通过它来展示失去的人。

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

我似乎无法表明失去它的人总是表现出胜利。这是我许多人的最新尝试......在比赛中确实有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 个答案:

答案 0 :(得分:2)

积分是设备上得分的本地分数吗?如果是这样,我会做以下事情:

  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];
           }

       } ];
}

答案 1 :(得分:2)

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

如果您有超过2名玩家,那么您必须遍历所有参与者并相应地设置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;
    }

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

一个人会说“我”,下面是“赢”,另一个会说“(赢家姓名)”,下面是“赢”。