【发布时间】:2021-04-16 10:31:04
【问题描述】:
问题是我有一个控制台平台游戏(一切都写在一个 .cpp 文件中)。我有一个缓冲区结构,我的目标是将结构的定义移动到 engine.h 并将缓冲区函数的定义移动到 engine.cpp。
engine.h 文件:
struct buffer
{
private:
char** arr;
char** dum;
int width;
int height;
vector<platform> vc;
vector<enemy*> ve;
public:
buffer(const int, const int);
void fill(character, vector<enemy*>);
void render(const int, const int);
char** getArray();
void addPlatforms();
void addE(enemy*);
vector<platform> getPlatforms();
vector<enemy*> getEnemies();
~buffer();
};
engine.cpp 文件:
#include "engine.h"
#include <fstream>
#include <vector>
void buffer::fill(chracter charact, vector<enemy*> ve)
{
for (int i = 0; i < this->height; ++i)
{
for (int j = 0; j < this->width; ++j)
{
this->arr[i][j] = this->dum[i][j];
}
}
this->arr[charact.getY()][charact.getX()] = '@';
for (enemy* e : ve)
{
if (e->isAlive())
this->arr[e->getY()][e->getX()] = 'M';
}
this->arr[0][max(charact.getX() - 10, 0)] = '0' + charact.getCoins() / 2;
}
像这里 fill() 获取字符对象和结构字符在 main.cpp 中定义。
struct character
{
private:
int x;
int y;
int vx;
int vy;
bool onGround = false;
bool up = false;
bool left = false;
bool right = false;
bool jump = false;
int coins = 0;
int i = 0;
public:
character(const int, const int);
int getX();
int getY();
int getVy();
int getCoins();
void setRight(bool);
void setLeft(bool);
void setUp(bool);
void setOnground(bool);
int update(vector<platform>, vector<enemy*>);
void collide(int vx, int vy, vector<platform>);
bool collideO(platform);
};
int main()
{
buffer screen{ 209, 15 };
character charact{0, 12 };
enemy en1{ 35, 12 };
enemy en2{ 73, 12 };
enemy en3{ 78, 8};
enemy en4{ 51, 12 };
screen.addE(&en1);
screen.addE(&en2);
screen.addE(&en3);
screen.addE(&en4);
screen.fill(charact, screen.getEnemies());
问题是engine.cpp 看不到Main.cpp 中定义的字符结构,我该如何解决呢?我在考虑 lambdas,但我很菜鸟。 如果您需要更多解释或更多代码,请询问我:)
【问题讨论】:
-
也将字符移动到自己的头文件中。
-
正如@ChrisMM 所说。或者您可以将其移至引擎标题。并且不要忘记在标题中使用 #pragma once 以避免以后出现循环包含。
-
我做了但是engine.cpp仍然看不到字符
标签: c++