xcode iphone ocjective-c beter sig inte som tänkt

Permalänk
Medlem

xcode iphone ocjective-c beter sig inte som tänkt

jag håller på med ett simpelt luffar schack spel. men när man trycker på en ruta blir det bara O och aldrig X.

här är koden:

.h

UIButton *s1; UIButton *s2; UIButton *s3; @property (nonatomic, retain)IBOutlet UIButton *s1; @property (nonatomic, retain)IBOutlet UIButton *s2; @property (nonatomic, retain)IBOutlet UIButton *s3;

.m

#define firstplayer 1 #define secondplayer 2 #import "tic_tac_toeViewController.h" @implementation tic_tac_toeViewController @synthesize s1,s2,s3; @synthesize Ximg, Oimg; - (void)viewDidLoad { [super viewDidLoad]; playerstate = firstplayer; Ximg = [UIImage imageNamed:@X.png]; Oimg = [UIImage imageNamed:@O.png]; } -(IBAction)s1_pressed { if (playerstate == firstplayer) { [s1 setImage:Ximg forState:UIControlStateNormal]; playerstate = secondplayer; } if (playerstate == secondplayer) { [s1 setImage:Oimg forState:UIControlStateNormal]; playerstate = firstplayer; } } -(IBAction)s2_pressed { if (playerstate == firstplayer) { [s2 setImage:Ximg forState:UIControlStateNormal]; playerstate = secondplayer; } if (playerstate == secondplayer) { [s2 setImage:Oimg forState:UIControlStateNormal]; playerstate = firstplayer; } } -(IBAction)s3_pressed { if (playerstate == firstplayer) { [s3 setImage:Ximg forState:UIControlStateNormal]; playerstate = secondplayer; } if (playerstate == secondplayer) { [s3 setImage:Oimg forState:UIControlStateNormal]; playerstate = firstplayer; } }

p.s det är 9 knappar men har inte med dem för koden skulle bli över drivet lång pga koden esamma för alla.

Permalänk
Medlem

(Först; varför synthesizar du dina bilder? Du behöver väl inte getters och setters för dem?)

Problemet kommer från hur du har konstruerat dina ifsatser. Efter att första ifsatsen körts är playerstate istället secondplayer, och då kommer nästa ifsats också vara sann. Istället för två ifsatser bör du använda en if...else-konstruktion:

if (playerstate == firstplayer) { [s3 setImage:Ximg forState:UIControlStateNormal]; playerstate = secondplayer; } else { [s3 setImage:Oimg forState:UIControlStateNormal]; playerstate = firstplayer; }

Permalänk
Medlem

tackar nu funkar det som det ska