2012-03-02 3 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

OO 관점에서 딜러와 플레이어는 실제로 addCardToHand : (카드 ) aCard와 같은 메시지를 수신해야하는 개체입니다. 당신이 그것을하는 방식으로 루카스는 정확하게 맞습니다. 당신은 그의 배열을 변경할 수없는 복사본을 얻습니다. 나는 오히려 player.h와 addCard : (카드) aCard와 같은 점 표기법을 많이 보게됩니다. 플레이어가 카드를 직접 처리하지 못하도록하려는 경우 (카드 샤프를보십시오! :-)).

당신이 객체로 리팩터링하면 깨끗한 코드가 작동하고, 아마도 위임 사항을 없앨 수있을 것이라고 생각합니다.

행운을 빌어 요 - 블랙 잭은 재미 있습니다!

Damien

+1

실제로 플레이어로 이동한다는 사실을 알았습니다 전체 시각! 하지만 대리인을 배치하면 내 카드 애니메이션이 바뀌었고 결코 보여주지 못했습니다. 문제가 해결되고 위임자가 훌륭하게 작동합니다! 감사. – Alec

+0

예를 제대로 살펴 보지 못했고 NSMutableArray가 전달되고 있다는 것을 잊었습니다. NSMutableArray가 전달되는 메시지는 메서드에서 해당 객체로 전송 된 메시지의 영향을받습니다. 그것은 단지 NSArray 일 경우 다른 것으로 설정된 경우 다른 주소로 변경됩니다. –

+0

나를 도와 주신 루카스에게 감사드립니다. – Alec

관련 문제