OOP - 这是不好的做法吗?

时间:2014-05-13 18:47:25

标签: c++ oop

我正在使用SFML在C ++中制作游戏(尽管这并不重要)并且我正在努力想出一个好的设计。现在我有一个包含关卡对象的游戏类。单击关卡中的按钮时,需要更改当前游戏关卡。我可以想象的唯一方法是传递游戏的指针并将其存储在每个级别中,这样我就可以从级别内调用函数,但这似乎是非常糟糕的结构和组织。这是坏事还是没有,可能是一个更好的结构来代替使用?

以下是游戏类:

    #include "SFML/Graphics.hpp"
    #include "mainMenu.h"
    #include "levelMenu.h"
    class Level;

    class Game {
    public:
       Game() { mainMenu = MainMenu(this); }
       void input();
       void setLevel(Level* level);
       LevelMenu& getLevelMenu() { return levelMenu; }
    private:
       Level* currLevel;
       MainMenu mainMenu;
       LevelMenu levelMenu;
    };

在我的mainMenu课程中,我想让游戏课程的当前课程更改为levelMenu:

    #include "game.h"

    class MainMenu {
    public:
       MainMenu(Game* game) { this->game = game; }
       void input(sf::Event event) {
          if (event.type == sf::Event::MouseButtonReleased) {
             game->setLevel(game->getLevelMenu());
          }
       }
    private:
       Game* game;
    };

1 个答案:

答案 0 :(得分:2)

我觉得这看起来不错,只是一些一般的建议:

  • 为您处理游戏变量的抽象基类Menu。
  • 学习使用各种类型的引用和共享指针。
  • 保持界面,游戏机制和对象完全分离,查看MVC,模型视图控制器的基础知识。

我建议您不要过于担心这样的设计,很有可能您会意识到您的设计不起作用或者不是最优的在构建游戏的其余部分之后,然后您可以在构建其他子系统时学到更多知识,然后重写它。