Erstaunlicherweise war die größte Herausforderung beim Erstellen der Gegner
Klasse genauso wie beim Spieler die Bewegungs.
Das Ziel war es hier die Bewegung der Gegner aus dem Originalspiel
in 3d zu übertragen.
In Space-Invaders bewegen sich die Gegner immer abwechselnd von der einen Seite zur anderen
bis sie dort angekommen sind um im nächsten Schritt eine Reihe weiter nach Vorne
in Richtung Spieler voran zuschreiten.
Die Linien auf denen sich die Gegner im 2d-Raum bewegen, habe ich im 3d-Raum durch selbst definierte
Quader ersetzt. Somit bewegen sich die Gegner einmal in einem Rechteck um den Spieler herum
und gehen danach in den nächsten Quader. Diese Quader werden von außen nach innen immer kleiner
und der innerste Quader entspricht dem Bewegungsbereich des Spielers. Ist dieser erreicht heißt es
Game-Over
Der komplexe Bewegungsablauf wird intern in mehrere Klassen aufgeteilt die sich untereinander die Arbeit teilen.
Die Erste von ihnen ist die Grid-Klasse, gefolgt von der Pattern-Klasse,
und letztendlich dem Gegner und seiner internen Methode.
Die Grid-Klasse speichert die vereinfachte Position aller Gegner und besondere Koordinaten wie zum Beispiel die Eckpunkte der Quader oder die Startposition der Gegner. Dies vereinfacht die Abfragen der Pattern-Klasse, welches auf das Grid zugreift um zu bestimmen, welche Bewegungsart als nächstes durchgeführt werden soll.
Die Pattern-Klasse stellt eine Abstraktion des Bewegungsablaufs des Gegners dar. In ihr wurden zuerst einfache Bewegungsarten definiert wie links, rechts, vorne, drehen... die dann benutzt werden um ein Bewegungsmuster zu beschreiben. Das einfachste Beispiel ist:
Gehe immer nach links bis du eine Ecke erreichts, dann drehe dich und mache weiter. Sobald du wieder deine Startposition erreicht hast bewege dich eine Reihe nach vorne. Wiederhole dies solange bis du den innersten Quader erreicht hast.
Die blockhafte Bewegung des Gegners funktioniert dadurch, dass er immer: