Gegner

Autor: Jacob Rose

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.

Grid-Klasse

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.

Pattern-Klasse

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.

Gegner

Die blockhafte Bewegung des Gegners funktioniert dadurch, dass er immer:

  1. Eine Bewegungsrichtung vom Pattern abfragt
  2. Seine eigene Position auf dem Quader bestimmt um die Richtigen Vektoren für links, recht,.. zu wählen
  3. Seine nächste Position berechnet
  4. Zwischen seiner jetzigen Position und seiner neuen Position interpoliert

Zurück