Reset array after playing the game?

2020-04-26 08:31发布

问题:

I made a quiz in iOS with xcode, what i have now is a quiz that generates 20 random answers out of an array, it controls the text of the labels when a button is pushed to check if the answer is correct. The answers are also random generated and i made sure that there weren't mulple answers with the same text. My problem is that when a question is asked, i change the text of an object in my array to "removed"; but when i push start again after i've done the quiz, my array has 20 objects with the string "remove"; my question is: How can I reset my array to it's normal objects? Here is my full code, ignore the comments but it's kind of a junk cause i'm new to ios programming:

//
//  ViewController.m
//  Mundo Grafia
//
//  Created by Axel Lambregts on 2/10/12.
//  Copyright (c) 2012 AxelNiels. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end
@implementation ViewController


// variabelen aanmaken
NSInteger intScore;
NSInteger intRandomMonument;
NSInteger intRandomAnswerPosition;
NSInteger intRandomAnswerA;
NSInteger intRandomAnswerB;
NSInteger intRandomAnswerC;
NSInteger intRandomAnswerD;
NSInteger intArrayEuropeLenght;
NSInteger intAmountOfQuestionsAsked;
NSString *scoreSpatie;
NSString *arrEurope[][2] =

    {

        {@"Eifel.jpg",@"Paris"},
        {@"NotreDame.jpg",@"Paris"},
        {@"ArcDeTriompheParis.jpg",@"Paris"},

        {@"AtomuimBrussels.jpg",@"Brussels"},
        {@"MannekePis.jpg",@"Brussels"},

        {@"Colosseum.jpg",@"Rome"},
        {@"TreviFountainRome.jpg",@"Rome"},

        {@"SagradaFamilia.jpg",@"Barcelona"},
        {@"SpanishSchoolMadrid.jpg",@"Madrid"},

        {@"KremlinMoskou.jpg",@"Moskou"},

        {@"MermaidKopenhagen.jpg",@"Copenhagen"},

        {@"MonteCarloMonaco.jpg",@"Monaco"},

        {@"AcropolisAthens.jpg",@"Athens"},

        {@"ParlementBudapest.jpg",@"Budapest"},

        {@"BuildingReykjavik.jpg",@"Reykjavik"},

        {@"StatueKiev.jpg",@"Kiev"},

        {@"PortOfEuropeLissabon.jpg",@"Lisbon"},

        {@"ViewSanMarino.jpg",@"San Marino"},

        {@"BridgesPrague.jpg",@"Prague"},

        {@"MoskeeAnkara.jpg",@"Ankara"},

        {@"TowerBridgeLondon.jpg",@"London"},
        {@"BigBenLondon.jpg",@"London"},
        {@"LondonEyeLondon.jpg",@"London"},

        {@"BrandenburgerTor.jpg",@"Berlin"},
        {@"ReichstagBerlin.jpg",@"Berlin"},

        {nil,nil}

    };


/*
NSArray *arrEurope = @[
@[@"Eifel.jpg",@"Paris"],
@[@"NotreDame.jpg",@"Paris"],
@[@"ArcDeTriompheParis.jpg",@"Paris"],
@[@"Eifel.jpg",@"Paris"],
@[@"NotreDame.jpg",@"Paris"],
@[@"ArcDeTriompheParis.jpg",@"Paris"],

@[@"AtomuimBrussels.jpg",@"Brussels"],
@[@"MannekePis.jpg",@"Brussels"],

@[@"Colosseum.jpg",@"Rome"],
@[@"TreviFountainRome.jpg",@"Rome"],

@[@"SagradaFamilia.jpg",@"Barcelona"],
@[@"SpanishSchoolMadrid.jpg",@"Madrid"],

@[@"KremlinMoskou.jpg",@"Moskou"],

@[@"MermaidKopenhagen.jpg",@"Copenhagen"],

@[@"MonteCarloMonaco.jpg",@"Monaco"],

@[@"AcropolisAthens.jpg",@"Athens"],

@[@"ParlementBudapest.jpg",@"Budapest"],

@[@"BuildingReykjavik.jpg",@"Reykjavik"],

@[@"StatueKiev.jpg",@"Kiev"],

@[@"PortOfEuropeLissabon.jpg",@"Lisbon"],

@[@"ViewSanMarino.jpg",@"San Marino"],

@[@"BridgesPrague.jpg",@"Prague"],

@[@"MoskeeAnkara.jpg",@"Ankara"],

@[@"TowerBridgeLondon.jpg",@"London"],
@[@"BigBenLondon.jpg",@"London"],
@[@"LondonEyeLondon.jpg",@"London"],

@[@"BrandenburgerTor.jpg",@"Berlin"],
@[@"ReichstagBerlin.jpg",@"Berlin"]



];


*/



