Inhaltsverzeichnis

Spieleprogrammierung in Jgst. 9

Der bayerische Lehrplan der Jahrgangsstufe 9 sieht noch keine Objektreferenzen in Attributen vor. Dies schränkt die Programmierung umfangreicherer Spiele deutlich ein, mit etwas Geschick kann man aber doch zu ansprechenden Ergebnissen kommen.
Strategien:

  • Verwendung der Processing-API: Die Hauptklasse des Programms erbt von der Klasse PAppplet und überschreibt deren Methoden setup (wird 1-mal zu Beginn aufgerufen) und draw (wird anschließend 30-mal pro Sekunde aufgerufen). Bei jedem Aufruf von draw wird der Zeichenbereich gelöscht und muss komplett neu gezeichnet werden. Es gibt keine Klassen für graphische Objekte, sondern nur Zeichen-Methoden der Klasse PApplet wie circle, rectangle usw. Der Zustand des Programms kann daher komplett in Attributen mit primitiven Datentypen gespeichert werden. Beispiele dafür finden Sie im Klett-Buch, zudem hier eine Einführung in die Processin-Programierung mit der Online-IDE.

  • Verwendung der Graphics and Games-API des Cornelsen-Verlages: Zentraler Angelpunkt ist hier die Klasse Figur. Erbt man von ihr, so kann man durch Überschreiben der Methoden AktionAusführen (wird 30-mal pro Sekunde aufgerufen) die Figur animieren und durch Überschreiben der Methoden TasteGedrückt und MausGeklickt auf Tastatur- und Mauseingaben reagieren. Die Interaktion mit anderen graphischen Objekten geschieht über die Methoden Berührt() und Berührt(String farbe). Sie geben genau dann true zurück, wenn die Figur irgendein graphisches Objekt berührt bzw. eines mit der angegebenen Farbe. Hier eine Beschreibung, wie sich die Graphics and Games-API in der Online-IDE nutzen lässt.

  • Verwendung von Greenfoot: Jedes graphische Objekt besitzt eine Methode act, die 60-mal pro Sekunde aufgerufen wird, sowie Methoden zur Abfrage von Tastatur und Maus (isKeyDown, isKeyUp, …). Diese Ideen haben die graphischen Klassen der Online-IDE übernommen, sie sind aber deutlich umfangreicher als die Pendants in Greenfoot und nicht vollständig kompatibel.

  • Verwendung der Graphik-API der Online-IDE: Jede graphische Klasse erbt von der Klasse Actor. Sie besitzt eine überschreibbare Methode act, die 30-mal pro Sekunde aufgerufen wird sowie Methoden onKeyDown, onMouseMove, usw. zum Reagieren auf Tastatur- und Mausereignisse. Zudem lässt sich der Status der Tasten auch mit isKeyDown(String taste) jederzeit abfragen. Die Interaktion mit anderen graphischen Objekten gelingt mit der Methode collidesWithAnyShape(), die genau dann true zurückgibt, wenn das graphische Objekt ein anderes berührt.

Verwendung der Grafikklassen der Online-IDE

1. Spiel "Spacejunk" von Jochen Schmitt (Gymnasium Veitshöchheim)

Auf der Seite https://info-am-gym.de/java/spacejunk.html zeigt Herr Schmitt seinen Schülerinnen und Schülern in vielen kleinen, liebevoll und detailreich beschriebenen Schritten, wie sie selbst ein kleines Multiplayer-Spiel programmieren können. Nach jedem größeren Schritt kann man den aktuellen Stand des Spiels ausprobieren und selbst verändern. Zudem gibt es immer wieder kleine interaktive Tests, mit denen die Schülerinnen und Schüler ihren Lernfortschritt überprüfen können.
Sehr sehenswert!

2. Pong

Die Klassen Ball und Schläger stehen in keiner Beziehung zueinander: Der Ball erkennt mit der Methode collidesWithAnyShape, ob er mit einem der beiden Schläger zusammenprallt, an der y-Koordinate, ob er den oberen/unteren Rand berührt und an der x-Koordinate, ob ein Tor geschossen wurde.

3. Hunter Game

Die Idee zu diesem Spiel kommt von Frau Dr. Siglinde Voss. Ein ähnliches Spiel auf Basis des Processing Frameworks findet sich im Klett-Buch.

Wie im Beispiel Pong oben haben auch hier die Klassen Hunter, Prey und Bomb keine Beziehung zueinander. Sowohl die Prey-Objekte als auch die Bomb-Objekte erkennen mit der Methode collidesWithAnyShape(), ob sie mit dem Hunter-Objekt kollidieren. Das Prey-Objekt zählt ggf. den Punktestand hoch und erzeugt neue Bomb-Objekte.
Das ganze funktioniert natürlich nur, wenn das Prey-Objekt und die Bomben nur dorthin gesetzt werden wo noch nichts liegt. Dies wird durch die Methode moveToRandomLocation in beiden Klassen bewirkt.