====== Geometry Game ====== ===== Übersicht ===== Hierbei handelt es sich um ein Minispiel-Übungsprojekt, dass über einen kurzen Zeitraum eine Einführung in das arbeiten mit Ogre, CEGUI und anderen libs geben soll. Der Einfachheit halber überspringen wir eigene Design-Anstrengungen weitgehend und beschränken uns auf einen ziemlich direkten Clone von "Geometry Wars". ===== Spielprinzip ===== ==== Spielziel ==== Der Spieler manövriert seinen Charakter auf der Spielfläche und bestimmt die Richtung in der er feuert um möglichst viele Punkte durch Abschüsse zu sammeln. Hat er alle seine Versuche durch Kollisionen mit Gegnern aufgebraucht, so ist das Spiel zuende. ==== Spielwelt ==== Die Spielfläche ist ein rechteckiges Feld dass immer vollständig sichtbar bleibt. Es gibt keine Hindernisse, lediglich die Ränder der Fläche schränken Bewegungen ein. ==== Spielelemente ==== === Spieler-Charakter === Wird beispielsweise durch ein Raumschiff repräsentiert. Startet in der Mitte der Spielfläche. Eine Kollision mit einem feindlichen Objekt zerstört den Charakter. Er kann sich in 8 Richtungen bewegen und feuert ständig eine Kanone (deren Schussrichtung durch den Spieler bestimmt wird). Zusätzlich kann er in begrenzter Zahl Bomben zünden. Wird eine gezündet, so werden alle feindlichen Objekte auf der Spielfläche vernichtet. === Feindliche Objekte === Starten zufällig am Rand der Spielfläche und bewegen sich dann innerhalb davon nach verschiedenen Regeln. Ein Treffer durch die Kanone des Spielers oder eine Bombe hat ihr Ableben zur Folge. == Typ 1 == Bewegt sich ohne Ziel über die Spielfläche. == Typ 2 == Folgt dem Spieler und versucht mit ihm zu kollidieren. == Typ 3 == Versucht mit dem Spieler zu kollidieren und seinen Geschossen auszuweichen. === Power-Ups === Erscheinen nach bestimmten Regeln und werden vom Spieler aufgesammelt wenn er mit ihnen kollidiert. Unterschiedliche positive Effekte. Beispielsweise: * Erhöhte Schussgeschwindigkeit der Waffe. * Waffe feuert mehrere Schüsse gleichzeitig (gestreut). * Multiplikator für die Punktewertung. * Extra-Versuche. * Extra-Bomben. ==== Spielverlauf ==== Sobald der Spieler via Menu eine Runde startet läuft es bis er mit einem feindlichen Objekt kollidiert. Hat er noch weitere Versuche, so beginnt er wieder mit einem leeren Spielfeld. Wenn alle Versuche aufgebraucht sind, dann geht es zurück ins Menu. Bei hinreichender Punktzahl wird er aufgefordert einen Namen für seinen Highscore-Eintrag einzugeben. ==== GUI ==== Zeigt verbleibende Versuche, Bomben, verstrichene Spielzeit und aktuellen Punktestand. ==== Steuerung ==== * ASDW- oder Pfeil-Tasten steuern die Bewegungsrichtung des Spielers. * Mausposition relativ zur Position des Spielers bestimmt die Schussrichtung der Kanone. * Zusätzliche Taste für Bomben. * Taste um das Menu aufzurufen und das Spiel zu pausieren. ==== Spielmenu ==== Buttons um ein Spiel zu starten oder das Spiel zu beenden. Die Highscore-Liste könnte man einfach immer anzeigen. ===== Benötigter Content ===== * Meshes, Texturen und Shader für Spieler, Gegner und Power-Ups * Partikeleffekte für Explosionen * GUI-Elemente * Menu-Elemente * Menu-Hintergrund * Soundeffekte ===== Vorschlag für groben Ablauf der Umsetzung ===== - Laden und anzeigen der Spielfläche und des Spieler-Objekts - Spieler-Bewegung - Verwaltung für Spawnen von Gegnern, einfache Gegner die nur auf einer Geraden durch die Spielfläche fliegen - Kollisionen von Spieler mit anderen Objekten - Gegner-Verhalten (ausweichen, verfolgen) - Spieler-Kanone und Bomben, zugehörige Steuerung - Zerstören von Gegnern, Punkteverwaltung - Power-Ups - Leben, Spielende - Soundeffekte - Spielmenu und Highscore-Verwaltung ===== Vorläufiges UML-Diagramm ===== {{spacewars.png|}} - Objekte können sich selber löschen, indem sie einfach destroy() aufrufen. Das setzt isValid auf false. Der ObjectManager löscht daraufhin das Objekt. - Evtl. offen ist, ob der GameManager in der jetzigen Funktion benötigt wird. Er soll objektübergreifende Aktionen kapseln. Eventuell können dies aber auch mehrere Methoden auf beiden Objekten tun, da sich Objekte (s. o.) auch selbst löschen können. - Das sollte man evtl. je nach Anwendungsfall entscheiden und den GameManager wieder entfernen, wenn er nicht benötigt wird.