Die folgende Animation besteht aus 200 Bildern, die nacheinander abgespielt werden, wie ein Film.

Do Now!
Diskutieren Sie zu zweit: Wie könnte der Film aufgebaut sein, um diese Bewegung herzustellen? Schreiben Sie mindestens vier Schritte auf Papier auf.
Ein gleichbleibender Ball liegt auf einer unsichtbaren, immer höher werdenden Grafik, z. B. ein transparentes Rechteck oder eine Ellipse der Breite 0.
Hier sehen Sie fünf Zwischenschritte, wobei der (weisse) Sockel zu Debugging-Zwecken sichtbar ist:
Lösungsgrafiken anzeigen
Arbeitsschritte
Um diese Animation herzustellen, sollte man folgende Schritte einhalten:
- (Farb-) Konstanten festlegen
- Framefunktion Eine erste Funktion verfassen, die die Figur im momentanen Zustand zeichnet und diese als immer gleichgrosse Grafik zurückgibt, also eigentlich die einzelnen Frames eines Films.
- Listenfunktion Eine zweite Funktion verfassen, die diese Figurpositionen (oder -konfigurationen) zu einer Liste von Grafiken vereint und zurückgibt. Zusatzschritt Liste anpassen: Liste verändern, sodass der Ball steigt UND sinkt.
- Abspielen Mit dem Ausgabebefehl show_animation die Grafikliste als Film abspielen.
1. Konstanten
2. Einzelne Frames
Your Task!
Ergänzen Sie folgende Funktion, sodass die Testaufrufe genau die fünf Lösungsgrafiken ausgeben. pos_y gibt die Distanz des Balls zum 'Boden' an.
Your Task!
Verstecken Sie oben noch das Positionsviereck, in der Animation ist es ja nicht sichtbar.
3. Filmfunktion
a. Erstellen
Your Task!
Erstellen Sie eine neue Filmfunktion, die 200 Bilder des (immer neu positionierten) Balls erstellt und diese in eine Liste von Grafiken einfügt. Diese Liste von Grafiken ist der Rückgabewert der Filmfunktion. So kann dann die Liste von Grafiken als Animation abgespielt werden.
- Filmfunktion, die eine Grösse entgegennimmt und eine Liste von Grafiken zurückgibt
-> list[Graphic]
- Akkumulator als leere Liste erstellen, z. B.
film oder frame_liste
- in einer for-Schleife die Liste mit den Grafiken der sich bewegenden Figur füllen
- die Grafikliste zurückgeben
- mit show_animation die Filmfunktion aufrufen und erhaltene Grafikliste als Film abspielen
HOEHE - hoehe
HOEHE und hoehe sind zwei verschiedene Variablen: HOEHE ist eine Konstante und beinhaltet einen unveränderbaren Wert, hoehe einen veränderbaren Wert, hier sogar als Parameter einer Funktion. Dies ist die stilistische Konvention in Python, um zwischen veränderbaren (kleingeschriebenen) und unveränderbaren (grossgeschriebenen) Werten zu unterscheiden.
Typischer Fehler: keine Animation
Der Code wird ohne Fehlermeldung ausgeführt, es scheint alles zu stimmen, aber der Ball bewegt sich nicht. → Überprüfen Sie die Einzüge der return-Zeile: Sie soll sich in der Funktionsdefinition befinden, aber ausserhalb der Schleife.
b. Liste verändern
Umkehren mit [::-1]
Der Ball steigt nun, soll aber auch wieder gleichmässig sinken. Dazu kehren wir die bereits existierende Grafikliste einfach um und hängen dann beide Listen zusammen (Konkatenation). Sie kennen bereits die passenden Befehle aus der Aktivität Pythonlisten.
Beispiel
print([1, 2, 3][::-1]) ergibt [3, 2, 1].
Your Task!
Rufen Sie die Funktion steigender_ball auf und kehren Sie die daraus resultierende Liste um.
Aneinanderhängen mit +
Your Task!
Listen aneinanderhängen Erstellen Sie nun in der Funktion ball_steigend_fallend eine Liste, um eine Animation mit dem endlos steigenden und sinkenden Ball zu erzeugen. Rufen Sie dazu zweimal die Funktion steigender_ball, kehren Sie eine davon um und hängen Sie beide zusammen.

Toolbox
Falls Sie wieder einmal etwas Rundes steigen und fallen lassen möchten, dann können Sie diese Funktion wiederverwenden:
Your Task!
Fügen Sie diese Funktion Ihrer Toolbox hinzu.
Weitere Aufgaben
Your Task!
Was passiert eigentlich, wenn Sie die Konstante HOEHE anders setzen, z. B. 50, 100 oder 400? Überprüfen Sie in Ihrem Code oben.
Your Task!
Lassen Sie den Ball nicht gleichmässig steigen und fallen, sondern wie unter Schwerkraft (Beschleunigung).
Was Sie geübt und gelernt haben
Allgemein
- Sie können bestehende Programme sinnvoll abändern und erweitern.
- Sie können Probleme lösen, indem Sie diese in Teilprobleme zerlegen.
- Sie können Datentypen und -strukturen sinnvoll einsetzen.
- Sie können Funktionen in Ihre eigene Bibliothek aufnehmen.
Python
- Sie können Listen in Schleifen neue Elemente hinzufügen.
- Sie können Funktionen in Schleifen mit verschiedenen Argumenten, z. B.
height für die Funktion rectangle, aufrufen, um sich leicht ändernde Elemente zu erstellen.
- Sie können Listen umkehren und konkatenieren.
PyTamaro
- Sie können show_animation verwenden, um Listen von Grafiken als Animation auszugeben.
- Sie können Frames einer Animation auf eine einheitliche Grösse bringen.