我正在做一个回合制游戏...传递的唯一信息是玩家的分数以及是否已发送回合。
当下一位玩家接到转弯时。数据存储在“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;
}
}
答案 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;
}
请注意,您将在两个设备上看到“赢”。
一个人会说“我”,下面是“赢”,另一个会说“(赢家姓名)”,下面是“赢”。