Basketball mit Wiicontroller

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Idee

Ein Basketball-Spielhallen Spiel bei dem man einen Basketball in einen Korb wirft. Mit einer Game-Engine nachgebildet und gesteuert von einem Wiicontroller.

Basketball mit wii systemstruktur.png

Bild: Systemstruktur


Software

Blender

Wir haben das Programm Blender verwendet, da es eine integrierte GameEngine enthält. Diese Erleichtert uns enorm das physikalische Verhalten von Objekten zu simulieren. Desweiteren wurde zur erleichterten Programmierung der integrierte Python-Editor verwendet. Zudem kann die notwendige Anbindung des Wii-Controllers über die ebenfalls integrierte OSC-Schnittstelle erfolgen. Die verwendete Blender Version ist die v.2.76.

Hilfreiche Links zur Blender Programmierung:

http://www.tutorialsforblender3d.com/BGE_Python/BGE_Python_Main.html

https://www.blender.org/api/blender_python_api_2_76_2/

https://docs.python.org/2/tutorial/


Wiiosc

WiiOSC ist ein kleines Linux Programm was den Nintendo Wii Controller benutzt und ursprünglich zur Steuerung von Musikprogrammen implementiert wurde. Das Programm sendet die Wii Daten als OSC Nachricht an einen gewünschten Port den man möchte, außerdem kann es auch OSC Nachrichten empfangen und zum Beispiel eine empfangene „Zahl“ als Binaerzahl mit den LEDs am Controller ausgeben. Für die Installation des Programms benötigt man zusätzlich weitere Software. Als erstes benötigt man die OpenSource Library liblo, was sich um das OSC-Protokoll kümmert. Als nächstes benötigt man das Programm Cwiid, was eine in C programmierte Implementation für die Benutzung des Wii Controllers. Durch die installierten Header-Dateien kann man nun auch in selbst geschriebenen Programmen den Wii Controller einbinden. Zusätzlich bietet das Programm Cwiid eine Graphische Oberfläche oder die Möglichkeit den Controller als Maus Ersatz zu benutzen. Der empfohlene Bluetooth-Stack von WiiOSC ist BlueZ. Diesen kann man manuell per Terminal Befehl runterladen und installieren (sudo apt-get install bluez-utils libopenbox1). Leider hat es bei unserer verwendeten Linux Distribution: Ubuntu 14.04 LTS Probleme bei der Kompilierung gegeben. Es hat sich raus gestellt, dass die verwendeten Bluetooth Funktion von WiiOSC nicht mit denen von BlueZ Bluetooth-Stack mehr übereinstimmen. Download Links zur Installation:

http://www.nescivi.nl/wiiosc

http://www.abstrakraft.org/cwiid/wiki/

http://www.liblo.sourceforge.net/


Realisierung der Spielewelt

Basketball mit wii Spielewelt.png
                                              Bild: Blender Spielewelt


Die Spielewelt soll eine Halle bzw. einen Spielautomaten repräsentieren indem man einen Basketballkorb hat, den man mit einem Basketball treffen muss und natürlich die dazugehörige Trefferanzeige. Hierzu erzeugten wir eine Halle mit den entsprechenden Wänden als Blenderobjekt Plane, damit der Ball von Banden abprallen kann. Desweiteren folgte natürlich der Basketballkorb als Blenderobjekt Torus sowie der Basketball als Blenderobjekt Torus. Zusätzlich ein Zähler der die Treffer erkennen soll, aber für den Spieler unsichtbar sein soll. Dies erfolgte mit einem unsichtbaren Blenderobjekt Plane. Die Trefferanzeige erfolgte als Blenderobjekt Text.

Die Logik der Welt erfolgte über die GameEngine mithilfe von Python-Scripten. Hierzu benötigte wir ein Script, das die Verwaltung der Objekte übernimmte. Dazu erstellten wir ein Script, das bei jeden Frame mithilfe des Always-Sensor ausgeführt wird. Diese Script fügte ich den Boden der Halle hinzu, da der Boden immer existiert solange gespielt wird. Diese Script zerstört den Zähler sowie den Basketball, ändert die Trefferanzeige sowie bei der Spielinitialisierung erstellt die den Zähler und Basketball und stellt die Trefferanzeige auf null. Bei einem Reset wird auch der Basketball und Zähler erneut erstellt. Geplant war das dieses Script auch die OSC-Nachrichten empfangen sollte und dann je nach Nachricht die dementsprechende Aktion auslösen sollte. Leider konnte OSC-Anbindung aufgrund von Hindernissen bei der Installation der benötigen Software dafür nicht mehr rechtzeitig erfolgen. Somit kann man sagen, dass dieses Script das Haupt-Script der Spielewelt ist.

Das zweite wichtige Script ist das Script, das den Wurf des Balles generiert. Hierzu wurde dem Ball das Script mithilfe eines Keyboard-Sensor hinzugefügt. Angedacht war, dass die Auslösung über OSC erfolgen sollte, wozu ein Always-Sensor und im Python-Script lediglich eine if-Bedingung mit einer Flag-Variablen nötig gewesen wäre. Zur Funktionalität des Python-Script es nimmt die Koordinaten der Wurfrichtung auf und setzt die Gravitation. Anschließend wird dem Ball ein Impuls mit den Wurf-Koordinaten zugefügt und somit kann die GameEngine mit jeden Frame die neue Position des Balls berechnen.

Zudem gab es zwei weitere Scripte, die jeweils ein Flag für das Haupt-Script für die Objektverwaltung der Spielewelt setzten. Einmal das Script um ein Reset-Flag zu setzen, das durch einen Keyboard-Sensor an den Ball angebunden ist. Das andere Script um ein Count-Flag zu setzen oder besser gesagt einen Treffer signalisieren soll. Dieses Script ist dem Objekt Zähler über einen Collisions-Sensor angebunden, der bei jeder Berührung auslöst.


Basketball mit wii ablaufplan.jpg
                                              Bild: Ablaufplan

Zusammenfassung/Ausblick

Zusammenfassend lässt sich sagen, dass die Spielewelt mit etwas Blender und Python Kenntnisse relativ leicht erstellen lässt. Allerdings bei Problemen sich sofort sehr gute Kenntnisse benötigt werden um dieses Problem zu beheben. So besteht das Problem, das bei manchen Spielen und nach sporadischer Zeit kein Reset mehr durchführen lässt. Die einzige Möglichkeit ist dann noch das Spiel zu neustarten. Die Ursache hierzu konnten wir mit unseren Kenntnissen nicht herausfinden. Desweiteren lässt sich sagen, dass es enorm wichtig ist die richtigen Version von Library’s , Betriebssystem oder anderen benötigten Programmen zu haben, wie sich bei den Problem mit der OSC zeigte.

Erweitern lässt sich das Spiel durch natürlich erst mal mit einer Anbindung zur Steuerung des Balls. Eventuell über eine Kinect oder man kriegt eben das OSC zum Laufen. Desweiteren könnte man einen zweiten Spieler einfügen, wodurch man sich gegenseitig messen kann. Natürlich muss hier der Wurf abwechselnd erfolgen. In diesem Zug sollte man auch ein Menü einfügen in dem man den Spielmodus wählen kann. Ebenfalls sollte das Problem mit dem sporadischen Fehler genauer untersucht werden und behoben werden.


Download

Blender-Datei