2012-03-02 113 views
0

我有一個類叫做KCBlackjack。該類包含此代碼:不能將對象添加到NSMutableArray

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到我的播放器陣列以及經銷商自己。但是,當它運行時,它不起作用。沒有物體被添加到該玩家或莊家分配的玩家陣列中。

當代碼在遊戲控制器中時,它可以工作,但不在此類中。我認爲有些東西沒有初始化,但是在遊戲控制器中,玩家和經銷商都初始化了。

+0

檢查您是否已經初始化此類中的NSMutableArray。 – 2012-03-02 06:25:36

+0

哪一類?我的KC黑客或遊戲視圖控制器? – Alec 2012-03-02 06:26:45

+1

你能更清楚地知道哪些部件不能工作嗎?在將對象添加到播放器數組後,當您添加斷點/ NSLog時,它是否實際添加了[_decks lastObject]? – 2012-03-02 06:28:17

回答

1

如果您從面向對象的角度思考它,經銷商和玩家確實應該會收到諸如addCardToHand之類的消息:(Card )aCard。你做這件事的方式,盧卡斯完全正確,你得到他的數組副本不可變。我寧願看到一些點符號,如player.hand addCard:(卡)aCard,如果你不想讓玩家自己處理卡(注意卡銳利!:-))。

我認爲,如果你重構對象,你可以有乾淨的代碼工作,並可能擺脫委派的東西(這有點令人困惑,只是閱讀)。

祝你好運 - 二十一點很有趣!

Damien

+1

我實際上發現它要去的是playerHand整個時間!但是當我加入代表時,它改變了我的卡片動畫並且從未顯示過。問題解決了,代表作品很棒!謝謝。 – Alec 2012-03-02 06:50:59

+0

雅我沒有正確看待這個問題,我忘記了一個NSMutableArray被傳入,這將受到方法中發送到該對象的消息的影響。如果它只是一個NSArray,那麼如果它被設置爲其他東西,它將被改變爲不同的地址。 – 2012-03-02 06:56:24

+0

感謝盧卡斯幫助我。 – Alec 2012-03-02 07:03:03

相關問題