Zahlen raten war das erste Programm, dass ich mit meinem Sohn gemeinsam entwickelt habe. Sozusagen als Appetizer, um die Lust fürs Programmieren zu entfachen.
Spielidee
Das Programm sucht sich eine zufällige Zahl aus, die der Benutzer erraten soll. Nach jeder Eingabe gibt es eine Antwort als Hilfe, ob die gesuchte Zahl kleiner oder größer ist als die eingegebene.
Voraussetzungen
Die Grundlagen einer Programmiersprache müssen bekannt sein. Das sind grundlegende Datentypen, Befehle wie IF oder FOR.
Die Hauptfunktionsweise der IDE Integrated Development Environment von Lazarus muss klar sein. Wie kommen Komponenten auf ein Formular. Wie werden Eigenschaften eingestellt.
Startpunkt sollte immer das Anlegen eines neuen Projektes mit der Auswahl „Anwendung“ und das Speichern von Projekt und Units in einem neuen leeren Ordner sein.
Formulardesign
Als erstes haben wir uns gemeinsam überlegt, wie die Oberfläche im Fenster gestaltet werden soll und welche passenden Komponenten es in Lazarus dafür gibt.
- Label’s für die Beschriftungen
- SpinEdit’s für die Eingabefelder für Zahlenbereich des Zufallszahl und geratene Zahl (später als TSpinEdit)
- Button’s für die Aktionen: Raten, Spiel starten, Auflösen und Beenden
Diese wurden auf das Formular gezogen, ausgerichtet und die Formatierung nach unseren Vorstellungen über die Eigenschaften im Objektinspektor eingestellt.
Bis das so aussah, hat es aber eine Weile gedauert. Es war aber eine gute Übung, um mit dem Formulardesigner zu arbeiten und Einstellungen über den Objektinspektor zu machen. Unser erster Prototyp sah so aus:
Der Code
Variablen
Als nächstes haben wir überlegt, welche Variablen wir benötigen. Eine für die Zufallszahl. Eine andere, um die Rate-Versuche zu zählen. Die richtige Stelle für die Deklaration ist der Private-Bereich.
private { private declarations } Zufallszahl : integer; //Die gesuchte Zufallszahl Versuche : integer; //Anzahl der Versuche
Neues Spiel
Dann folgt die Ereignisroutine für die erste Funktion im Spiel. Mit einem Doppelklick auf den Button „Spiel beginnen“ wird eine neue Prozedur von Lazarus erstellt.
procedure TForm1.Button3Click(Sender: TObject); begin end;
Diese Prozedur haben wir dann mit Anweisungen gefüllt. Zufallszahlen werden in Lazarus mit der Funktion Random erzeugt.
//Zufallszahl aussuchen, startet immer bei 0, deshalb +1 Zufallszahl:=Random(SpinEdit2.Value+1);
Danach werden die Variablen auf die Startwerte gesetzt.
//Versuche auf 0 setzen Versuche:=0; //Spielende-Bild ausblenden Image1.Visible:=false; //Texte löschen Label2.Caption:=''; Label3.Caption:='';
Erster Programm-Start
Bei jedem Programm-Start soll gleich diese Prozedur für ein neues Spiel ausgeführt werden, damit alles zum ersten Rateversuch bereit ist.
Lazarus erzeugt wieder eine Prozedur-Rumpf FormCreate, der gefüllt werden kann.
procedure TForm1.FormCreate(Sender: TObject); begin //Zufallszahlen-Generator initialisieren Randomize; //Beim Starten gleich neues Spiel beginnen Button3Click(nil); end;
Die Prozedur Randomize ist wichtig. Wird sie nicht aufgerufen, erzeugt Lazarus bei jedem Programmstart die selben „Zufallszahlen“.
Überprüfung der Eingabe
Die Hauptarbeit findet in der Ereignis-Routine des Raten-Buttons statt. Zuerst werden die Versuche hochgezählt und angezeigt. Dafür greifen wir auf die Eigenschaft Caption des Labels zu.
procedure TForm1.Button1Click(Sender: TObject); var Eingabe : integer; begin //Versuche hochzählen Versuche:=Versuche+1; //und anzeigen Label3.Caption:=IntToStr(Versuche)+'. Versuch:';
Dann wird die eingegebene Zahl überprüft. Wie passt sie zu der geheimen Zufallszahl? Ist die kleiner oder größer oder wurde sie erraten?
//Auswerten der Eingabe zur gesuchten Zahl if SpinEdit1.Value>Zufallszahl then Label2.Caption:='Zahl ist kleiner als '+SpinEdit1.Text; if SpinEdit1.Value<Zufallszahl then Label2.Caption:='Zahl ist größer '+SpinEdit1.Text; if SpinEdit1.Value=Zufallszahl then begin //Zahl gefunden! Label2.Caption:='Richtig!'; //Siegesbild anzeigen Image1.Visible:=true; //Zufallszahl anzeigen Label5.Visible:=true; end;
Dann wird noch alles für den nächsten Rateversuch vorbereitet.
//Eingabefelder zurücksetzen SpinEdit1.Value:=0; //Fokus bleibt im Eingabefeld SpinEdit1.SetFocus; end;
Auflösen
Mit einem Doppelklick auf den Button „Auflösen“ wird die nächte Ereignis-Routine angelegt.
procedure TForm1.Button2Click(Sender: TObject); begin //Auflösen Label2.Caption:='Die richtige Zahl ist '+IntToStr(Zufallszahl); end;
Tastatur-Eingabe
Unsere erste Verbesserung war eine bessere Tastatur-Unterstützung. Statt nur eines Mausklicks auf Raten, sollte auch die Eingabetaste das Gleiche tun.
Das geht mit einer weiteren Ereignis-Routine KeyPress des TSpinEdit’s.
procedure TForm1.SpinEdit1KeyPress(Sender: TObject; var Key: char); begin //Wenn Eingabetaste gedrückt wird, dann wie Mausklick auf Button "Raten" werten if Key=#13 then Button1Click(Sender); end;
Viel Spaß beim Nachprogrammieren!
Links
- Download Lazarus
- Download des Quellcodes: Zahlen raten aus meiner Dropbox
- Lazarus installieren
Sie finden im Download-Ordner auch eine ausführbare Datei dieser Software. Wenn Sie Sicherheitsbedenken haben, lesen Sie bitte die Seite EXE-Dateien und das Internet.
Aw, this was a very nice post. In thought I want to put in writing like this moreover taking time and actual effort to make an excellent article but what can I say I procrastinate alot and not at all seem to get something done. fkggcdfddede
Pingback: Coding for Kids: Guess the number – Tech+Code