Не могу добавить объект в NSMutableArray - PullRequest
0 голосов
/ 02 марта 2012

У меня есть класс с именем KCBlackjack. Класс содержит этот код:

playerHand = [[NSMutableArray alloc] init];
dealerHand = [[NSMutableArray alloc] init];

blackjack = [[KCBlackjack alloc] initWithNumberOfDecks:6];
[self deal];

[blackjack dealTo:playerHand dealer:dealerHand];

- (void)dealTo:(NSMutableArray *)player dealer:(NSMutableArray *)dealer {
    // How many cards are left
    NSLog(@"Cards in Deck: %d", [_decks count]);

    // Deal to player then dealer
    for (int i = 0; i <= 1; i++) {
        [player addObject:[_decks lastObject]];
        [_decks removeLastObject];

        NSLog(@"%@", player);

        if(_delegate && [_delegate respondsToSelector:@selector(didDistributeCard:withValue:)]) {
            KCCard *aCard = (KCCard *)[player objectAtIndex:player.count-1];
            [_delegate didDistributeCard:aCard to:player withValue:[aCard value]];
        }

        [dealer addObject:[_decks lastObject]];
        [_decks removeLastObject];

        NSLog(@"%@", dealer);

        if(_delegate && [_delegate respondsToSelector:@selector(didDistributeCard:withValue:)]) {
            KCCard *aCard = (KCCard *)[dealer objectAtIndex:dealer.count-1];
           [_delegate didDistributeCard:aCard to:dealer withValue:[aCard value]];
        }
    }

    NSLog(@"Done Dealing");

    NSLog(@"Cards Remaining in Deck: %d", [_decks count]);

    NSLog(@"Player: %@\n\n", player);
    NSLog(@"Dealer: %@\n\n", dealer);
}

Внутри моего игрового контроллера я установил player для моего массива игроков, а также для дилера его. Однако, когда это выполняется, это не работает. В массив игроков не добавлены объекты, которым назначен игрок или дилер.

Когда код находится в игровом контроллере, он работает, но не в этом классе. Я полагаю, что что-то не инициализируется, но в игровом контроллере и игрок, и дилер инициализируются.

1 Ответ

1 голос
/ 02 марта 2012

Если вы думаете об этом с точки зрения ОО, дилер и игрок на самом деле являются объектами, которые должны получить сообщение, например addCardToHand: (Card ) aCard. То, как вы это делаете, Лукас совершенно правильно, вы получаете копию его массива, который не является изменяемым. Я бы предпочел увидеть некоторые точечные обозначения, такие как player.hand addCard: (Card ) aCard, если вы не хотите, чтобы игрок сам обрабатывал карту (следите за острыми картами! :-)).

Я думаю, что если вы реорганизуете объекты, у вас может быть чистый код, который работает, и, вероятно, избавитесь от этого делегирования (что немного сбивает с толку просто чтение).

Удачи - блэкджек это весело!

Дэмиен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...