Mit Schleifen haben wir gelernt, bestimmte Ereignisse zu wiederholen, solange eine Bedingung erfüllt ist. Nun möchten wir aber folgendes tun:
Der Spieler soll eine Spur von fünf Sternen legen.
Dies wäre natürlich recht einfach, wenn wir putStar()
und move()
fünfmal aufrufen, jedoch wenig elegant. Schöner wäre es, wenn unser Spieler mitzählt, wie viele Sterne er bereits abgelegt hat. Damit der Spieler zählen kann, braucht er ein “Gedächtnis”, d.h. konkret einen Speicher. Beim Programmieren sind die Speicherplätze durch Variablen ansprechbar.
Zählen mit Variablen
var i; i = 0; while (i < 5) { putStar(); move(); i = i + 1; }
Erklärungen
- Mit
var i;
wird Speicherplatz für eine Variable mit dem Nameni
reserviert. Man sagt: Die Variable i wird deklariert. - Durch
i = 0;
wird der Variablei
der Wert0
zugewiesen. Da es die erste Wertzuweisung für die Variable ist, sagt man auch: Die Variable i wird initialisiert. - Deklaration und Initialisierung werden meistens zusammengefasst wie folgt:
var i = 0;
- Für die Bedingung
i < 5
wird der Vergleichsoperator<
benutzt (weitere Vergleichsoperatoren siehe Tabelle weiter unten). - Bei der Zuweisung
i = i + 1;
muss man zuerst den rechten Teil anschauen. Es bedeutet: “Nimm den aktuellen Wert von i, addiere 1 dazu und speichere den neuen Wert wieder unter dem Namen i ab.”
Weitere Hinweise zu Variablen
- Es ist möglich, eine Variable mit einem endgültigen, unveränderlichen Wert zu versehen, d.h. sie zu einer Konstanten zu machen:
const anzahl = 5;
Dann könnte man im obigen Programmbeispielwhile (i < anzahl)
schreiben. - Variablen schreibt man mit einem Kleinbuchstaben, wie die Methodennamen.
Datentypen in Dart
In Dart gibt es ein paar vordefinierte Datentypen. Mit Datentypen gibt man an, was in eine Variable gespeichert wird. Diese Angaben sind in Dart freiwillig. Das heisst, man kann alle Variablen einfach mit var
deklarieren, wie wir es oben gemacht haben. Ich empfehle aber, meistens den Datentyp anzugeben. Dies hilft Fehler früh zu erkennen, da Dart Hinweise geben wird, wenn wir versuchen einen falschen Datentyp in eine Variable zu speichern.
Später werden wir unsere eigenen Klassen erstellen. Jetzt schauen wir uns zuerst die Grunddatentypen von Dart an.
Für weitere Informationen zu den Grunddatentypen siehe Dart Up and Running - Chapter 2: Built-in types.
Typ | Beschreibung | Beispiel |
---|---|---|
int |
Ganze Zahlen | 1 , 2 , -1233123 |
double |
Fliesskommazahlen | 0.5 , -333.234 |
String |
Text in einer beliebigen Länge. Text wird immer zwischen einfache oder doppelte Anführungszeichen gestellt. | 'Ich bin ein Text' oder "Ich bin auch ein Text" |
bool |
Ein Boolean ist ein Wahrheitswert, der entweder wahr oder falsch sein kann. | true oder false |
List |
Eine Sammlung von Objekten. Wird manchmal auch Array genannt. | [1, 2, 3] |
Map |
In einer Map kann man Objekte speichern als Schlüssel und Werte. | { 'schlüssel-1': 'wert-1', 'schlüssel-2': 'wert-2' } |
Vergleichsoperatoren
Folgende Operatoren können in Dart für Vergleiche verwendet werden. Das Ergebnis ist jeweils ein bool
, das heisst entweder true
oder false
.
Operator | Beschreibung | Beispiel |
---|---|---|
== |
gleich | k == 2 |
!= |
ungleich | k != 12 |
> |
grösser als | k > 67 |
< |
kleiner als | k < 12 |
>= |
grösser als oder gleich | k >= 45 |
<= |
kleiner als oder gleich | k <= 23 |
Achtung: Der Vergleich auf “Gleichheit” hat immer zwei Gleichheitszeichen ==
. Mit einem einzelnen Gleichheitszeichen =
geschieht eine Zuweisung!
Arithmetische Operatoren
Zur Berechnung können folgende arithmetische Operatoren verwendet werden:
Operator | Beschreibung | Beispiel |
---|---|---|
+ |
Addition | h = w + 34 |
- |
Subtraktion | y = 3.4 – t |
* |
Multiplikation | z = h * 3.56 |
/ |
Division | d = m / v |
% |
Modulo (liefert den Rest der Division) | count = w % 2 |
AUFGABE 4.01: Counting Stars
Der Spieler soll von links nach rechts gehen und dabei die Sterne zählen.
Hinweise:
- Definieren und initialisieren Sie eine Variable, zum Beispiel mit
int count = 0;
- Schreiben Sie darunter eine Schleife, in der die Variable immer um eins erhöht wird:
count = count + 1;
- Die Variable sollte nur erhöht werden, wenn der Spieler auf einem Stern ist.
- Am Schluss soll der Spieler angeben, wie viele Sterne er gezählt hat. Mit
${count}
können wir die Variable in einen Text einfügen:
say('Ich habe ${count} Sterne gefunden.');
AUFGABE 4.02: Cleaning Up
Der Spieler soll alle Sterne wegräumen.
Hinweise:
- Sie können den Baum verwenden, um herauszufinden, wann der Spieler am Ende angekommen ist mit einer Schleife
while (!treeFront()) {...}
. - Entfernen Sie zuerst die Sterne auf der ersten Zeile.
- Drehen Sie am Rand und entfernen Sie die Sterne auf der zweiten Zeile.
- Führen Sie nun eine
bool
-Variable ein, damit sich der Spieler merkt, in welche Richtung er läuft, zum Beispiel so:
bool goingRight = true;
- Mit dieser Variable können Sie nun herausfinden, ob der Spieler am rechten oder am linken Rand angekommen ist und entsprechend umdrehen muss. Ein
bool
kann wie folgt in einer Bedingung verwendet werden:
if (goingRight) {...}
- Denken Sie daran, die neue Richtung in die Variable zu setzen, sobald sich der Spieler dreht:
goingRight = false;
- Verbesserung: Damit der Code übersichtlicher wird, könnten Sie zwei Funktionen machen zum Umdrehen:
turnAroundRight()
undturnAroundLeft()
.
AUFGABE 4.03: Inverting
Die Welt hat eine quadratische Fläche und am Schluss einen Baum. Innerhalb der Fläche ist ein Muster aus Sternen gelegt, das vom Spieler invertiert (=umgedreht) werden soll. Achten Sie darauf, dass Ihr Code übersichtlich bleibt und lagern Sie allenfalls Teile in eigene Funktionen aus.
AUFGABE 4.04: Chessboard
Die Welt hat eine quadratische Fläche und am Schluss einen Baum. Innerhalb der Fläche soll ein schachbrettartiges Muster aus Sternen gelegt werden.
AUFGABE 4.05 (schwierig): Tree Line
In dieser Welt hat es verschiedene Baumreihen. Der Spieler soll nun die Länge (in Anzahl Bäumen) der längsten Baumreihe ermitteln und ausgeben. Zwischen den Baumreihen ist immer mindestens ein Feld Platz. Auf dem letzten Feld liegt ein Stern.
Wie weiter?
Fahren Sie weiter mit Teil 5: Funktionen
Quellen
Planet Cute Bilder stammen von Daniel Cook (Lostgarden.com), veröffentlicht unter CC BY 3.0.
Oleg Yadrov hat die “Planet Cute” Bilder weiterentwickelt und mir zur Verfügung gestellt. Optimiert wurden sie mit dem grossartigen TexturePacker.
Einige Übungen in Hello Dart
sind inspiriert von Kara. Kara wurde entwickelt von Jürg Nievergelt, Werner Hartmann, Raimond Reichert und anderen.