AlienJump

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Dieses Projekt wurde während des Wintersemesters 2019/2020 realisiert und ist ein interaktives Jump & Run Spiel.

Konzept

Der Spieler steuert ein Alien mit seinen Körperbewegungen durch das All. Er muss Asteroiden ausweichen und Feinde, in Form von Ufos, durch Schreien vertreiben.

Umsetzung

Technische Informationen:

  • Betriebssystem: macOS High Sierra 10.13.6
  • Open Frameworks Version: v0.10.1
  • Verwendete Addons: OpenCV
Aufbau.png

Video Input & Körper Erkennung

Die Körper Erkennung ist ein wichtiger Punkt dieses Projekts. Das Ziel ist den höchsten Punkt des Körpers mit festen Trigger Linien zu vergleichen, um zu bestimmen, ob der Character springen oder sich ducken muss. Deshalb muss die Erkennung des Körpers des Spielers so genau und robust wie möglich sein. Man bekommt zuerst die Szene mit einer Kamera. Dieses Video wird in Grauwerte umgewandelt, um die Verarbeitung zu erleichtern. Dann entfernt man den Hintergrund (Backgroundsubtraction), indem man den vorher aufgenommenen Hintergrund von dem aktuellen Bild subtrahiert. So bekommt man ein Video, welches die sich ändernden Objekte enthält. Von diesen Objekten wird der höchste Punkt in einer Variable gespeichert und mit den Triggern verglichen.

Bildschirmfoto 2019-12-11 um 15.25.17.png

Höchster Pixel

Den höchsten Pixel erhält man, indem man:

  • Das Differenzen-Video binarisiert
  • Das binarisiert Video über erode() & dilate() von Rauschen & unwichtigen Informationen befreit
  • Die Pixel des aktuellen Frames von oben nach unten durchgeht und sich die Höhe des ersten ändernden Pixels merkt

Anmerkung:

  • Vorher wurde mit dem Contour-Finder das größte sich bewegende Objekt ermittelt. Auf dieses wurde dann ein Viereck gemappt, dessen Höhe dann für die Vergleichsoperationen benutzt wurde. Da dieses Vorgehen sehr störungsanfällig war und auf Änderungen sehr empfindlich reagiert hat, wurde stattdessen der höchste Pixel benutzt
  • Außerdem wurde für ein optimales Resultat eine externe Webcam angeschlossen, deren Blende nicht automatisch ans Objekt angepasst wird.

Audio Input

Über das Device Mikrofon erhält man den Audio Input. Wobei nur dessen Intensität analysiert wird, diese wird mit einem Triggerwert verglichen. Wenn dieser überschritten wird, ändern die Feinde ihre Flugrichtung.

Grafischer Output

  • Bewegung der Charaktere:

Wie oben bereits erwähnt, wird die Bewegung des Menschen auf das Alien (Main Charakter) übertragen. Z.B. wird die obere Triggerlinie berührt, wird die Methode jump() aufgerufen, welche bei jedem update() die y-Kooordinate des Aliens um -3 nach oben verschiebt. Zurückschließend wird beim Berühren der unteren Triggerlinie duck() aufgerufen, bei der in der update() Methode die y-Kooordinate des Aliens um +3 nach unten verschoben wird. Die Hindernisse bewegen sich von rechts nach links. Beim verlassen des Spielfeldes wird die x-Koordinate, wieder auf die x-Koordinate des rechten Rands gesetzt. Durch den Random-Generator wird eine neue zufällige y-Koordinate generiert (durch %background.height() wird sichergestellt, dass der Rahmen des Spielfelds nicht überschritten wird).

Start.jpg
  • Kollisionen:

Die Mittelpunkte der Hindernisse werden berechnet und mit den Koordinaten des Aliens verglichen. Wenn diese übereinstimmen, kommt es offensichtlich zu einer Kollision und ein Leben wird abgezogen. Nach einer Kollision werden die Hindernisse wieder an den Anfang gesetzt, wobei die y-Koordinate vom Random-Generator neu generiert wird.

Coll.png


Extras

  • Lebensanzeige, die durch 3 Herzen symbolisiert wird
  • Countdown am Anfang des Spiels
  • Nach dem Game Over ist es möglich eine neue Runde anzufangen
  • Hintergrund Musik
  • Threshold für den Video Input lässt sich per Tastendruck verändern

Die Spielkontrollen sind:

  • "S" um das Spiel anzufangen
  • "A" um es erneut zu starten
  • Space, um den Hintergrund zurückzusetzen


Downloads

Source Code: [1]