2014-01-31 114 views
-3

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

这里是我的代码:

@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]; 
} 
+0

不理解您的问题! – Bruno

+0

如果用户达到0生命,然后想再次玩,生命= 0而不是3 – fabersky

+1

euh ...你需要重置你的生命计数器。 – Bruno

回答

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]; 
} 
+0

我使用单击来检测用户是否按正确顺序单击按钮。 顺便说一句,非常感谢你的帮助! – fabersky

+0

没有问题!希望上面的代码有助于:) –

+0

现在我有一个不同的问题:当我第一次玩,一切顺利。 当我再次玩,生命是3,但如果我点击button2而不是按钮1,视图返回第一个,就像我有0的生命。 (对不起,我的英语) – fabersky

0

上playAgain按钮点击,setLife柜台3.