GameStates



  • Hmm, man verzeihe mir die Frage, aber ich bin grade dabei mein Spiel hier etwas zu modernisieren. Aber ich würde das gerne mal von Profis gegenchecken lassen, ob ich was übersehen habe :).

    class IGameState
    {
    public:
    	virtual void initGameState() = 0;
    	virtual void onEnterGameState() = 0;
    	virtual void onLeaveGameState() = 0;
    };
    
    enum eGameState
    {
    	STATE_NOTHING,
    	STATE_MENU,
    	STATE_CREDITS,
    	STATE_GAME,
    	STATE_HIGHSCORES,
    };
    
    class GameStateManager
    {
    	typedef std::map<eGameState, IGameState*> TGameStateMap;
    
    public:
    	GameStateManager();
    	void assignGameState(eGameState state, IGameState* ptr);
    	void removeGameState(eGameState state, IGameState* ptr);
    	void changeGameState(eGameState state);
    
    private:
    	TGameStateMap m_states;
    	eGameState m_current_state;
    };
    

    assignGameState
    Schiebt den Zeiger auf eine Instanz von IGameState in die Map und falls für diesen GameState bereits ein Objekt vorhanden ist, wird dieses gelöscht.
    Funktioniert nicht wenn der State momentan gesetzt ist. Ruft nach dem hinzufügen initGameState() auf.

    removeGameState
    Löscht den GameState inkl. dem Zeiger aus der Liste. Funktioniert nicht wenn der State momentan gesetzt ist.

    changeGameState
    Verlässt den momentanten GameState (Objekt wird benachrichtigt) und setzt den neuen. Dabei wird das Objekt auch wieder informiert. Ruft onLeaveGameState() auf für das zu verlassende Objekt und onEnterGameState für den neuen State auf, wenn der andere verlassen wurde.

    Was haltet ihr davon? Wie handelt ihr das?
    Ich wollte einen etwas mehr Objektorientierten Ansatz, damit ich mein Komponenten-Konzept besser durchsetzen kann.


Anmelden zum Antworten