Let's Do Magic

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche
"Let's Do Magic"-Logo.

Projekt aus dem WS 2012/13

Konzept

Let's Do Magic ist ein interaktives Magierduell. Es wird von zwei Spielern mittels eines „Zauberstabs“, der an der Spitze eine LED besitzt, gesteuert. Die Spieler zeichnen Symbole in die Luft, welche von einer Webcam aufgezeichnet werden. Anschließend findet ein Vergleich mit einer „Symbol-Datenbank“ statt. Existieren die Symbole in der Datenbank werden sie erkannt und auf dem Bildschirm die dazugehörige Grafik ausgegeben. Gewonnen hat der Spieler, der die meisten Zauber richtig ausführt.


Umsetzung

Hardware

Die Webcam

Anfangs wollten wir unser Projekt mithilfe einer OnBoard-Webcam realisieren. Doch bald mussten wir feststellen, dass diese für unsere Zwecke nicht ausreichte. Die Framerate von 30 fps genügte nicht, da das Bild nicht ruckelfrei aufgezeichnet werden konnte. Hierauf beschlossen wir, eine PS-EyeCam zu verwenden, da wir uns von ihr eine höhere Framerate versprachen. Jedoch stießen wir auch hier schnell auf Probleme. Die im Internet verfügbare neueste Version des PS-EyeCam-Treibers erlaubte es uns zwar, die Framerate auf 60 fps bzw. 120 fps zu stellen, allerdings war diese Version nicht mit EyesWeb kompatibel. Die ältere Version vertrug sich mit EyesWeb, aber hier konnte die Framerate nicht höher als 30 fps gesetzt werden. Letztendlich wurde dann die ältere Treiberversion mit der niedrigen Framerate verwendet. Nachdem wir jedoch unsere Methode zum Vergleichen der Symbole geändert haben, stellten wir fest, dass nun auch die OnBoard-Webcam ruckelfrei funktionierte.

Die selbstgebauten Zauberstäbe.

Der Zauberstab

Als zu selektierende Eigenschaft diente die Helligkeit der superhellen LED an der Zauberstab-Spitze. Damit der Zauber als abgeschlossen erkannt werden kann, mussten wir in den Zauberstab einen Schalter einbauen. So endet der Zauber, wenn das Licht erlischt. Der Zauberstab besteht aus einem einfachen Schaltkreis.


Software

EyesWeb-Patch Aufbau

LetsDoMagic patch.jpg

  1. Videoquelle (PS-EyeCam)
  2. Konvertierung des Bildes in HSV
  3. Herausfiltern des Helligkeitskanals
  4. Schwellwert-Regelung
  5. Bestimmung des Schwerpunkts
  6. Aufteilen in x- & y-Koordinaten
  7. Senden der Koordinaten über OSC an Processing

Processing

In Processing wurde der Großteil des Spiels realisiert. „Let's Do Magic“ ist in verschiedene Bereiche unterteilt:

  • Starbildschirm
  • Hauptmenü
  • Zauberbuch
  • Duell-Modus
  • Credits


Processing erhält die aktuelle Position des Zauberstabs mittels OSC-Informationen von EyesWeb. Dies wurde mit der Bibliothek oscP5 verwirklicht.


Der Spielablauf

Das Hauptmenü ist der Dreh- und Angelpunkt.
Das Zauberbuch beinhaltet alle Zauber des Spiels.
Der Angriffszauber 'Fluctus' im Duell-Modus.

Wird das Spiel gestartet, erscheint der Startbildschirm. Hält man die LED für etwa zwei Sekunden ruhig wird dies als Auswahl gewertet und der Spieler gelangt in das Hauptmenü.

if ( (abs(this.x - x) <= 35) && (abs(this.y - y) <= 35) )
{
  if ( abs((minute()*60 + second()) - lastMoveTime) >= 2 )
  {
    ..
  }
}
else
{
  this.x = x;
  this.y = y;
  lastMoveTime = (minute()*60 + second());
}


