C ++类继承(游戏结构)

时间:2019-03-15 22:10:20

标签: c++ visual-c++ c++14

我正在尝试制作一些游戏引擎(我知道,应该做一个实际的游戏)。 可悲的是在项目结构上失败了。看起来像这样(我第五次尝试的足迹):

#include <iostream>
#include <vector>
#include <windows.h> 

using namespace std;

class Player;
class Engine {
private:
    CHAR_INFO *chiBuffer;
    int width = 0;
    int height = 0;

    vector <Player> players;

public:
    Engine(int x = 120, int y = 30) {
        chiBuffer = new CHAR_INFO[x*y];
    }

    void addPlayer(Player player) {
        players.push_back(player);
    }

    void render() {
        for (int i = 0; i < players.size(); i++) {
            Player *player = &players[i];
            player->draw();
        }
    }

protected:
    inline CHAR_INFO& getPixel(int x, int y) { return chiBuffer[x + width * y]; }
};

class Drawable : Engine {
protected:
    inline CHAR_INFO& getPixel(int x, int y) { return Engine::getPixel(x, y); }
    virtual void draw() = 0;
};

class Player : Drawable {
protected:
    int x = 0;
    int y = 0;
public:
    void draw() {
        getPixel(x, y).Char.UnicodeChar = L'*';
    }
};

int main() {

    Engine *eng = new Engine(120, 30);
    Player p;
    eng->addPlayer(p);

    return 0;
}

我想使其易于扩展,因此在我脑海中诞生了一个创建主类(Engine)子类的想法Drawable wich将具有draw()方法,而Tickable wich将具有onTick()等..但是我很确定我做错了。你能告诉我更好的主意吗?或使其正常工作,因为这给了我太多错误,无法在此处编写(VS 2017)

1 个答案:

答案 0 :(得分:0)

首先,为什么要使用它?

for (int i = 0; i < players.size(); i++) {
        Player *player = &players[i];
        player->draw();
 }

与以下各项相同:for(...) { players[i].draw() ;}
不要在不需要的地方使用变量和指针(就像在您的main中一样,不要使用new关键字:这毫无意义。Engine e = Engine(120,30)可以。)

向量上的for循环应使用Iterators:

for (auto it = begin (vector); it != end (vector); ++it) {
    it->draw;
}

按照良好的做法,应将代码编写在不同的文件中。
Engine.h用于引擎声明,Engine.cpp用于实现。
播放器也一样。