如何在C ++中实现一堆游戏状态

时间:2013-10-08 15:45:42

标签: c++ class stack

我是C ++的新手,作为一个大学项目,我们正在构建一个2D平台游戏,我最近读到,拥有一堆游戏状态而不是一个具有游戏状态的全局变量是个好主意(这就是我现在有)但我不知道该怎么做。

目前这是我的实施:

class GameState
{
    public:
        virtual ~GameState(){};
        virtual void handle_events() = 0;
        virtual void logic() = 0;
        virtual void render() = 0;
};

class Menu : public GameState
{
    public:
        Menu();
        ~Menu();
        void handle_events();
        void logic();
        void render();
};

然后我有一个GameState类型的全局变量:

GameState * currentState = NULL;

在我的Main中我定义了currentState并调用它的方法:

int main(){
    currentState = new Menu();
    currentState.handle_events();
}

我如何实现堆栈或类似的东西,从而实现类似的东西:

int main(){
    statesStack.push(new Menu());
    statesStack.getTop().handle_events();
}

2 个答案:

答案 0 :(得分:2)

嗯,这并不是说你无法实施

std::stack<GameState *>

并且仍然编写一个不泄漏的程序 - 它只是让你负责进行内存管理。

如果你想让生活更轻松,你可以实现一堆shared_ptr(使用引用计数智能指针来跟踪对象的生命周期,并在不再需要对象时自动调用析构函数。)

std::stack<shared_ptr<GameState>> mystack;

mystack.push_back(shared_ptr<GameState>(new GameState()));

答案 1 :(得分:0)

使用std::stack<GameState *>