gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:47:23 24 4
gpt4 key购买 nike

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

#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,它有draw()方法,后来的Tickable,它有onTick()等。 .但我很确定我这样做是错误的。你能告诉我更好的想法吗?或者让它正常工作,因为这给我带来了太多错误,无法在这里编写(VS 2017)

最佳答案

首先,为什么要使用这个?

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) 可以。 )。

vector 上的 for 循环应该使用迭代器:

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

按照良好的做法,您应该将代码编写在不同的文件中。
Engine.h用于引擎声明,Engine.cpp用于实现。
对于玩家来说也是如此。

关于C++类继承(游戏结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55191273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com