Video-Projekt TicTacCam Sven Eric Härtel Audio-Video Programmierung, Media Systems WS09/10 Prof. Dr. Andreas Plaß TicTacCam ist eine kleine Videospielapplikation, die sich an dem bekannten PEN & Paper Spielprinzip von TicTacToe orientiert.
Inhaltsverzeichnis 1. Einleitung 2. Voraussetzungen 3. Spiel- und Bedienungsanleitung 4. Programmstruktur 2
1. Einleitung Vorgabe war, das Spiel TicTacToe mit Hilfe von OpenCV 1 und C++ sowie einer Webcam programmtechnisch so umzusetzen, dass eine spielbare Variante dabei heraus kommt. OpenCV eignet sich in idealerweise zur Mensch-Maschine Interaktion, Objekterkennung, Segmentierung und Bewegungserkennung. Mit Hilfe einer montierten Webcam wird die Bewegung bzw. Lage des Spielsteins erkannt und in ein Ausgabefenster übertragen, wo die unterschiedlichen Positionen in abwechselnder Weise per Kreuz oder Kreis markiert werden. So ist ein normaler Spielablauf zwischen zwei Personen möglich. Dem Programm ist ein Spielfeld (camtttprintout.jpg) beigelegt welches man sich ausdrucken sollte, um einen visuellen Rahmen für die Kalibrierung und gleichzeitig das Spielfeld zu erhalten in dessen Rahmen man sich bewegen muss. 2. Voraussetzungen MS Windows (XP, Vista, Win7) Microsoft Visual C++ 2008 Express Edition 2 OpenCV eine montierbare USB Webcam ausgedrucktes Spielfeld ein blauer Spielstein (änderbar im Sourcecode, cvscalar(0,0,255,0)) Laptop (da das errechnete Grid vom Abstand zur Webcam angepasst ist) 1 http://sourceforge.net/projects/opencvlibrary/ 2 http://www.microsoft.com/germany/express/ 3
3. Spiel / Bedienungsanleitung Um das Spiel TicTacCam spielen zu können, sollte die Webcam etwas links von der Mitte des Laptopdeckels montiert werden. Nach dem compilieren des Sourcecodes muss zunächst das ausgedruckte Spielfeld, am besten mit Ausrichtung zum linken oberen Rand, auf der Laptoptastatur platziert werden. Dadurch erhält man auch etwas Platz um unproblematisch an die geforderten vorbelegten Tasten zu kommen, die das Spiel steuern. Es erscheint nun eine Meldung in der DOS-Konsole, wonach man den Spielstein in der Mitte des Spielfelds platzieren soll. Die durchschnittlich errechnete Position des Spielsteins wird als Basis des zu errechnenden virtuellen Grids dienen, welches für die zukünftige Positionserrechnung der Spielmarkierungen im 2D-Ausgabefenster herhält. Nach Betätigung der Entertaste wird die Position errechnet und die Ausdehnung bzw. Lage des Spielfelds ist festgelegt. Daraufhin erfolgt eine weitere Aufforderung per Entertaste das Spiel zu starten. Jetzt kann man durch verschieben des Spielsteins, wechselseitig die entsprechenden Felder im 2D-TicTacToe-Feld per Kreuz oder Kreis belegen. Es gibt 8 Gewinnkombinationen, 3 Felder waagrecht, senkrecht oder diagonal und eine unentschieden Situation, d.h. alle Felder sind belegt ohne das es einen Gewinner gibt. Doch wenn man es genau nimmt, so hat ein Gegenspieler immer die Möglichkeit seinen Zug so zu setzen, sodass es immer zu einem unentschieden kommt. Nach Spielende, wird eine kurze Meldung des Gewinners oder unentschieden ausgegeben und man hat erneut die Möglichkeit das Spiel per Backspacetaste zu starten. Mit ESC ist ein Abbruch jederzeit möglich. 4
4. Programmstruktur Das Programm besteht aus einer Main und mehreren Header Dateien. Die meisten Headerdateien werden von OpenCV bereitgestellt, die cvcam.h wurde von Intel als Open Source freigegeben und dient der Ansteuerung bzw. der Verarbeitung der aufgenommenen Bilder der Webcam. Zunächst wird die Sourcequelle für den Input der Webcam definiert und im weiteren Verlauf die Datenstruktur erzeugt auf die verschiedene Operationen ausgeführt werden um letztlich in einem schwarz/weiß Falschfarbenbild nach einer bestimmten Farbe tracken zu können. Aus der Ansammlung von erkannten Pixeln aus dem zuvor platzierten Spielstein, wird ein Schwerpunkt errechnet der im folgenden als Grundlage zur Positionierung des Spielfeldes und darauf folgend zur weiteren Verarbeitung durch die Spiellogik dient. Durch die interne Festlegung von 4 Arrays[9], mit einer standardisierten Ausdehnung über die Koordinatenpaare X1,Y1 / X2, Y2, ist es möglich über den Schwerpunkt, als Mittelpunkt des Grids, einerseits die Ausdehnung des Spielfeldes zu bestimmen und später im laufenden Spiel die abgefragte Position des Spielsteins zu vergleichen und damit die Transformation vom 3D in den 2D- Raum zu übertragen. Nach dem nun diese Voraussetzungen bestehen, wird nach dem Spielstart von der jeweilige Spielsteinposition der Durchschnittswert genommen und eine Schleife durchlaufen die bestimmt in welchem Bereich des zuvor rechnerisch ermittelten Bereichs der Spielstein liegt. Mit diesem Ergebnis wird in einem weiteren Array, das leer vordefiniert ist, verglichen ob eine Position im Spielfeld schon belegt oder noch frei ist. Durch wechselseitiges befüllen mit einem X oder O des zuvor leeren Arrays kann daraufhin die Prüfung über diverse Gewinnkombinationen erfolgen. Tritt ein Gewinnfall oder unentschieden ein so ist das Spiel beendet und es wird eine entsprechende Meldung in der Konsole und in dem grafischen TicTacToe Feld ausgegeben. Nachfolgend ist der grobe Ablauf in einem vereinfachten Diagramm dargestellt. 5
6