Hallo Leute,
ich lerne gerade C++ und habe ein kleines Konsolen RPG angefangen (ohne Grafik/Sound).
Gesteuert wird alles über Texteingaben.
Das Spiel an sich ist als finite state machine aufgebaut. Im Anhang habe ich ein kleines Diagramm angehängt, welches die einzelnen States bzw. "Screens" im Zusammenspiel zeigen soll (Sprechblasen sind dabei die eigentlichen States, die Blöcke darunter die Menü-Elemente). Die einzelnen States erben von einem State-Interface welches 3 Methoden bereit stellt: OnEnter, OnExit, Update. Beim Initialisieren eines States muss ein Kontextobjekt übergeben werden.
Das Kontexobjekt hat dabei folgende Aufgaben: Referenz zum aktuellen State halten, eine Methode bereitstellen um den aktuellen State zu wechseln(dadurch kann ein State über die Referenz zum Kontextmenü selber entscheiden wann in einen anderen State gewechselt werden soll) sowie die Methoden des aktuellen States in der GameLoop aufrufen.
Nun habe ich folgendes Problem/Frage:
Wer sollte die eigentlichen Stateobjekte verwalten und wie sollte ich auf diese Zugreifen wenn ich den State wechseln möchte?
a) Macht es Sinn im Kontextobjekt einfach alle States einmalig zu initialisieren (dann könnte jeder State über das Kontextobjekt auf die anderen States zugreifen)
b) Sollte der jeweilige State seine möglichen Statenachbarn initialisieren und verwalten (z.B muss der BossScreen nur wissen wie er zum GameScreen State wechselt oder zum FightScreen State, nicht jedoch zum InventoryScreen State) ?.
c) Macht es Sinn eine dedizierte Datenstruktur anzulegen, welche den jeweiligen State mit seinen "TransistionNodes" speichert?
(CurrentState, [TransistionNode1, TransistionNode2])
Beispiel: (BossScreen*, [GameScreen*, FightScreen*])
d) Andere Ideen falls meine Frage verstanden wurde?
Vielen Dank für eure Zeit!