Greenfoot-Roadkill

Ein einfaches und doch recht interessantes Spiel, das sich mit den bisher erworbenen Programmierkenntnissen umsetzen lässt.

MATERIALIEN

 

Die Kurzfassung: Ein Frosch muss eine vielbefahrene Strasse überqueren, um in den Teich auf der anderen Seite zu gelangen. Der Spieler steuert den Frosch mit den Pfeiltasten – das Spiel ist gewonnen, wenn der Teich erreicht ist, verloren, wenn der Frosch unterwegs überfahren wird.

Quelle: OInf.ch

Aufgabe

In Roadkill_vorlage.zip finden Sie eine Version des Spiels, die zwar schon alle wichtigen Elemente enthält, aber noch nicht ganz funktionstüchtig ist. Ihre Aufgabe ist es, die noch fehlenden Code-Teile einzufügen, so dass man das Spiel wirklich spielen kann.

Für die Vervollständigung des Spiels können Sie sich am existierenden Code orientieren (beachten Sie auch die Kommentare im Code). Weitere Anleitung und Anregungen für zusätzliche Weiterentwicklungsschritte finden Sie weiter unten auf dieser Seite. 

Anleitung Roadkill

Öffnen Sie die (entzippte) Vorlage in Greenfoot. Sie können das Spiel auch gleich mal starten (mit «Run») und ausprobieren: Leider funktioniert beim Frosch momentan nur der Rückwärtsgang («Pfeil nach unten»-Taste).

Um das Spiel spielbar zu machen, müssen die folgenden drei Dinge umgesetzt werden:

  1. Der Frosch kann zwar schon rückwärts laufen, aber noch nicht vorwärts. Fügen Sie Code ein, der den Frosch beim Drücken der nach oben gerichteten Pfeiltaste um 80 Pixel vorwärts bewegt. Schauen Sie sich dazu die act()-Methode der Frosch-Klasse an, finden Sie heraus, wie das mit dem rückwärts Hüpfen funktioniert, und ergänzen Sie entsprechend für die Vorwärtsbewegung.
    → Dann gleich ausprobieren und schauen, wie der Frosch auf das Erreichen des Teichs reagiert.
  2. Die drei Autos stehen zwar schon auf ihrer jeweiligen Fahrbahn, sie bewegen sich aber noch nicht. Mit move(x); kann ich einem Actor sagen, dass er sich um x Pixel bewegen soll (s. Frosch), wobei x eine Ganzzahl sein muss (negative Ganzzahl → bewegt den Actor rückwärts). Damit es beständig Verkehr gibt, sollen Autos, die das Ende der Strasse erreicht haben, wieder an den Anfang der Strasse gesetzt werden und somit von vorn anfangen.
    Die act()-Methode von Car1 soll also das folgende tun (kann man fast direkt in Code übersetzen):
    Wenn der rechte Rand der Welt erreicht ist, setze das Auto an den linken Rand der Welt, sonst bewege das Auto um 10 Pixel nach vorne (=rechts). Car3 braucht identischen Code, für Car2 soll die Bewegung von rechts nach links gehen. Hinweise dazu, wie man den Rand der Welt erkennt oder den Actor an eine bestimmte Stelle in der Welt setzt, finden Sie als Kommentar in den Car-Klassen.
  3. Als letztes muss noch dafür gesorgt werden, dass der Frosch nicht einfach so zwischen den Autos durchspazieren kann, sondern auch wirklich überfahren wird, wenn er mit einem Auto kollidiert. Dazu müssen bei jedem Aufruf der act()-Methode des Froschs die folgenden Dinge geschehen:
    (a) Herausfinden, ob sich der Frosch mit einem Auto überschneidet
    (b) Falls ja: das Bild des Froschs zu “frogdead.png” ändern und
    (c) die Instanzvariable gameOver auf true setzen (finden Sie heraus, was das bewirkt)

    Wenn Sie sich die act()-Methode des Froschs anschauen, werden Sie feststellen, dass genau diese drei Schritte schon benutzt werden; (a) um herauszufinden, ob der Frosch den Teich erreicht hat, (b) dann ggf. das Bild zu ändern, und (c) das Spiel zu beenden. Dieser Code muss nur kopiert und minimal angepasst werden, um die Reaktion des Frosches auf einen Zusammenstoss mit einem der drei Cars zu definieren.

Eigentlich sollten Sie jetzt ein funktionierendes Spiel haben und können sich ein paar Minuten gönnen, um es auszuprobieren (Neustart mit «Reset», ggf. mit «Speed» die Schwierigkeit anpassen).

Sie könnten aber auch anfangen, weitere Verbesserungen in das Spiel einzubauen, z.B.:

  • Autos bewegen sich mit unterschiedlichen Geschwindigkeiten.
  • Immer wenn ein Auto an den Beginn der Strasse gesetzt wird, bekommt es eine neue Geschwindigkeit (Zufallswert).
  • Autos werden auch auf der Strasse mal langsamer, oder bleiben für eine kurze Weile stehen.
  • Breitere Strasse; mehr Autos, die auch mal (zufällig?) die Spur wechseln.
  • Autos, die sich begegnen, bauen einen Unfall und kegeln sich gegenseitig aus der Welt.
  • Der Frosch kann einen Helm einsammeln, der ihn gegen einen Zusammenstoss mit einem Auto immun macht.
  • Versuchen Sie es auch einmal mit eigenen Ideen!