-
Notifications
You must be signed in to change notification settings - Fork 0
Unsere Spielkonzepte
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.
Im Folgenden ein kleines Diagramm, das unser Konzept veranschaulichen soll:
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.
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:
(Anmerkung: "GameState" verwaltet einen Stapel aus "Map"s)
Das Rendern der Spielumgebung geschieht nach folgendem Schema:
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:
Wurde eine Kollision erkannt, so wird die Bewegung des Objekts in diese Richtung rückgängig gemacht.