//methode'start' wanneer er op de start-knop wordt gedrukt
-(IBAction)start{



    [self NewQuestionEurope];
    intAmountOfQuestionsAsked = 0;
    //reset and show score
    intScore = 0;
    score.text = [NSString stringWithFormat:@"%d", intScore];

    //make buttons and labels visible
    Start.hidden = YES;
    question.hidden = NO;
    score.hidden = NO;
    scoretext.hidden = NO;
    imageContainer.hidden = NO;


    answerA.hidden = NO;
    answerB.hidden = NO;
    answerC.hidden = NO;
    answerD.hidden = NO;

    answerA.textColor = [UIColor greenColor];
    answerB.textColor = [UIColor greenColor];
    answerC.textColor = [UIColor greenColor];
    answerD.textColor = [UIColor greenColor];


    clickButtonA.hidden = NO;
    clickButtonB.hidden = NO;
    clickButtonC.hidden = NO;
    clickButtonD.hidden = NO;

    GoodFalse.hidden = NO;
    GoodFalse.text=@"Press a button to answer";
    GoodFalse.textColor = [UIColor greenColor];
   question.text = @"Where is this picture taken?";

}//einde start





-(IBAction)Reset{

score.text= @"gelukt";



}


-(IBAction)NewQuestionEurope{


  if(intAmountOfQuestionsAsked == 19){

      question.text = [@"Uw score is: "stringByAppendingString: [NSString stringWithFormat:@"%d", intScore]];

      Start.hidden = NO;
      question.hidden = NO;
      score.hidden = YES;
      scoretext.hidden = YES;
      imageContainer.hidden = YES;


      answerA.hidden = YES;
      answerB.hidden = YES;
      answerC.hidden = YES;
      answerD.hidden = YES;

      clickButtonA.hidden = YES;
      clickButtonB.hidden = YES;
      clickButtonC.hidden = YES;
      clickButtonD.hidden = YES;
      GoodFalse.hidden = YES;

      Start.titleLabel.text = @"END";



  }

    else{




    intAmountOfQuestionsAsked ++;



    //Deze lus geeft aan intArrayEuropeLenght de waarde van hoeveel rijen de array bevat//
    intArrayEuropeLenght = 0;

    while (arrEurope[intArrayEuropeLenght][0] != NULL)
    {
        intArrayEuropeLenght++;
    }


   //score.text = [NSString stringWithFormat:@"%d", intScore];


    scoreSpatie = [
                             [NSString stringWithFormat:@"%d", intScore]
                             stringByAppendingString:@"/"];
    score.text = [
                  scoreSpatie
                  stringByAppendingString:[NSString stringWithFormat:@"%d", intAmountOfQuestionsAsked]
                  ];



  // Randoms genereren voor: 4 random antwoorden; 1 random afbeelding; een random positie om het juiste antwoord in te plaatsen
    intRandomMonument = arc4random()%intArrayEuropeLenght;            
    intRandomAnswerA = arc4random()%intArrayEuropeLenght;
    intRandomAnswerB = arc4random()%intArrayEuropeLenght;
    intRandomAnswerC = arc4random()%intArrayEuropeLenght;
    intRandomAnswerD = arc4random()%intArrayEuropeLenght;
    intRandomAnswerPosition = arc4random()%4;



    while(arrEurope[intRandomMonument][0] == @"removed"){

        intRandomMonument = arc4random()%intArrayEuropeLenght; 

    }


  //Random antwoorden maken
    answerA.text = @"";
    answerB.text = @"";
    answerC.text = @"";
    answerD.text = @"";

    if(answerA.text = @""){
        answerA.text = arrEurope[intRandomAnswerA][1];
    }

    if(answerB.text = @""){
        answerB.text = arrEurope[intRandomAnswerB][1];
    }

    if(answerC.text = @""){
        answerC.text = arrEurope[intRandomAnswerC][1];
    }

    if(answerD.text = @""){
        answerD.text = arrEurope[intRandomAnswerD][1];
    }



    switch(intRandomAnswerPosition)
    {
        case 0: answerA.text = arrEurope[intRandomMonument][1];
            break;
        case 1: answerB.text = arrEurope[intRandomMonument][1];
            break;
        case 2: answerC.text = arrEurope[intRandomMonument][1];
            break;
        case 3: answerD.text = arrEurope[intRandomMonument][1];
    };



    //als er antwoorden hetzelfde zijn, voor de gelijke een random blijven maken tot ze niet hetzelfde zijn
    if(
       [answerA.text isEqualToString: answerB.text]||
       [answerA.text isEqualToString: answerC.text]||
       [answerA.text isEqualToString: answerD.text]
       ){

        answerA.text = arrEurope[arc4random()%intArrayEuropeLenght][1];

    };

    if(
       [answerB.text isEqualToString: answerA.text]||
       [answerB.text isEqualToString: answerC.text]||
       [answerB.text isEqualToString: answerD.text]
       ){

        answerB.text = arrEurope[arc4random()%intArrayEuropeLenght][1];

    };

    if(
       [answerC.text isEqualToString: answerA.text]||
       [answerC.text isEqualToString: answerB.text]||
       [answerC.text isEqualToString: answerD.text]
       ){

        answerC.text = arrEurope[arc4random()%intArrayEuropeLenght][1];

    };

    if(
       [answerD.text isEqualToString: answerA.text]||
       [answerD.text isEqualToString: answerB.text]||
       [answerD.text isEqualToString: answerC.text]
       ){

        answerD.text = arrEurope[arc4random()%intArrayEuropeLenght][1];

    };




    //Laat de afbeelding zien van het gekozen monument (via random gekozen)
    imageContainer.image = [UIImage imageNamed: arrEurope[intRandomMonument][0]];




  }  

}


