8.6: Hindernisse umschiffen und Anzahl der Leben verwalten
Autoren: | |
Publikation: | 2.10.2016 |
Lernstufe: | 3 |
Übersicht: | Die Schüler erweitern ihr Programm. Sie bauen Hindernisse ein (= neue Figuren). Wenn man gegen diese Hindernisse stößt, verliert man ein Leben (neue Variable "Leben"). Sie verwenden Tests, Schleifen, Variablen und vertiefen den Begriff "Ereignis". |
Angestrebte Kenntnisse: |
|
Dauer: | ca. eine Stunde |
Material: |
Für jede Zweiergruppe:
|
Herkunft: | La main à la pâte, Paris |
Pädagogische Anmerkung
Es kann hilfreich sein, den Schülern zwischendurch immer mal das endgültige Spiel vorzuführen. Das erhöht die Motivation und erinnert die Schüler daran, was noch programmiert werden muss. Sie sollen nicht nachlesen, was im Programm steht, sondern lediglich sehen, wie das Spiel funktioniert.
Um das Spiel noch etwas spannender zu machen, sollen jetzt Hindernisse eingebaut werden: ein Lavasee und eine Sanddüne. Außerdem soll eine weitere Variable eingefügt werden: eine Anzahl "Leben". Der Rover hat zu Beginn des Spiels drei Leben. Wenn er ein Hindernis berührt, verliert er ein Leben und muss zurück zur Basisstation. Das Spiel endet, wenn die Anzahl Leben null beträgt.
Aufgabe 1: Neue Figuren hinzufügen (5 min)
Genauso wie sie es schon mit dem Eis und der Pflanze gemacht haben, laden die Schüler wieder drei neue Figuren hoch: die Basisstation, den Lavasee und die Düne. Alle Figuren werden auf eine Anfangsposition gesetzt (Initialisierung). Wenn sie die Basisstation in die Mitte des Bühnenbilds platzieren, sollten sie den Rover vielleicht etwas verschieben (damit beide zu Spielbeginn nicht übereinander liegen).
Eventuell kann die Lehrerin auf die verschiedenen Ebenen der Figuren hinweisen. Will man zum Beispiel den Rover im Vordergrund haben (sodass er nie verdeckt wird), kann man in der Kategorie "Aussehen" den Befehl "komme nach vorn" heraussuchen. Setzt man diesen Befehl nicht ein, ist immer diejenige Figur weiter oben, die im Figurenbereich weiter rechts steht.
Abb. 1: Scratch-Befehl "komme nach vorn"
Aufgabe 2: Neue Variable "Leben" hinzufügen und ihr ein Anfangswert zuordnen (5 min)
Das Erzeugen der Variablen "Leben" erfolgt wieder analog zur Erzeugung der Variablen "Punkte". Zu Spielbeginn ist der Wert von "Punkte" gleich 3. Diese Initialisierung kann man zum Beispiel direkt unter der Initialisierung des Wertes für die Variable "Punkte" einfügen (Abb. 2).
Abb. 2: Die Variable "Punkte" wird auf 0 und die Variable "Leben" auf 3 gesetzt.
Aufgabe 3: Ein Leben verlieren, wenn der Rover die Lava berührt (30 min)
In der Unterrichtsstunde 8.4 (Objekte sammeln und den Punktestand verwalten) wurde beim Berühren des Eisbrockens oder der Pflanze die Variable "Punkte" um 1 erhöht. Hier soll umgekehrt beim Berühren der Lava oder der Düne die Variable "Leben" um 1 kleiner werden. Wir raten, erst das Ganze für eins der Hindernisse (den Lavasee) durchzuführen, und dann für das andere Hindernis (die Düne) zu wiederholen.
Wie kann man in Scratch subtrahieren?
Die Schüler werden suchen, wie man die Anzahl der Leben um eins verkleinern kann. Man muss dafür in dem Befehl "ändere [Variable] um [--]" negative Zahlen eingeben: in unserem Fall also −1.
Abb. 3: Vorläufiges Skript für die Lava: Von der Variable "Leben" wird 1 subtrahiert.
Dieses Skript hat jedoch noch einen Makel: Wenn der Rover das Hindernis berührt, dauert die Berührung mindestens einige Zehntel Sekunden. Während dieser ganzen Zeit verringert sich die Anzahl der Leben permanent. Man hat nach einigen Sekunden schnell −4000 Leben. Die einzige Möglichkeit, das zu ändern, besteht darin, dass man sofort Rover und Hindernis voneinander trennt.
Wie kann man den Rover an eine andere Stelle setzen?
Es gibt mindestens zwei Möglichkeiten, um den Rover an eine andere Stelle zu setzen:
Möglichkeit 1: Das bisherige Skript für die Lava wird gelöscht, es bleibt nur noch die Initialisierung der Position (Abb. 4 links). Die Schleife, die abfragt, ob Rover und Lava sich berührt haben, und dann die Anzahl der Leben verringert, wird in das Skript des Rovers kopiert. Anschließend kommt noch ein Befehl dazu, der den Rover zum Beispiel in/auf die Basisstation setzt.
Um den Rover zur Basisstation zurückkehren zu lassen, kann man ihm entweder befehlen, zur Position x = 0 und y = 0 zu gehen, oder man befiehlt ihm, zur Position der Figur "Basisstation" zu gehen. Die letzte Lösung hat den Vorteil, dass der Rover auch dann zur Basisstation zurückkehrt, wenn diese nicht in der Bildmitte ist.
Abb. 4: Skripte für die Lava (links) und den Rover (rechts)
Möglichkeit 2: Diese zweite Lösung ist eleganter und praktischer. Das vorläufige Skript für die Lava (Abb. 3) wird beibehalten, es kommt jedoch noch ein Befehl dazu. Es wird eine Nachricht an die Skripte der anderen Figuren geschickt. Im Skript des Rovers bewirkt diese Nachricht, dass er sofort zur Basisstation zurückkehrt. Wie der Name einer Variablen, sollte auch die Betreffzeile einer Nachricht sprechend sein. In unserem Beispiel lautet die Betreffzeile der Nachricht "Hindernis berührt".
Abb. 5: Alternative Skripte für die Lava (links) und den Rover (rechts)
Das Skript der Lava schickt also eine Nachricht an die anderen Skripte. Im Skript des Rovers entspricht der Erhalt dieser Nachricht einem Ereignis, das eine Aktion auslöst (der Rover kehrt zur Basisstation zurück). Die Befehle, mit denen man eine Nachricht verschickt oder eine Aktion auslöst, wenn die Nachricht empfangen wird, finden sich in der Kategorie "Ereignisse".
Pädagogische Anmerkungen
- Eine weitere Lösung wäre, den Rover an dem Hindernis abprallen zu lassen, um die Berührung zu unterbrechen.
- Die zweite Lösung ist deshalb eleganter, weil es den "Ereignischarakter" des Spiels (in einem Spiel passiert etwas) betont. Jedes Mal, wenn etwas passiert, kann ein Skript eine Nachricht an eins oder mehrere andere Skripte schicken. Dem Begriff "Ereignis" sind die Schüler schon begegnet; sie kennen die Ereignisbefehle "Wenn Taste [Pfeil nach oben] gedrückt" oder "Wenn [grüne Flagge] angeklickt". Dass man in einem Programm ein Ereignis auch in einer Nachricht verschicken kann, ist für sie allerdings neu.
- Die erste Methode hat den Vorteil, dass bisherige Programmierkenntnisse wiederholt werden, die zweite führt etwas Neues ein: das Senden und Empfangen von Nachrichten.
- Das Senden und Empfangen von Nachrichten wird später (erneut) verwendet, um das Spiel zu beenden (siehe Unterrichtsstunde 8.7).
Aufgabe 4: Das Gleiche für die Düne durchführen (10 min)
Die Schüler haben erfolgreich das Skript für die Lava programmiert. Jetzt müssen sie nur noch das Ganze für die Düne wiederholen. Dadurch festigen sie die hinzugewonnenen Programmierkenntnisse, insbesondere das Versenden und Empfangen von Nachrichten.
Zusammenfassung
Die Schüler vervollständigen ihre Liste mit den Scratch-Befehlen.
Das Programm, wie es zum Ende dieser Unterrichtsstunde aussehen könnte: rover-spiel-8.6.sb2 (siehe Das Rover-Spiel – die fertigen Skripte).
Letzte Aktualisierung: 29.11.2023