Spiele in Lazarus objektorientiert programmieren/Rechnen und Würfeln: Unterschied zwischen den Versionen

Aus ZUM-Unterrichten
main>Peterdauscher
K (8 Versionen importiert)
 
(6 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 13: Zeile 13:
</source>
</source>


Dann existiert überall im Programm diese Zahl, dieses Wort oder dieser Wahrheitswert und man kann aus jeder Methode direkt auf diese Zahl zugreifen. Das ist extrem wichtig, wenn man sich im Spielverlauf Dinge wie etwa den Punktestand des Spielers merken möchte.'''Wichtig''': Umlaute, Leer- oder Sonderzeichen haben in Variablennamen nichts verloren (Ausnahme wieder: der Unterstrich).
Dann existiert überall im Programm diese Zahl, dieses Wort oder dieser Wahrheitswert und man kann aus jeder Methode direkt auf diese Zahl zugreifen. Das ist extrem wichtig, wenn man sich im Spielverlauf Dinge wie etwa den Punktestand des Spielers merken möchte.


Und noch etwas ist wichtig bei der Vergabe von Variablennamen: Diese sollten wirklich beschreiben, welche Information in einer Variable abgespeichert ist. Je „sprechender“ der Variablenname ist, desto leichter ist es für andere (und für einen selbst – vor allem nach einiger Zeit) den Sinn des Programms zu verstehen. Und das ist besonders bei der – praktisch unausweichlichen – Fehlersuche von ganz großer Bedeutung<ref name="ftn3">In Programmierer-Kreisen gibt es das Sprichwort: „Wenn alles gleich geht, sitzt der Fehler tiefer.“</ref>.
'''Wichtig''': Umlaute, Leer- oder Sonderzeichen haben in Variablennamen nichts verloren (Ausnahme wieder: der Unterstrich).
 
Und noch etwas ist wichtig bei der Vergabe von Variablennamen: Diese sollten wirklich beschreiben, welche Information in einer Variable abgespeichert ist. Je „sprechender“ der Variablenname ist, desto leichter ist es für andere (und für einen selbst – vor allem nach einiger Zeit) den Sinn des Programms zu verstehen. Und das ist besonders bei der – praktisch unausweichlichen – Fehlersuche von ganz großer BedeutungIn Programmierer-Kreisen gibt es das Sprichwort: „Wenn alles gleich geht, sitzt der Fehler tiefer."


===  Rechenoperationen ===
===  Rechenoperationen ===
Zeile 21: Zeile 23:
Man kann mit ganzen Zahlen bzw. Integer-Variablen rechnen, wobei die „Rechenzeichen“ für Addition, Subtraktion und Multiplikation gerade +,-,* heißen.  
Man kann mit ganzen Zahlen bzw. Integer-Variablen rechnen, wobei die „Rechenzeichen“ für Addition, Subtraktion und Multiplikation gerade +,-,* heißen.  


Schwierig ist es bei der Division, denn die Division zweier ganzer Zahlen liefert nicht automatisch wieder eine ganze Zahl (etwa 7/2). Damit es hier nicht zu Verwechslungen kommt, heißt die Ganzzahl-Division „div“. <tt>7 div 2</tt> liefert dabei den Wert 3.
Schwierig ist es bei der Division, denn die Division zweier ganzer Zahlen liefert nicht automatisch wieder eine ganze Zahl (etwa 7/2). Damit es hier nicht zu Verwechslungen kommt, heißt die Ganzzahl-Division „div“. <tt>7 div 2</tt> liefert dabei den Wert 3. Wir sind hier sozusagen auf Grundschulniveau: Damals war das Ergebnis der Teilaufgabe ja auch 7:2 = 3 Rest 1.
 
Wir sind hier sozusagen auf Grundschulniveau: Damals war das Ergebnis der Teilaufgabe ja auch 7:2 = 3 Rest 1.


Den Rest kann man übrigens auch berechnen, nämlich mit 7 mod 2.
Den Rest kann man übrigens auch berechnen, nämlich mit 7 mod 2.
Zeile 30: Zeile 30:


Eine Zeile könnte also heißen:
Eine Zeile könnte also heißen:
 
<source lang=pascal>
    QuaderFlaeche:=(Laenge*Breite+Breite*Hoehe+Laenge*Hoehe)*2;
QuaderFlaeche:=(Laenge*Breite+Breite*Hoehe+Laenge*Hoehe)*2;
</source>


===  Zufallszahlen ===
===  Zufallszahlen ===
Zeile 38: Zeile 39:


Die Funktion
Die Funktion
 
<source lang=pascal>
    random(n)
random(n)
</source>


wobei n eine natürliche Zahl ist, liefert eine Zufallszahl zwischen 0 und n-1.  
wobei n eine natürliche Zahl ist, liefert eine Zufallszahl zwischen 0 und n-1.  


Der Befehl
Der Befehl
 
<source lang=pascal>
    Zufallszahl := random(10)
Zufallszahl := random(10)
 
</source>
liefert also eine Zufallszahl zwischen 0 und 9 und speichert diese in der Variable Zufallszahl.
liefert also eine Zufallszahl zwischen 0 und 9 und speichert diese in der Variable Zufallszahl.


Damit die Zufallszahlen bei jedem Programmstart tatsächlich andere sind, muss man allerdings noch beim Start des Programms (Methode zum Ereignis OnCreate des Fensters) den Befehl  
Damit die Zufallszahlen bei jedem Programmstart tatsächlich andere sind, muss man allerdings noch beim Start des Programms (Methode zum Ereignis OnCreate des Fensters) den Befehl  


    randomize;
<source lang=pascal>
randomize;
</source>


hinzufügen.
hinzufügen.
{{Spiele in Lazarus objektorientiert programmieren}}

Aktuelle Version vom 10. August 2019, 06:50 Uhr

Eigene Variablen, Rechnungen und Zufallszahlen

Eigene Variablen

Bisher haben wir immer nur die Eigenschaften von Objekten verändert, die wir vorher auf dem Fenster platziert haben (oder Eigenschaften des Fensters selbst). Bei praktisch allen etwas komplizierteren Spielen ist es aber hilfreich, Zwischenrechnungen durchzuführen und die Ergebnisse in so genannten Variablen zu speichern, die man selbst definiert.

Um eine ganze Zahl mit dem Variablennamen „MeineZahl“ abspeichern zu können, muss man im Abschnitt „var“ ganz oben im Programm angeben:

EineZahl : Integer;
EinWort : String;
Wahr_oder_falsch : Boolean;

Dann existiert überall im Programm diese Zahl, dieses Wort oder dieser Wahrheitswert und man kann aus jeder Methode direkt auf diese Zahl zugreifen. Das ist extrem wichtig, wenn man sich im Spielverlauf Dinge wie etwa den Punktestand des Spielers merken möchte.

Wichtig: Umlaute, Leer- oder Sonderzeichen haben in Variablennamen nichts verloren (Ausnahme wieder: der Unterstrich).

Und noch etwas ist wichtig bei der Vergabe von Variablennamen: Diese sollten wirklich beschreiben, welche Information in einer Variable abgespeichert ist. Je „sprechender“ der Variablenname ist, desto leichter ist es für andere (und für einen selbst – vor allem nach einiger Zeit) den Sinn des Programms zu verstehen. Und das ist besonders bei der – praktisch unausweichlichen – Fehlersuche von ganz großer BedeutungIn Programmierer-Kreisen gibt es das Sprichwort: „Wenn alles gleich geht, sitzt der Fehler tiefer."

Rechenoperationen

Man kann mit ganzen Zahlen bzw. Integer-Variablen rechnen, wobei die „Rechenzeichen“ für Addition, Subtraktion und Multiplikation gerade +,-,* heißen.

Schwierig ist es bei der Division, denn die Division zweier ganzer Zahlen liefert nicht automatisch wieder eine ganze Zahl (etwa 7/2). Damit es hier nicht zu Verwechslungen kommt, heißt die Ganzzahl-Division „div“. 7 div 2 liefert dabei den Wert 3. Wir sind hier sozusagen auf Grundschulniveau: Damals war das Ergebnis der Teilaufgabe ja auch 7:2 = 3 Rest 1.

Den Rest kann man übrigens auch berechnen, nämlich mit 7 mod 2.

Man kann praktisch beliebig komplizierte Rechenausdrücke aus Zahlen und Variablen in Pascal hinschreiben; Pascal beherrscht auch die Punkt-vor-Strich-Rechnung sowie Klammern.

Eine Zeile könnte also heißen:

QuaderFlaeche:=(Laenge*Breite+Breite*Hoehe+Laenge*Hoehe)*2;

Zufallszahlen

Viele Spiele wären extrem langweilig, wenn nicht zufällige Dinge passieren könnten. Deshalb muss eine Programmiersprache, mit der man Spiele programmieren kann, auch Zufallszahlen produzieren können.

Die Funktion

random(n)

wobei n eine natürliche Zahl ist, liefert eine Zufallszahl zwischen 0 und n-1.

Der Befehl

Zufallszahl := random(10)

liefert also eine Zufallszahl zwischen 0 und 9 und speichert diese in der Variable Zufallszahl.

Damit die Zufallszahlen bei jedem Programmstart tatsächlich andere sind, muss man allerdings noch beim Start des Programms (Methode zum Ereignis OnCreate des Fensters) den Befehl

randomize;

hinzufügen.