核心数据模型,游戏有赢家和输家,玩家有多个游戏?

时间:2014-04-27 01:32:32

标签: ios core-data xcdatamodel

我正在尝试设置我的核心数据模型。我希望有一个有一个输家和一个赢家的游戏。我需要一个拥有多个游戏的玩家。

我有以下内容:

实体: 播放器

属性: 胜 损失, 名称

关系: 游戏目的地:游戏逆转:???赢家还是输家???

实体: 游戏

属性: losingScore, winningScore,

关系: 失败者目的地:玩家反向:游戏, 获胜者目的地:玩家反向:游戏

我该如何设置?

谢谢!

2 个答案:

答案 0 :(得分:1)

为什么不呢:

  • player.gamesWon< - > game.winner(game:to-one)
  • player.gamesLost< - > game.loser(游戏:to-one)
  • player.games< - > game.players(game:to-many)

你可以偶然获得gamesWon.count和gamesLost.count的胜利/亏损而不是属性。

答案 1 :(得分:1)

考虑一下......

游戏中有玩家。游戏中的每个玩家都获得了分数。无论他们输赢,都取决于他们的分数与其他球员的比分相比。

我的建议......


  • 实体:Player
  • 属性:NSString *name
  • 关系:playerGames一对多Game

  • 实体:Game
  • 属性:NSString *reference(例如Game" 1")
  • 属性:NSNumber *scorePlayer1
  • 属性:NSNumber *scorePlayer2
  • (属性:NSDate *timeStamp)选项?
  • 关系:gamePlayer1多对一Player
  • 关系:gamePlayer2多对一Player(玩家2不能与玩家1相等)

那么我们可以......

Game *game = [[Game alloc] init...];

if (game.scorePlayer1 > game.scorePlayer2) {
    NSLog("%@ is winner and %@ is loser with score %@-%@", game.gamePlayer1.name, gamePlayer2.name, scorePlayer1, scorePlayer2);
} else if (game.scorePlayer2 > game.scorePlayer1) {
    NSLog("%@ is winner and %@ is loser with score %@-%@", game.gamePlayer2.name, gamePlayer1.name, scorePlayer2, scorePlayer1);
} else {
    NSLog("Players %@ and %@ drew with score %@-%@", game.gamePlayer1.name, gamePlayer2.name, scorePlayer1, scorePlayer2);
}

Player *player = [[Player alloc] init...];

NSFetchRequest *requestWins = [[NSFetchRequest alloc] initWithEntity:@"Game"];
NSPredicate *predicateAsPlayer1 = [NSPredicate predicateWithFormat: @"(%@ >= %@) && (game.gamePlayer1.name == %@)", game.scorePlayer1, game.scorePlayer2, player];
NSPredicate *predicateAsPlayer2 = [NSPredicate predicateWithFormat: @"(%@ >= %@) && (game.gamePlayer2.name == %@)", game.scorePlayer2, game.scorePlayer1, player];
NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicateAsPlayer1, predicateAsPlayer2]];
[requestWins setPredicate:predicate];
NSArray *arrayWins = [managedObjectContext executeFetchRequest:requestWins];

NSFetchRequest *requestLosses = [[NSFetchRequest alloc] initWithEntity:@"Game"];
...<repeat similar to above>...
NSArray *arrayLosses = [managedObjectContext executeFetchRequest:requestLosses];

NSInteger gamesPlayed = player.playerGames.count;
NSInteger gamesWon = arrayWins.count;
NSInteger gamesLost = arrayLosses.count;
NSInteger gamesDrawn = gamesPlayed - gamesWon - gamesLost;

希望这有帮助。

相关问题