Interactive Doodle Jump

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche
Doodle-Jump


In dem Projekt "Interactive Doodle Jump" handelt es sich um einen Klon des Smartphone Spiels Doodle Jump, in dem die Spielfigur statt mit dem Handy mit der Bewegung eines realen Menschen gesteuert wird. Hierbei soll die Spielfigur genau in die Richtung springen, in die auch der Mensch vor der Kamera springt.
Für die Bewegungsdetektion steht eine handelsübliche Webcam zur Verfügung.
Damit der Aufbau möglichst modular gehalten wird, wird die Bildverarbeitung und das eigentliche Spiel mittels OSC von einander entkoppelt.

Die Bilder rechts, zeigen das original Doodle-Jump - im Wesentlichen (bzgl. des Screenshots) gibt es aber keinen Unterschied zu unserem Spiel.

In den folgenden Abschnitten wird kurz auf die Umsetzung eingegangen

Bildverarbeitung

Die Bewegungsdetektion wird mit dem unter der BSD-Lizens stehenden Framework OpenCV realisiert.
Die Person wird mittels Hintergrundsubtraktion detektiert, anschließend wird der Schwerpunkt des binarisierten Bildes berechnet.
Mit dieser Grundlage lassen sich leicht Bewegungen berechnen.
Die komplette Logik ist in der Klasse "JumpDetector" gekapselt. Es wurde versucht den Code
verständlich und gut dokumentiert zu verfassen, so dass eine Wiederverwendbarkeit möglich ist.

Der gesamte Projektcode ist hier zu finden (Bildverarbeitungsteil in InteractiveDoodleJump_src.rar)


Das untenstehende Ablaufdiagramm zeigt Schematisch den genauen Ablauf des Algorithmus:

Die Idee ist, dass sich die Spielfigur erst bewegt, wenn gesprungen wurde und erst ab dann werden die Bewegungen des Spielers via OSC an das Spielfeld übertragen.
Umgesetzt ist dies allerdings bis jetzt nur mit einem simplen Counter der, nachdem er einen Sprung registiert hat, 1-2 Sekunden die Daten aktualisiert und danach nichts mehr schickt.
Mit dem sogenannten Jumpfilter wird die Bewegung auf einen Sprung überprüft, hierbei wird die Y Koordinate der Bewegung betrachtet, also nichts aufwendiges.

JumpdetectionFlowDiagram.png


 Doodle Jump Spielfeld


Das eigentliche Spiel, wurde mit openFrameworks implementiert.
Zur Kollisionsdetektion wurde das Physik Engine Box2D verwendet, welches auch für openFrameworks verfügbar ist.
Ansonsten wird einfach auf OSC Nachrichten gewartet, und diese auf das Spielfeld umgesetzt.

Auch von diesem Teil wurder der Code Online gestellt.

Im untenstehenden UML Diagramm, ist eine detailierte Klassenbeschreibung zu sehen
Doodle UML.PNG


OSC Nachrichten

Eine OSC Nachricht besteht bei uns aus einem Integer Wert, der zwischen 0 und 100 liegt.
wobei 0 ganz links und 100 ganz rechts ist.
Zweitens hat dieser Wert ein Vorzeichen, der die Sprungrichtung angibt, diese wird benötigt um
die Spielfigur richtig zu zeichnen.
Beispiele:
-50 --> Position in der Mitte, Sprung nach links
80 --> Position rechts außen, Sprung nach rechts


aktueller Stand und Verbesserungsmöglichkeiten

Wir haben es geschafft, dass das Spiel prinzipiell funktioniert und unserer Meinung macht es auch Spaß!

Der Algorithmus zur Bildverarbeitung könnte aber z.b. noch durch eine genaueren Richtungsbestimmung

verbessert werden. Weiterhin könnte man den Schwerpunkt nur von dem Umriss einer Person berechnen, dies würde die Positionserkennung

wesentlich unempfindlicher gegen Rauschen machen.

Auch könnte das Spielfeld für diese Art zu spielen angepasst werden, da es wesentlich schwerer ist durch Springen eine Platform zu treffen,

als durch die normale Steuerung mit dem Smartphone.


Literaturverzeichnis