在来到这里之前我尝试过很多东西,但我似乎无法解决我的问题!
我有一个随机生成的地图,这是一个存储切片对象的数组。这是在启动时随机生成的。 我有玩家坐标设置功能,根据地图旅行改变坐标。 然后我有一个函数,它返回基于玩家坐标存储在地图数组中的内容。 在坐标的构造函数中,我必须将x和y pos设置为0,否则代码将不会运行。
因此,当我运行代码时,它会显示第一个瓷砖,当我行进N,E,S或W时,它会显示新的瓷砖,但是x和y坐标只保留0,它们不会随着我的旅行调整,我想也许这与构造函数有关:
Player::Player()
{
posX = 0;
posY = 0;
}
Player::~Player()
{
}
int Player::getX()
{
return Player::posX;
}
int Player::getY()
{
return Player::posY;
}
int Player::changeX(int xChange)
{
int x = getX();
x = x + xChange;
posX = x;
return x;
}
int Player::changeY(int yChange)
{
int y = getY();
y = y + yChange;
posY = y;
return y;
}
以下是显示图块和坐标的代码部分。
Terrain* GameMenu::playerPos()
{
Player display;
Map mapArray;
return mapArray.map[display.getX()][display.getY()];
}
int GameMenu::doMenu()
{
while(int loop = 1)
{
loop = 1;
Player display;
cout << display.getY() << display.getY() <<endl << endl;
cout << "You are currently in an area that looks like a "
<< playerPos()->getName()<<endl<<endl;
cout << "What would you like to do next?"<<endl<<endl;
cout << "1. Rest" << endl;
cout << "2. Buy food" << endl;
cout << "3. Travel" << endl;
cout << "4. Search" << endl;
cout << "5. Hunt" << endl;
对不起,如果它有点模糊,这是我第一次做这样的事情,并且非常感谢每一点帮助。
答案 0 :(得分:3)
播放器被重复创建并作为局部变量销毁。它应该是更长寿的,可能是Game或GameMenu的成员,或者你的main()函数中的一个局部变量,你通过引用传递给你的Game对象。
答案 1 :(得分:1)
你的Terrain* GameMenu::PlayerPos()
就像Dori鱼。它不存储地图 - 每次调用它时都会重新创建一个地图,然后在函数结束时删除它。您告诉它地图应该移动的位置,它存储新地图,然后功能结束 - display
和mapArray
超出范围。你的数据永远消失了。
要在多个函数调用之间存储数据,请考虑使地图和播放器成为函数main()
或类GameMenu
的成员,如下所示:
class GameMenu
{
public:
GameMenu()
{
m_map = new Map();
m_player = new Player();
}
~GameMenu()
{
delete m_map;
delete m_player;
}
inline Terrain *GetPlayerPos() {return mapArray.map[m_player.getX()][m_player.getY()];};
private:
Map *m_map;
Player *m_player;
};
此外,您对Player::changeX
和Player::changeY
的代码非常复杂。你为什么不这样做?
int Player::changeX(int delta)
{
posX += delta;
return posX;
}
int Player::changeY(int delta)
{
posY += delta;
return posY;
}