0

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

我有以下内容:

实体:玩家

属性:胜、负、名

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

实体:游戏

属性:lossScore、winningScore、

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

我该如何设置?

谢谢!

4

2 回答 2

1

为什么不只是:

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

顺便说一下,您可能会以 gamesWon.count 和 gamesLost.count 的形式获得赢/输,而不是作为属性。

于 2014-04-27T02:52:30.483 回答
1

考虑这个...

游戏有玩家。游戏中的每个玩家都会获得一个分数。他们是赢还是输取决于他们的得分与其他玩家在该游戏中的得分相比。

我的建议...


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

  • 实体:Game
  • 属性:(NSString *reference例如游戏“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;

希望这可以帮助。

于 2014-04-27T13:32:46.660 回答