11.2.11 Listen


Im letzten Kapitel wurden einige Blumen auf eine Wiese gesetzt. Wenn man sehr viele Blumen möchte, dann ist es mühsam diese von Hand zu programmieren. Schön wäre es, wenn mit einer Wiederholungsschleife die Blumen auf der Wiese verteilt werden könnten.

Das kann man mit zwei Wiederholungsschleifen machen, die ineinander geschachtelt sind:

Laden Sie das Programm Blumenwiese und sehen Sie sich den Aufbau genau an.


Schön wäre es, wenn die Blumen auf der Wiese zufällig verteilt wären. Das kann man mit Hilfe eines Zufallsgenerators programmieren:

Laden Sie das Programm Blumenwiese

Die Blumen werden an zufälligen Orten gezeichnet. Das Problem ist jetzt aber, dass bei jedem Durchlauf durch den Block "draw" immer neue Zufallszahlen erzeugt werden und die Wiese deswegen ständig in Bewegung ist.


Damit die Blumen zufällig auf der Wiese verteilt werden und in der Animation aber immer an der gleichen Stelle bleiben, müssen die Koordinaten-Daten im Setup-Block (der nur ein einziges Mal ausgeführt wird) per Zufall erzeugt und dann in einer Daten-Liste gespeichert werden. Im Draw-Block können die Koordinaten der Blumen aus der Liste gelesen und dann immer an der gleichen Stelle gezeichnet werden. Bearbeiten Sie das Programm "Blumenwiese" wie folgt:

  • Erzeugen Sie eine Variable xKoordinaten und eine Variable yKoordinaten und legen jeweils eine leere Liste an. Ergänzen Sie dazu den Setup-Block wie folgt:

  • Die Listen sollen jetzt jeweils mit 25 Zufallszahlen gefüllt werden. Ergänzen Sie dazu den Setup-Block wie folgt:

Beim Programmstart werden die Listen xKoordinaten und yKoordinaten mit jeweils 25 Zufallszahlen befüllt.

Im Draw-Block werden jetzt die Zahlenwerte aus diesen Listen verwendet um die Blumen an zufälligen Orten auf der Zeichnefläche zu zeichnen. Ergänzen Sie dazu den Draw-Block wie folgt:

Hier können Sie das Programm laden: Zufällige Blumenwiese.

Durch die Trennung von Daten und Grafik können die Blumen-Orte jetzt zufällig erzeugt, aber unverändert gezeichnet werden.

Im nächsten Beispiel werden Worte in einer Liste gespeichert und an zufälligen Positionen mit einer zufälligen Farbe ausgegeben.

Dazu werden zuerst 10 Worte des Lorem-Ipsum-Generators in einer Liste gespeichert und damit die Texte sich nicht zu schnell ändern, wird die Framerate auf 1 Frame pro Sekunde gesetzt:

Die Liste wird dann mit Hilfe einer Schleife durchlaufen und jedes eingetrage Wort wird mit einer zufälligen Farbe an einer zufälligen Position auf dem Bildschirm ausgegeben.

Laden Sie das Programm WortArt und sehen Sie sich den Aufbau genau an.

Jetzt soll es schneien. Im ersten Beispiel wird eine einzelne Schneeflocke animiert auf der Zeichenfläche vom Himmel fallen. Die Position der Schneeflocke wird mit einer x-Koordinate und einer y-Koordinate gespeichert:

  • Die y-Koordinate wird auf den Wert 0 gesetzt, damit die Schneeflocke ganz oben startet.
  • Als x-Koordinate wird die Mitte der Zeichenfläche gesetzt.

Die Anweisungen im Block "draw" werden in jedem Frame (also mehr als 30 Mal pro Sekunde) ausgeführt. Damit der Eindruck einer Bewegung entsteht, wird die y-Koordinate in jedem Frame um 1 vergrößert, die Schneeflocke fällt also animiert nach unten. Um die Bewegung etwas realistischer aussehen zu lassen, wird die x-Koordinate in jedem Frame zufällig zwischen -0.3 und 0.3 verändert.

Laden Sie das Programm Eine Schneeflocke und sehen Sie sich den Aufbau genau an.


Wenn mehr als eine Schneeflocke fallen sollen, könnte man das Programm wie folgt verändern:

Eine solche Art der Programmierung nennt man Spaghetti-Code, da man in einem langen Code alles per Hand tippt. Das muss effizienter gehen.


Die x- und y-Koordinate von jeder Schneeflocke werden in Listen gespeichert.

Für die x-Koordinate der Schneeflocken wird die Liste schneeflockeXKoord angelegt. Für die y-Koordinate der Schneeflocken wird die Liste schneeflockeYKoord angelegt.

Wenn ein neuer Frame erzeugt wird, wird ein neues Koordinatenpaar für eine einzige neue Schneeflocke erzeugt. Dabei wird die y-Koordinate auf 0 gesetzt, damit die Schneeflocke oben startet. Die x-Koordinate wird auf einen Zufallswert zwischen 0 und der Breite der Zeichenfläche gesetzt. Da die Operation "draw" sehr oft pro Sekunde ausgeführt wird (mehr als 30 Mal), werden in jeder Sekunde viele neue Schneeflocken erzeugt.

Die Einträge in einer Liste werden durchnummeriert (jeder Eintrag hat einen bestimmten Index). Die x-Koordinate, welche an der gleichen Stelle mit dem gleichen Index in der Liste gespeichert ist wie die y-Koordinate in der anderen Liste, gehören zusammen und bilden die Koordinate einer Schneeflocke.

Sobald eine Schneeflocke den unteren Rand der Zeichenfläche erreicht hat, wird sie gelöscht, damit der Speicher des Computers nicht voll läuft und die Animation ins Stocken gerät. Dazu wird das letzte Element z.B. aus der Liste schneeflockeYKoord genommen und geprüft, ob der Wert größer ist als die Höhe der Zeichenfläche. Wenn die Bedingung erfüllt ist, werden die letzten Koordinaten aus beiden Listen gelöscht, denn diese zusammen bilden ja die Koordinate der ältesten Schneeflocke.


Schließlich sollen die Schneeflocken gezeichnet werden. Dazu durchläuft man mit Hilfe einer Schleife beide Koordinaten-Listen von 1 bis zum Ende der Liste:

  • Für den aktuellen Index wird die y-Koordinate um 1 vergrößert, damit die Schneeflocke in jedem Frame einen Pixel nach unten fällt und der Wert der y-Koordinate in der Liste wird überschrieben.
  • Für den aktuellen Index wird die x-Koordinate um einen Wert zwischen -0.3 und 0.3 verändert, damit die Bewegung etwas lebendiger aussieht und der Wert der x-Koordinate in der Liste wird überschrieben.

Damit können die Schneeflocken fallen...

Laden Sie das Programm Es schneit und sehen Sie sich den Aufbau genau an.


  • Erstellen Sie ein kleines Projekt, in welchem Sie Daten in einer Liste speichern und diese Daten dann nutzen.