[Projekt] No Mercy For Flying Saucers
Verfasst: 08.04.2013, 23:13
Neben einem Projekt mit Andre (Windows 8 Game - wird demnächst auch präsentiert), bei dem ich jedoch ausschließlich den Posten des Artist übernehme, arbeite ich seit 2 Wochen an einem kleinen TowerDefense. Es ist mein zweites C++ Projekt und mein erstes mit OpenGL. Da ich im letzten Semester in einer Grundlagenveranstaltung zu Computergraphik viel mit OpenGL 1.3 und GLUT gearbeite habe wollte ich es auch mal richtig ausnutzen bevor es an Shader usw. geht. Außerdem hat man schnell etwas auf dem Bildschirm, was eine große Motivation darstellt. Ich arbeite mit Visual Express 2012 for Desktop, Blender, Gimp und später noch mit Eclipse, um es für Linux/MacOS zu kompilieren. Abgesehen von GLUT benutze ich keinen "fremden" Code. Assimp hatte ich mal ganz kurz im Einsatz, als ich mit den UVs im eigenen Exporter kämpfte. Jedoch konnte ich das Problem lösen und hab es daher wieder rausgenommen.
Wie bei TowerDefense gewohnt kommen von links die Gegner (in dem Fall Ufos) und wollen durch das Feld durch, hin zum rechten Rand. Es wird Unterschieden zwischen einer Bau-Phase und einer Wave-Phase(Gegnerwelle), in der nicht gebaut werden kann. Die Steuerung wird komplett via Maus/Touch stattfinden. Ich teste es immer wieder auf meinem x86 Tablett. Drei Turm-Typen sind in Planung: Angriff, Gift und Gefrier. Außerdem kann jeder Turmtyp zweimal aufgelevelt werden. Von den Ufos gibt es drei Typen, welche sich in Geschwindigkeit und Schadensaufnahme unterscheiden. Zerstören eines UFOs gibt Credits, welche wiederum mit der aktuellen Anzahl an verbleibenden Leben verrechnet und dem Score gutgeschrieben werden.
Die großen Hürden habe ich schon überwunden, unter anderem:
- Eigener, recht simpler, Texture-Loader. Ich habe mich aus Faulheit für ppm/pgm in ASCII entschieden. Alles in eine Texture-Klasse gekapselt, so muss ich nur noch "useTexture("xxx")" aufrufen. Texture-IDs werden mit dem Pfad/Names-String gemapped und so nur einmal geladen
- Blender Mesh-Export-Script und Mesh-Loader. Damit bekomme ich Tris und UV-Coords in mein Projekt. Ansonsten läuft es wie bei den Texturen, ein einfaches "useMesh("xxx")" reicht zum Laden der Display-List mit den Informationen
- Pfadfindung via Breitensuche. Ehrlich gesagt habe ich mich nicht mit Allgorithmen speziell für Spiele beschäftigt sondern eine normale Breitensuche implementiert.
- Informationen über jede Wave in einer Textdatei. Auch eher simpel: Es gibt pro Wave eine .wave, in welcher "Wartezeit \n, GegnerTyp \n, Gesundheit \n" festgehalten sind.
- Türme suchen sich ein Ziel in Reichweite und halten daran fest es mit einem Strahl zu beschießen.
- GUI. Noch nicht auf dem Screenshot zu sehen. Im Moment gibt es einen simplen Button und einen mit "Drück-"Animation.
- ContextMenü für Turmbau/Wavestart. Ebenfalls noch nicht auf dem Screenshot.
Im Moment bin ich die Prototypen mit texturierten Meshes am Ersetzen. Außerdem möchte ich noch einen Zahlenrenderer für Score und Credits schreiben, ein Hauptmenü ist auch noch geplant. Der Hauptteil der Arbeit ist aber geschafft, nur fangen in einer Woche die Vorlesungen wieder an und es könnte sich daher doch noch ziehen.
Wie bei TowerDefense gewohnt kommen von links die Gegner (in dem Fall Ufos) und wollen durch das Feld durch, hin zum rechten Rand. Es wird Unterschieden zwischen einer Bau-Phase und einer Wave-Phase(Gegnerwelle), in der nicht gebaut werden kann. Die Steuerung wird komplett via Maus/Touch stattfinden. Ich teste es immer wieder auf meinem x86 Tablett. Drei Turm-Typen sind in Planung: Angriff, Gift und Gefrier. Außerdem kann jeder Turmtyp zweimal aufgelevelt werden. Von den Ufos gibt es drei Typen, welche sich in Geschwindigkeit und Schadensaufnahme unterscheiden. Zerstören eines UFOs gibt Credits, welche wiederum mit der aktuellen Anzahl an verbleibenden Leben verrechnet und dem Score gutgeschrieben werden.
Die großen Hürden habe ich schon überwunden, unter anderem:
- Eigener, recht simpler, Texture-Loader. Ich habe mich aus Faulheit für ppm/pgm in ASCII entschieden. Alles in eine Texture-Klasse gekapselt, so muss ich nur noch "useTexture("xxx")" aufrufen. Texture-IDs werden mit dem Pfad/Names-String gemapped und so nur einmal geladen
- Blender Mesh-Export-Script und Mesh-Loader. Damit bekomme ich Tris und UV-Coords in mein Projekt. Ansonsten läuft es wie bei den Texturen, ein einfaches "useMesh("xxx")" reicht zum Laden der Display-List mit den Informationen
- Pfadfindung via Breitensuche. Ehrlich gesagt habe ich mich nicht mit Allgorithmen speziell für Spiele beschäftigt sondern eine normale Breitensuche implementiert.
- Informationen über jede Wave in einer Textdatei. Auch eher simpel: Es gibt pro Wave eine .wave, in welcher "Wartezeit \n, GegnerTyp \n, Gesundheit \n" festgehalten sind.
- Türme suchen sich ein Ziel in Reichweite und halten daran fest es mit einem Strahl zu beschießen.
- GUI. Noch nicht auf dem Screenshot zu sehen. Im Moment gibt es einen simplen Button und einen mit "Drück-"Animation.
- ContextMenü für Turmbau/Wavestart. Ebenfalls noch nicht auf dem Screenshot.
Im Moment bin ich die Prototypen mit texturierten Meshes am Ersetzen. Außerdem möchte ich noch einen Zahlenrenderer für Score und Credits schreiben, ein Hauptmenü ist auch noch geplant. Der Hauptteil der Arbeit ist aber geschafft, nur fangen in einer Woche die Vorlesungen wieder an und es könnte sich daher doch noch ziehen.