I'm a total beginner and have almost no knowledge in programming, but i'm helping my 11 year-old son in creating a small quiz app, and we have a big problem as we can not make the questions in each category not to repeat before all the questions have appeared. Please find below our current situation (inspired from an example we found online) and I would greatly appreciate your help on this issue, if possible if there is a simple solution that does not require a great xcode experience to implement it.
Thanks in advance and of course please let me know if the question needs further clarification:
-(void)Category2{
switch (QuestionSelected) {
case 0:
QuestionText.text = [NSString stringWithFormat:@"question1?"];
[Answer1 setTitle:@"A1" forState:UIControlStateNormal];
[Answer2 setTitle:@"A2" forState:UIControlStateNormal];
[Answer3 setTitle:@"A3" forState:UIControlStateNormal];
Answer3Correct = YES;
break;
case 1:
QuestionText.text = [NSString stringWithFormat:@"question2"];
[Answer1 setTitle:@"A1" forState:UIControlStateNormal];
[Answer2 setTitle:@"A2" forState:UIControlStateNormal];
[Answer3 setTitle:@"A3" forState:UIControlStateNormal];
Answer2Correct = YES;
break;
case 2:
QuestionText.text = [NSString stringWithFormat:@"question3"];
[Answer1 setTitle:@"A1" forState:UIControlStateNormal];
[Answer2 setTitle:@"A2" forState:UIControlStateNormal];
[Answer3 setTitle:@"A3" forState:UIControlStateNormal];
Answer1Correct = YES;
break;
default:
break;
}
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
if (GameInProgress == NO) {
LivesNumber = 3;
ScoreNumber = 0;
GameInProgress = YES;
}
Result.hidden = YES;
Exit.hidden = YES;
StartOver.hidden = YES;
Lives.text = [NSString stringWithFormat:@"%i", LivesNumber];
Score.text = [NSString stringWithFormat:@"%i", ScoreNumber];
Answer1Correct = NO;
Answer2Correct = NO;
Answer3Correct = NO;
LevelLoaded = [[NSUserDefaults standardUserDefaults] integerForKey:@"LevelSaved"];
QuestionSelected = arc4random_uniform(5);
Addendum (04.07.2014)
Please forgive me as we are new to the site and we have responded to PJS in the comments below his answer and I believe the format makes it unclear. Please find below, once again a copy of the current state of our project, hoping he can see what is going wrong (duplicates still appear):
LevelLoaded = [[NSUserDefaults standardUserDefaults] integerForKey:@"LevelSaved"];
int length = 20;
int myArray [] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
for (int i = 0; i < length - 1; ++i) {
int j = arc4random_uniform(length - i) + i;
int tmp = myArray[i];
myArray[i] = myArray[j];
myArray[j] = tmp;
}
for (int i = 0; i < length; ++i) {
QuestionSelected = myArray[i];
}
switch (LevelLoaded) {
case 1:
LevelSelected.text = [NSString stringWithFormat:@"Beginner"];
[self Category1];
break;
case 2:
LevelSelected.text = [NSString stringWithFormat:@"Intermediate"];
[self Category2];
break;
case 3:
LevelSelected.text = [NSString stringWithFormat:@"Expert"];
[self Category3];
break;
default:
break;
[super viewDidLoad];
Adendum 2 (10.07.2014)
Please find below the entire m file: (the random here only works for category 1) Is this what you mean by the SWITCH BLOCK in the FOR loop? It still continues to repeat the questions. Am I positioning the text wrong?
#import "Game.h"
@interface Game ()
@end
@implementation Game
-(void)RightAnswer{
ScoreNumber = ScoreNumber + 1;
Score.text = [NSString stringWithFormat:@"%i", ScoreNumber];
StartOver.hidden = NO;
Answer1.hidden = YES;
Answer2.hidden = YES;
Answer3.hidden = YES;
QuestionText.hidden = YES;
Result.hidden = NO;
Result.image = [UIImage imageNamed:@"rightanswer.jpg"];
}
-(void)WrongAnswer{
LivesNumber = LivesNumber - 1;
Lives.text = [NSString stringWithFormat:@"%i", LivesNumber];
StartOver.hidden = NO;
Answer1.hidden = YES;
Answer2.hidden = YES;
Answer3.hidden = YES;
QuestionText.hidden = YES;
Result.hidden = NO;
Result.image = [UIImage imageNamed:@"wronganswer.jpg"];
if (LivesNumber == 0) {
Result.image = [UIImage imageNamed:@"gameover.jpg"];
StartOver.hidden = YES;
Exit.hidden = NO;
GameInProgress = NO;
}
}
-(IBAction)Answer1:(id)sender{
if (Answer1Correct == YES) {
[self RightAnswer];
}
else{
[self WrongAnswer];
}
}
-(IBAction)Answer2:(id)sender{
if (Answer2Correct == YES) {
[self RightAnswer];
}
else{
[self WrongAnswer];
}
}
-(IBAction)Answer3:(id)sender{
if (Answer3Correct == YES) {
[self RightAnswer];
}
else{
[self WrongAnswer];
}
}
-(void)Category1{
int length = 3;
int myArray [] = {0,1,2};
for (int i = 0; i < length - 1; ++i) {
int j = arc4random_uniform(length - i) + i;
int tmp = myArray[i];
myArray[i] = myArray[j];
myArray[j] = tmp;
}
for (int i = 0; i < length; ++i) {
QuestionSelected = myArray[i];
}
switch (QuestionSelected) {
case 0:
QuestionText.text = [NSString stringWithFormat:@"question1"];
[Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
[Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
[Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
Answer3Correct = YES;
break;
case 1:
QuestionText.text = [NSString stringWithFormat:@"question2"];
[Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
[Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
[Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
Answer1Correct = YES;
break;
case 2:
QuestionText.text = [NSString stringWithFormat:@"question3"];
[Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
[Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
[Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
Answer1Correct = YES;
break;
default:
break;
}
}
-(void)Category2{
switch (QuestionSelected) {
case 0:
QuestionText.text = [NSString stringWithFormat:@"question1"];
[Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
[Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
[Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
Answer3Correct = YES;
break;
case 1:
QuestionText.text = [NSString stringWithFormat:@"question2"];
[Answer1 setTitle:@"T.Cubillas(PER)" forState:UIControlStateNormal];
[Answer2 setTitle:@"R.Rensenbrink(NET)" forState:UIControlStateNormal];
[Answer3 setTitle:@"J.Jordan(SCO)" forState:UIControlStateNormal];
Answer2Correct = YES;
break;
case 2:
QuestionText.text = [NSString stringWithFormat:@"question3"];
[Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
[Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
[Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
Answer1Correct = YES;
break;
default:
break;
}
}
-(void)Category3{
switch (QuestionSelected) {
case 0:
QuestionText.text = [NSString stringWithFormat:@"question1"];
[Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
[Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
[Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
Answer2Correct = YES;
break;
case 1:
QuestionText.text = [NSString stringWithFormat:@"question2"];
[Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
[Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
[Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
Answer2Correct = YES;
break;
case 2:
QuestionText.text = [NSString stringWithFormat:@"question3"];
[Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
[Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
[Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
Answer3Correct = YES;
break;
default:
break;
}
}
- (void)viewDidLoad
{
if (GameInProgress == NO) {
LivesNumber = 3;
ScoreNumber = 0;
GameInProgress = YES;
}
Result.hidden = YES;
Exit.hidden = YES;
StartOver.hidden = YES;
Lives.text = [NSString stringWithFormat:@"%i", LivesNumber];
Score.text = [NSString stringWithFormat:@"%i", ScoreNumber];
Answer1Correct = NO;
Answer2Correct = NO;
Answer3Correct = NO;
LevelLoaded = [[NSUserDefaults standardUserDefaults] integerForKey:@"LevelSaved"];
switch (LevelLoaded) {
case 1:
LevelSelected.text = [NSString stringWithFormat:@"Beginner"];
[self Category1];
break;
case 2:
LevelSelected.text = [NSString stringWithFormat:@"Intermediate"];
[self Category2];
break;
case 3:
LevelSelected.text = [NSString stringWithFormat:@"Expert"];
[self Category3];
break;
default:
break;
[super viewDidLoad];
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
@end