Основная модель данных, игра имеет победителя и проигравшего, игрок имеет несколько игр?
Я пытаюсь настроить свою основную модель данных. Я хочу иметь игру, в которой есть один неудачник и один победитель. И мне нужен игрок, который имеет несколько игр.
У меня есть следующее:
Сущность: игрок
Атрибуты: победы, поражения, имя
Отношения: игры Направление: Игра обратная:??? победитель или неудачник???
Сущность: игра
Атрибуты: проигрышный, выигрышный,
Отношения: неудачник: Игрок, обратный: игры, победитель: Игрок, обратный: игры
Как я могу настроить это??
Спасибо!
2 ответа
Почему не просто
- player.gamesWon<->game.winner (игра: to-one)
- player.gamesLost<->game.loser (игра: to-one)
- player.games<->game.players (игра:to-many)
Тогда вы можете случайно получить выигрыши / проигрыши как gamesWon.count и gamesLost.count, а не как атрибуты.
Учти это...
В игре есть игроки. Каждый игрок в игре набирает очки. Независимо от того, выиграют они или проиграют, зависит от их счета по сравнению с результатом другого игрока в этой игре.
Мое предложение...
- Сущность:
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;
Надеюсь это поможет.