Hallo zusammen,
ich habe nach einer längeren Pause wieder angefangen, hobbimäßig Spiele zu entwickeln und bin mir nun aktuell nicht sicher, was das richtige Vorgehen ist. Daher hoffe ich, dass Ihr mir hier ein paar Tipps geben könnt.
Kurze Beschreibung:
Ich arbeite mit Gamemaker Studio 2 und entwickle gerade ein 2D Space Shooter. Die Raumschiffe sollen nun beliebig ausgerüstet werden können. Hierzu hat jedes Raumschiff diverse Slots, welche dann mit den entsprechenden Komponenten ausgerüstet werden sollen. Zukünftig will ich das Spiel zu einem Loot basiertem Spiel entwickeln, indem man von Gegnern neue Waffen finden kann etc.
Aktuelle Architektur:
In meiner aktuellen Architektur habe ich ein Spielerobjekt, welches das im zugeordnete Schiff kontrolliert. Das Schiff besitzt als Attribute mehrere Listen, welche neben den möglichen Slots auch die bereits vorhandenen Waffen auflisten. Alle Ausrüstungskomponenten basieren dabei auf der Basisklasse Komponenten und leiten sich dann je nach Typ von dieser ab (z.B. Antrieb, Primärwaffe, Sekundärwaffe, Schild...).
Um das ganze möglichst dynamisch zu gestalten habe ich die entsprechenden Definition (z.B. Schiffswerte, Schiffslotliste und Komponentenwerte) in verschiedenen CSV Dateien hinterlegt, welche zu Beginn des Spiels auslesen und beim Erstellen der verschiedenen Instanzen verwendet werden.
Die Schiffsklasse sieht hierbei wie folgt aus:
Hinweis: Es wurde in GML und nicht in C++ programmiert
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
|
//information about possible ship Slots
lShipSlots = ds_list_create();
//assigned shipslots
lCompWeaponPrim = ds_list_create();
lCompWeaponSec = ds_list_create();
lCompWeaponDef = ds_list_create();
lCompEngine = ds_list_create();
lCompGenerator = ds_list_create();
lCompShield = ds_list_create();
|
Ich habe hierzu nun die folgenden Fragen
- Aktuell speichere ich ja die möglichen Slots und die tatsächlichen Ausrüstungsgegenstände in verschiedenen Listen. Wäre es besser, wenn ich die Slots fest mit den Ausrüstungsgegenständen verknüpfe? Meine Idee hierzu wäre, dass ich den Slot ebenfalls in Komponentenliste speichere, den Listeneintrag jedoch um die ID der zugeordneten Waffe etc. ergänze.
Beispiel: lCompWeaponPrim [0] = [posX, posY, typ, instanzId]
- Weiterhin gibt es, wie bereits erwähnt, verschiedene Typen an Ausrüstung. Aktuell unterscheide ich diese durch einen festen String, was in meinen Augen aber nicht die beste Lösung ist, da ich nun stets den String festkodiert abfragen muss, falls ich diesen benötigen. Meine alternative Idee wären Konstanten oder (wahrscheinlich noch besser) ein Enum. Hier stellt sich für mich jedoch die Frage, wie ich das Enum in der CSV Datei abbilden kann, da diese ja auch den Typen speichern muss.
- Ergänzung zu 2tens: Neben dem Typ habe ich auch eine Schadenstyp und eine Slot/Ausrüstungsgröße (s,m,l). Würde ich diese genau wie Punkt 2 umsetzen oder gibt es hier andere Besonderheiten, die ich beachten muss?
Schonmal vielen Dank im Voraus