gpt4 book ai didi

iphone - 如何按最近事件对 GKTurnBasedMatch 进行排序?

转载 作者:可可西里 更新时间:2023-11-01 05:45:33 26 4
gpt4 key购买 nike

我正在创建一个带有菜单屏幕的简单文字游戏,其中显示了用户的所有事件匹配项。我想按照从最近到最近最不活跃的顺序对这组比赛进行排序,但是与玩家轮流相关的唯一时间戳属性是 GKTurnBasedParticipant...GKTurnBasedMatch 没有有用的排序属性。

GKTurnBasedMatch 有一组 GKTurnBasedParticipant 对象作为属性,所以我当然可以想出某种解决方案,但我想不出任何不会真正困惑和低效的东西。在这种情况下,是否可以使用像 NSPredicate 这样简单的方法来深入了解每个参与者数组,查看最新的时间戳并一次性对所有匹配项进行排序?

最佳答案

我没有基于 NSPredicate 的解决方案,或者可能没有您希望的任何优雅的解决方案,但我遇到了同样的问题并编写了自己的解决方案,但实际上并非如此不好。

我的解决方案是针对只能有两个参与者的游戏,因此相应地进行修改,但这是我最终使用的代码:

[myGamesArray sortUsingComparator:^NSComparisonResult(CHGame *game1, 
CHGame *game2) {

if (YES == [game1 localPlayersTurn] && NO == [game2 localPlayersTurn]) {
return NSOrderedAscending;
} else if (NO == [game1 localPlayersTurn] && YES == [game2 localPlayersTurn]) {
return NSOrderedDescending;
}

NSDate *lm1 = [game1.match lastMove];
NSDate *lm2 = [game2.match lastMove];
if (lm1 != nil && lm2 != nil) {
return [lm1 compare:lm2];
}

return NSOrderedSame;

}];

CHGame 是我为我的游戏构建的自定义类(它有一个 GKTurnBasedMatch match 属性),实例方法 localPlayersTurn 返回一个 BOOL 指示是否轮到本地参与者。

然后我在 GKTurnBasedMatch 的类别中写了一个 lastMove 方法:

- (NSDate *)lastMove {
GKTurnBasedParticipant *localParticipant, *otherParticipant;
NSDate *lastMove;

for (GKTurnBasedParticipant *participant in self.participants) {
if (YES == [participant.playerID isEqualToString:[GKLocalPlayer localPlayer].playerID]) {
localParticipant = participant;
} else {
otherParticipant = participant;
}
}

if (localParticipant == self.currentParticipant) {
lastMove = otherParticipant.lastTurnDate;
} else {
lastMove = localParticipant.lastTurnDate;
}

return lastMove;
}

同样,这仅适用于总共两个参与者,但对于任意数量的参与者都可以轻松修改。

希望这对您有所帮助,尽管它并不完全符合您的要求。

关于iphone - 如何按最近事件对 GKTurnBasedMatch 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15527854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com