Das Hauptmenü

Im Hauptmenü hat der Spieler verschiedene Möglichkeiten. Hält man den Zauberstab (für 2 Sekunden) auf ein bestimmtes Symbol, werden weitere Teile des Spiels aktiviert. Über die Kerze gelangt man zu den Credits, Oscar der Kater startet den Duell-Modus und über das dicke Buch am rechten Rand kann man das Zauberbuch aufrufen. Das Spiel kann über die Spinnweben in der rechten oberen Ecke beendet werden.


Das Zauberbuch

Im Zauberbuch können alle möglichen Angriffs- und die dazugehörigen Gegenzauber und deren Symbolen angesehen werden. Wichtig hierbei ist es sich die vorgegebene Reihenfolge der Bewegung zu merken, mit der der Spieler später im Duell die Symbole in die Luft zeichnen muss. Wird die Reihenfolge nicht beachtet, schlägt der Zauber fehl. Über das Salbeibündel in der linken Ecke des Bildschirms gelangt er wieder ins Hauptmenü zurück.

Der Duellraum

Um das Magierduell zu starten, muss die LED etwa 2 Sekunden ruhig auf den Kater gehalten werden. So kommt man zum Hauptteil des Spiels, dem Duell. Es wird immer abwechselnd von den beiden Spielern gespielt. Um das Spiel zu starten muss wieder der Zauberstab ruhig gehalten werden. Verschwindet die Sprechblase der Katze, kann das Spiel beginnen.


Spieler eins führt einen beliebigen Angriffszauber aus, den Spieler zwei mit dem entsprechenden Gegenzauber abwehren muss. Der Symbolvergleich funktioniert folgendermaßen: Wurde das Duell gestartet, wird die aktuelle Position der LED gespeichert und anschließend ständig überprüft ob die neuen Koordinaten sich in x oder y Richtung um mind. 110 pixel unterscheiden. Je nachdem wird dann die Bewegungsrichtung festgelegt und in einem String gespeichert.

/* Wenn bisher noch kein Wert für SpellX/Y gesetzt wurde, jetzt setzen */
if (spellX == 0)
{
  spellX = x;
}
if (spellY == 0)
{
  spellY = y;
}
      
if ( (spellX - x) > 110 && (lastSpellDirection != 'L') )
{
  soundmanager.playSoundEffect (30);

  spellX = x;
  spellY = y;
        
  lastSpellDirection = 'L';
  spellDirections += 'L';
}


Wenn für eine Sekunde das von EyesWeb übermittelte OSC-Signal 0/0 ist, das heißt keine Helligkeitsinformation mehr eingeht, wird der Zauber beendet und ausgewertet. Dies geschieht indem der gespeicherte String mit den vorhandenen Zaubersprüchen (die ebenfalls als String im Programm vorliegen) verglichen wird.

if ( match(spell, "IDDRD") != null && spell.length() == 5 )
{
   castSpell(1);
}


Nach 4 Runden (bestehend aus Angriff und Verteidigung) ist das Duell beendet. Der Magier, der am meisten Zauber richtig ausgeführt hat gewinnt das Duell.

Fazit und mögliche Verbesserungen

Abschließend lässt sich sagen, dass unsere Gruppe alle Punkte, die sie erreichen wollte, umsetzen konnte. Dennoch gibt es natürlich noch einige Dinge die man verbessern könnte.

So zum Beispiel wäre es schön den Schwellwert nicht immer manuell an die bestehenden Lichtverhältnisse anpassen zu müssen. Ein weiterer Aspekt um das Spiel zu erweitern wäre es, auch die Erkennung von Symbolen mit Schrägen oder Kreisformen zu realisieren. Des Weiteren könnte ein Bild der beiden Spieler in die Grafik eingebaut werden, so dass der Eindruck von Augmented Reality entsteht.


Der Source-Code von "Let's Do Magic" kann hier heruntergeladen werden.

Zusätzlich wird benötigt: