NSUserDefault用于简单的游戏

时间:2014-01-31 12:43:18

标签: ios nsuserdefaults

我正在创建一个简单的游戏应用。 当用户单击第一个按钮并且int click为0时,他可以单击第二个按钮,依此类推。 如果用户首先点击第二个按钮然后再点击第一个按钮,他的生命将会减少。 当用户达到0生命并且View返回第一页时,我遇到了问题。 然后,当我点击按钮再次播放时,我有0个生命,不要3个!

这是我的代码:

    @implementation livello1

    int click=0;
    int lifes=3;

-(void)updateLifes:(int)lifes{

    if (lifes==1){
        NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
        [standardDefaults setObject:@"1" forKey:@"UserLifes"];
        [standardDefaults synchronize];
        [self showLifes];
        livello1 *livello1view = [[livello1 alloc] initWithNibName:nil bundle:nil];
        livello1view.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentViewController:livello1view animated:YES completion:nil];
    }
    else if (lifes==2){
        NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
        [standardDefaults setObject:@"2" forKey:@"UserLifes"];
        [standardDefaults synchronize];
        [self showLifes];
        livello1 *livello1view = [[livello1 alloc] initWithNibName:nil bundle:nil];
        livello1view.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentViewController:livello1view animated:YES completion:nil];
    }
    else if (lifes==3){
        NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
        [standardDefaults setObject:@"3" forKey:@"UserLifes"];
        [standardDefaults synchronize];
        [self showLifes];
        livello1 *livello1view = [[livello1 alloc] initWithNibName:nil bundle:nil];
        livello1view.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentViewController:livello1view animated:YES completion:nil];
        }
    else if (lifes==0){
        NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
        lifes=3;
        [self showLifes];
        [standardDefaults setObject:@"3" forKey:@"UserLifes"];
        [standardDefaults synchronize];
        gioca *giocaview = [[gioca alloc] initWithNibName:nil bundle:nil];
        giocaview.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentViewController:giocaview animated:YES completion:nil];
    }
}

-(void)showLifes{
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
    if ([[standardDefaults stringForKey:@"Userlifes"] isEqualToString:@"1"]) {
        lifes=1;}
    if ([[standardDefaults stringForKey:@"Userlifes"] isEqualToString:@"2"]) {
        lifes=2;}
    if ([[standardDefaults stringForKey:@"Userlifes"] isEqualToString:@"3"]) {
        lifes=3;}
    lifesLabel.text = [NSString stringWithFormat:@"%i",lifes];
}

- (IBAction)press1:(UIButton *)button1{
    if ((button1.selected=YES && click==0)){
        click=1;
    }
    else{
        lifes=lifes-1;
        click=0;
[self updateLifes:(lifes)];
}
}

- (IBAction)press2:(UIButton *)button2{
    if ((button2.selected =YES) && click==1){
        click=2;
    }
    else{
        lifes=lifes-1;
        click=0;
        [self updateLifes:(lifes)];    
    }
}

- (void)viewDidLoad{
    [super viewDidload];
    [self showLifes];
}

2 个答案:

答案 0 :(得分:0)

on playAgain按钮点击,setLife计数器为3。

答案 1 :(得分:0)

为“再次播放”创建另一个按钮并将其链接到-(IBAction)buttonPressed:(UIButton *)playAgain,并在该函数中将生命值重置为3.并且您不需要传递lifes,因为它是全局的变量(虽然这不是一个很好的做法)。虽然我不确定click的逻辑/实现,但您可以使用以下(略微优化的)代码:

@implementation livello1

    int click=0;
    int lifes=3;

-(void)updateLifes{
    if (lifes!=0) {
        NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
        [standardDefaults setInteger:lifes forKey:@"UserLifes"];
        [standardDefaults synchronize];
        [self showLifes];
        livello1 *livello1view = [[livello1 alloc] initWithNibName:nil bundle:nil];
        livello1view.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentViewController:livello1view animated:YES completion:nil];
    }
    else {
        NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
        lifes=3;
        [self showLifes];
        [standardDefaults setObject:@"3" forKey:@"UserLifes"];
        [standardDefaults synchronize];
        gioca *giocaview = [[gioca alloc] initWithNibName:nil bundle:nil];
        giocaview.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentViewController:giocaview animated:YES completion:nil];
    }
}

-(void)showLifes{
    NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
    lifesLabel.text = [NSString stringWithFormat:@"%i",[standardDefaults integerForKey:@"Userlifes"]];
}

- (IBAction)press1:(UIButton *)button1{
    if ((button1.selected=YES && click==0)){
        click=1;
    }
    else{
        lifes=lifes-1;
        click=0;
        [self updateLifes];
    }
}

- (IBAction)press2:(UIButton *)button2{
    if ((button2.selected =YES) && click==1){
        click=2;
    }
    else{
        lifes=lifes-1;
        click=0;
        [self updateLifes];    
    }
}

- (IBAction)buttonPressed:(UIButton *)playAgain{ //the new function
    lifes = 3;
    click = 0;
    [self updateLifes];
}

- (void)viewDidLoad{
    [super viewDidload];
    [self showLifes];
}