2012-03-02 5 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を初期化していることを確認してください。 –

+0

どのクラスですか?私のKCBlackjackまたはゲームビューコントローラ? – Alec

+1

どの部分が機能していないかをもっと明示することはできますか?オブジェクトをプレイヤー配列に追加した後にブレークポイント/ NSLogを追加すると、実際に[_decks lastObject]が追加されますか? –

答えて

1

ディーラーとプレーヤーは、実際にはaddCardToHand:(カード)aCardのようなメッセージを受け取るべきオブジェクトです。あなたがそれをやっているやり方では、ルーカスはまさに正しいのですが、あなたは変えられない彼の配列のコピーを手に入れます。私は、player.hやaddCard :(カード)aCardのようないくつかのドット表記を見る方がいいでしょう。プレーヤーがカードを自分で扱わないようにしたい場合は(カードシャープを見てください:-))。

オブジェクトをリファクタリングすると、動作するきれいなコードを持つことができ、おそらくその委任用のものを取り除くことができます(ちょっと読んでちょっと混乱します)。

幸運 - ブラックジャックは楽しいです!

ダミアン

+1

私は実際にそれがplayerHand時間!しかし、私がデリゲートを入れると、カードのアニメーションが変わり、決して見せられませんでした。問題は解決され、代議員は素晴らしい作品です!ありがとう。 – Alec

+0

私は質問を正しく見ておらず、NSMutableArrayが渡されていることを忘れていました。NSMutableArrayは渡されました。メソッドのオブジェクトに送信されるメッセージの影響を受けます。それがちょうどNSArrayだったなら、別のアドレスに設定されていれば別のアドレスに変更されます。 –

+0

私を助けてくれてありがとうルーカス。 – Alec

関連する問題