Dag 3 opgave 6 - version 1

Opgavens ordlyd er:

"HIGH-LOW guessing game
Implement an application that plays the HIGH-LOW guessing game with numbers.
The program should pick a random number between 1 and 100, and then repeatedly prompt the user to guess the number. On each guess, report to the user that he is correct, too low or too high. Continue until the user guesses the correct number or chooses to quit. At the end of each game, prompt the user to see if he wants to play again."


Koden er at finde nederst på denne side

Gå direkte til koden opgave 6 Form1.cs


Gennemgang af opgaveløsningen:

Jeg gik i gang så hurtigt, at jeg overså en lille detalje: det tilfældige tal skal være det samme, indtil brugeren enten gætter rigtigt eller vælger at afbryde spillet.

Denne side gennemgår hvordan jeg løste følgende:

  1. Generering af tilfældigt tal
  2. Eventhandling - på buttonClick
  3. Eventhandling - på keyPress

Screenshots:
Umiddelbart skal brugeren kun have mulighed for at gøre to ting: skrive sit gæt og trykke på knappen "giv et bud".
screenshot af programmet ved start

De tre variationer for brugeren er om der gættes for lavt, for højt eller korrekt. Det giver følgende tre skærmbilleder:

screenshot af meddelelse efter for lavt gæt screenshot af meddelelse efter for højt gæt screenshot af meddelelse efter korrekt gæt

Uanset udfaldet af gæt og tilfældigt tal vil brugeren herefter have en af to muligheder. At vælge "yes" og prøve med et nyt gæt (på et nyt tilfældigt nummer uanset om brugeren gættede forkert før) eller "no" som lukker programmet helt.

Generering af tilfældigt tal:
Sker ved brug af klassen Random.
Metoden Next() er overloaded, og en af udgaverne giver mulighed for at tage intervallet med i metodekaldet. I dette tilfælde skal brugeren vælge et tal mellem 1 og 100, så derfor bliver
Next(1,100) anvendt.

Selvom dette ikke kræver meget kode, har jeg alligevel valgt at adskille genereringen af det tilfældige tal (createNumber()) fra metoden bidBtn_Click(object sender, EventArgs e), hvor brugeren klikker på "Giv et bud". I sidstnævnte kaldes metoden createNumber() når brugerens gæt er valideret.

Da kaldet til createNumber() sker som noget af det første i bidBtn_Click(object sender, EventArgs e) bliver der dannet et nyt tilfældigt tal for hver gang brugeren har trykket på knappen "Giv et bud". Koden ser sådan ud:

if ((guess <= 100) && (guess != 0))
{
      //kald random metode og gem i en int, så tallet ikke ændres:
      int randomNumber = this.createNumber();
      
      //Vis det tilfældige tal i GUI, så brugeren kan se det:
      label1.Text = randomNumber.ToString();
      ..//herefter kommer tjek af om gæt er for højt, for lavt, korrekt

Menupunktet "RandomNumber game version 2" gennemgår hvordan det skulle have været implementeret.


Validering af brugerens indtastning sker på flere måder:

Eventhandling på button_Click
Når brugeren klikker på knappen "Giv et bud" sker der kalde til metoden bidBtn_Click(object sender, EventArgs e). Denne metode har ansvaret for al kommunikation til brugeren og ansvaret for validering i forhold til, at brugeren ikke har tastet værdien 0 eller over 100, da spillet går ud på at gætte et tal mellem 1 og 100.
screenshot af meddelelse ved indtastning af tal over 100
Dette klares kodemæssigt således:

//brugerens gæt:
    int guess = int.Parse(this.guessTxtBox.Text);
    //hvis det indtastede er mindre end eller lig med 100 og det indtastede ikke er 0:
    if ((guess <= 100) && (guess != 0))
    {
    .....
    }//hvis det indtastede tal er højere end 100 eller 0:
    else
    dr = MessageBox.Show(Form1.ActiveForm, "Du skal taste et tal mellem 1 og 100",
    -->"Du tastede forkert", MessageBoxButtons.OK);
Pilen i nederste linie er en oplysning til dig om, at de to sidste linier i virkeligheden er en lang linie


Eventhandling på keyPress
Dette foregår ved brug af metoden guessTxtBox_KeyPress(object sender, KeyPressEventArgs e).
Denne sørger for, at brugeren ikke kan taste bogstaver eller tegn i textboxen. Det er kun tilladt at bruge tal og backspace.
Hvis brugeren f.eks. indtaster et bogstav kommer denne meddelelse:
screenshot af meddelelse ved indtastning af ikke-tal

Koden er:

	Char ch = e.KeyChar;
	Char bSpace = (char)Keys.Back;
	//hvis det ikke er et tal og hvis det ikke er backSpace
	if ((!Char.IsDigit(ch)) && (!ch.Equals(bSpace)))
	{
                   e.Handled = true;
                   MessageBox.Show("Du må kun taste tal", "Meddelelse");
	}

(!Char.IsDigit(ch)) tjekker at brugeren ikke har tastet andet end tal.
Koden sikrer samtidig, at minustegnet ikke accepteres. Derved kan brugeren ikke taste negative tal, og det er ikke nødvendigt at tjekke for dette under bidBtn_Click(object sender, EventArgs e) .

Det skal selvfølgelig være muligt at anvende backspace. Brugeren kan have tastet forkert. Enten ved at trykke et forkert tal eller ved at trykke for mange tal.
screenshot af programmet ved indtastning af for mange tal

Henriette Rømer Dreier - 22. februar 2006







Download den samlede kode som .zip-fil

Indhold af Form1.cs

Indhold af Form1.Designer.cs

Valid CSS!

Valid XHTML 1.0!