2014-01-22 4 views
0

저는 객관적인 프로그래밍에 새로운 것이지만 자신의 주사위 굴림 게임을 구축하면 게임의 기초를 이해하는 데 도움이되었습니다. 여기에 주사위 굴림 게임에 대한 많은 주제가 있지만 내가 찾고있는 것을 찾지 못했습니다. 1에서 6까지의 무작위로 생성 된 숫자를 사용하는 8 개의 다른 주사위로 게임을 만들었습니다. 플레이어는 모든 주사위를 한 번 누르면 굴릴 수 있고, 레이블은 총 금액으로 업데이트됩니다. 각 롤의 포인트. 그러나 점수를 올리려면 플레이어가 주사위를 굴린 후 (개인 주사위를 치는 것) 일정한 주사위를 유지하고 다른 주사위를 계속 사용하기를 원합니다.주사위 게임 : 개별 주사위를 유지하십시오

물론
- (void)viewDidLoad { 

UITapGestureRecognizer *recogDice = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)]; 
[self.firstDieView addGestureRecognizer:recogDice]; 
} 

-(void)tapRecognized:(UITapGestureRecognizer *)sender { 
NSLog(@"Nr 1 touched"); 
} 

이 실제로 다이가 도청되는 것을 나에게 보여줍니다,하지만 난에서 그것을 코딩하는 방법을 모르는 다음과 같이 나는 특정 다이가 도청 경우 표시하는 로그를 구현했습니다 다른 사람들이 다시 굴러 올 때 주사위가 굴러 가지 않을 것입니다. 다음과 같이 롤링에 대한 나의 코드는 다음과 같습니다

-(void)throw { 
DiceThrowController *diceController = [[DiceThrowController alloc] init]; 

int firstNumber = [diceController getDieNumber]; //for this example i've cut out the other dice, which are the same as this one, only called 'second' etc. 

[self.firstDieView showDieNumber:firstNumber]; 

self.sumLabel.text = [NSString stringWithFormat:@"%d", firstNumber]; 
} 

사람이 여기에 올바른 방향으로 날 포인트? 내 게임은 완벽하게 작동하지만 실제 상호 작용/목표를 추가하고 싶습니다. 감사합니다.

+0

각 주사위 뷰가 자신의 diceThrowController 인스턴스를 가지고 있는가? –

답변

0

주사위는 분명히 볼 수있는 개체이므로 Dice 클래스를 만드는 것이 좋습니다.

@property (nonatomic) BOOL locked; 
@property (nonatomic) NSInteger currentValue; 

가능성이 표시 목적에 대한 이미지 뷰 :

개인적으로 나는 아마 클래스의 다음 공용 속성을 가질 것이다. 나는 개인적으로 논리 "회전"주사위 클래스의 방법으로 주사위 것 :

-(void)spin{ 
    if (!self.locked){ 
     // Your actual spin logic goes here 
    } 
}; 

을이이 tapGestureRecognizer에 의해 트리거 있습니다.

DiceThrowController에는 모든 인스턴스를 포함하여 NSArray *diceSet;이 포함될 수 있습니다. 점수를 집계 할 수 단순히 diceSet을 반복하려는 총 점수를 얻으려면 :

NSInteger totalScore = 0; 

for (Dice *dice in diceSet){ 
    totalScore += dice.currentValue; 
} 
1

도청 점수 저장을 위해 NSMutableArray를 사용하는 것은 어떻습니까? 주사위 그냥 인덱스 0에 대응하는 인덱스 (그래서 첫 번째 주사위를 배열의 점수를 저장 탭됩니다

NSMutableArray diceScores = [NSMutableArray arrayWithCapacitive:8]; 
[diceScores setArray:@[@0, @0, @0, @0, @0, @0, @0, @0]]; 

: 아직 도청되지 않은 주사위 알 수 있도록 그냥 8 0으로 배열을 초기화합니다. ..) with replaceObjectAtIndex:withObject:

경고 그러나이 솔루션은 API를 약간 변경해야합니다. 배열에 정수를 저장할 수 없으므로 객체 만 변경하면 getDieNumber이 변경되어 int 대신 NSNumber이 반환됩니다.