Lösung Challenge 10: Crashy Bird

Lösung

Zu Beginn definiert man alle Variablen, die man braucht und setzt diese auf Standardwerte.

  • „hindernisse“ ist das Array, in welchem die Hindernis-Sprites gespeichert werden.
  • „start“ speichert einen booleschen Wert, um das Starten des Spiels zu steuern und zu verhindern, dass das Spiel mehrmals gestartet wird.
  • „score“ speichert die aktuelle Punktzahl.
  • „ticks“ speichert die Schritte und muss zu Beginn auf -1 gesetzt werden.
  • „bird“ ist der Spieler-Sprite. Dieser wird zu Beginn mittig an den Rand positioniert und zur besseren Unterscheidung lässt man das Sprite im 300 Millisekunden Takt blinken.

Wenn man die „A“ Taste drückt, bewegt sich der Vogel nach oben, also wird das Sprite um -1 in y-Richtung geändert. Umgekehrt, wenn man die „B“ Taste drückt, um +1 in y-Richtung, also nach unten.

Mit A+B wird das Spiel gestartet. Nur dann, wenn „start“ auf True steht wird die eigentliche Funktion gestartet. Ebenso wird „start“ gleich auf False gesetzt, damit das Spiel nicht nochmal gestartet werden kann, während es schon läuft.

In der Funktion „Main“ befindet sich eine Endlosschleife. Zu Beginn wird der Wert von „ticks“ um 1 erhöht.

In der Endlosschleife braucht man zuerst eine Schleife, welche überprüft, ob Elemente im Hindernis-Array vorhanden sind und ob diese auf x = 0, also dem linken Rand positioniert sind. Ist das der Fall, müssen sie gelöscht werden.

Da ein Hindernis aus vier Sprites besteht und immer nur zwei Hindernisse gleichzeitig da sind gibt es maximal acht Elemente in dem Array. Innerhalb der Schleife überprüfen wir nach jedem Löschen, ob nurnoch vier Elemente vorhanden sind, was bedeutet, dass das Hindernis überwunden ist und man dafür einen Punkt bekommt.

Als nächstes werden die bestehenden Hindernisse um -1 in x-Richtung bewegt. Die Schleife geht jedes Element einzeln durch und verändert den Wert entsprechend.

Nun werden neue Hindernisse generiert. Die Hindernisse sollen einen gewissen Abstand zueinander haben, daher werden nur dann neue erstellt, wenn die Division der „ticks“ durch drei keinen Rest ergibt.

Innerhalb der Schleife wird zunächst die zufällige freie Stelle im Hindernis ermittelt, welche zwischen null und vier liegt.

Das Hindernis wird mit einer for-Schleife erstellt. Diese läuft fünf Mal (von null bis 4) durch und überprüft bei jedem Durchlauf, ob die aktuell bearbeitete Position ungleich der freien Stelle ist, damit dort kein Sprite platziert wird. An den restlichen Position wird ein Hindernis-Sprite erstellt und dieses am Ende des Arrays gespeichert.

Die letzte Schleife ist dafür zuständig zu überprüfen, ob die Koordinaten des Vogels und eines Hindernisses  übereinstimmen, also ob der Vogel ein Hindernis berührt. Dann ist das Spiel vorbei und der erreichte Punktestand soll angezeigt, kurz gewartet und dann das Spiel neu gestartet werden.

Die eigentliche Endlosschleife wird damit beendet, das Spiel kurz zu pausieren, bevor der Schleifendurchlauf von vorne beginnt. Der Zeitabstand zwischen den Ticks wird hier berechnet. Zu Beginn liegt dieser bei einer Sekunde. Die Zeit wird jedoch pro erreichtem Punkt immer kleiner. Hier können auch eigene Werte und Berechnungen bestimmt werden.

Challenge Master

Ich bin der Challenge Master. Hinter mir verbergen sich die Auszubildenden von Proact Deutschland. Gemeinsam füllen wir diesen Blog mit verschiedenen Projekten, um euch das Coden beizubringen.

 
Kommentare

Noch keine Kommentare vorhanden.

Hinterlassen Sie einen Kommentar