Skip to content

Unsere Spielkonzepte

NewLordVile edited this page Aug 23, 2017 · 13 revisions

Inhaltsverzeichnis

State Machine

Wir implementieren unser Spiel auf Basis einer FSM (Finite State Machine).
Das heißt, dass unser Spiel zwischen verschiedenen Zuständen (z.B. Pause, Menü) unterscheiden kann und in der Folge auch die zustandsspezifischen Operationen durchführen wird. Hierzu muss unsere grundlegende Klasse Game eine Membervariable besitzen, die unsere ganzen Zustände verwaltet.

Klassendiagramm

Im Folgenden ein kleines Diagramm, das unser Konzept veranschaulichen soll:

basic diagram

Die State machine wird als Stapel implementiert (ja, du hast richtig gelesen, wir brauchen tatsächlich etwas, das wir in der Schule gelernt haben...). Der Einfachheit halber wurde auf die Trennung von Struktur und Inhalt verzichtet. Und ja die Ecken sind nicht abgerundet, passiert.

Stapel Struktur

Map

Unser Produkt ist ein 2D-Spiel. Zur Umsetzung der Map verwenden wir das Konzept einer Tile Map (in 64x64 große Bilder unterteilte Map). Aus dem Klassendiagramm wird die Zusammensetzung unserer Map ersichtlich:

Map Struktur (Anmerkung: "GameState" verwaltet einen Stapel aus "Map"s)

Das Rendern der Spielumgebung geschieht nach folgendem Schema: Rendern

Collision Detection

Jegliche Kollision in unserem Spiel wird über die Kollision von Rechtecken modelliert. So besitzen Spielobjekte Kollisionsrechtecke. Tiles mit denen Kollision stattfindet werden in "Tiled" im "CollisionLayer" plaziert. Soll nicht mit dem gesamten Tile kollidiert werden, so müssen zusätzlich in "Tiled" Kollisionsboxen definiert werden (Tiled -> Tilesets -> Tileset mit dem gewünschten Tile -> Tileset bearbeiten -> Tile auswählen -> Kachelkollisions-Editor am rechten Rand).

Die Rechtecke sind alle "axis-aligned" (entlang der Koordinatenachsen ausgerichtet), Kollision kann also nach folgendem Prinzip ermittelt werden: Rectangle Collision

Wurde eine Kollision erkannt, so wird die Bewegung des Objekts in diese Richtung rückgängig gemacht.

Clone this wiki locally