//hier onder zit ergens een fout want hij geeft precies random juist en fout :)
//kan zijn dat het opgelost is vanaf we niet 2x dezelfde vragen hebben maar ik denk het niet.

//press buttonA
-(IBAction)AnswerA {



    if([answerA.text isEqualToString: arrEurope[intRandomMonument][1]]){

        GoodFalse.text = @"Correct!";
        GoodFalse.textColor = [UIColor greenColor];
        intScore ++;

    }else {

        GoodFalse.text=@"Wrong!";
        GoodFalse.textColor = [UIColor redColor];

        }

    arrEurope[intRandomMonument][0] = @"removed";

    [self NewQuestionEurope];

}

//press buttonB
-(IBAction)AnswerB {

    if([answerB.text isEqualToString: arrEurope[intRandomMonument][1]]){

        GoodFalse.text = @"Correct!";
        GoodFalse.textColor = [UIColor greenColor];
        intScore ++;

    }else {

        GoodFalse.text=@"Wrong!";
        GoodFalse.textColor = [UIColor redColor];
    }

    arrEurope[intRandomMonument][0] = @"removed";
[self NewQuestionEurope];
}

//press buttonC (works)
-(IBAction)AnswerC {


    if([answerC.text isEqualToString: arrEurope[intRandomMonument][1]]){

        GoodFalse.text = @"Correct!";
        GoodFalse.textColor = [UIColor greenColor];
        intScore ++;

    }else {

        GoodFalse.text=@"Wrong!";
        GoodFalse.textColor = [UIColor redColor];
    }

arrEurope[intRandomMonument][0] = @"removed";
    [self NewQuestionEurope];
}


//press buttonD
-(IBAction)AnswerD {


    if([answerD.text isEqualToString: arrEurope[intRandomMonument][1]]){

        GoodFalse.text = @"Correct";
        GoodFalse.textColor = [UIColor greenColor];
        intScore ++;

    }else {

        GoodFalse.text=@"Wrong!";
        GoodFalse.textColor = [UIColor redColor];
    }
   arrEurope[intRandomMonument][0] = @"removed";
    [self NewQuestionEurope];
}





//hier onder niets wijzigen


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.




}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

回答1:

I see 2 options:

you call the init line again...

String *arrEurope[][2] =

{

    {@"Eifel.jpg",@"Paris"},
    {@"NotreDame.jpg",@"Paris"},...

Or you add a third row to your array and put the "removed" (i would call it "used") parameter there. In the last case you can then just iterate over your array again and put the "removed" back to "active"



回答2:

Either make a copy of arrEurope on game start and restore to it when the game is restarted or use some other array to mark a question as removed. I would personally try to use option 2.