我还是新手,所以如果我提供太多或者没有足够的信息来解决我的问题,我会提前道歉。
向下跑
这个问题并不像游戏相关的问题,但是对于我的程序所做的一些背景来说......就像游戏一样流氓。
好的,所以我有一个具有成员2D字符向量的类(字符被操纵以表示“地牢”)。一切都无缝衔接。我想扩展我的程序可以做的事情,所以我决定创建一个新的类来替换字符的2D向量,这样char就是新类的可视化表示,其他变量可以与char一起存储。
为简单起见,我试图删除此问题不需要的内容。这个新类名为 Tile - 表示用于地下城级别的空间。 Tile 有:
一个名为displayChar的char变量..默认为''更改以表示它包含的内容
(其他变量..)
问题/我的可怜猜测
我不完全理解编程语法/实现的一些概念,所以请不要判断。
我想我需要用新的Tile对象填充它并将它们推送到 2D平铺矢量?
我操纵char值的其他方法给出错误。
我想我应该改变方法来指向 Tile 对象并使用 setDisplayChar('')方法来更改它 值?
我的at(int,int)方法用于返回该位置的char
我不善于改变某些方面的工作方式,而且我通常最终会弄乱我的代码。我将发布与此相关的代码。我非常感谢您提供的任何帮助。如果我需要添加更多,请告诉我。 (我会尝试将代码保持最小化,仅限于相关方法)。谢谢!
DungeonLevel.h
#include "Tile.h"
#include <vector>
#include <random>
class DungeonLevel {
public:
DungeonLevel(int iWidth, int iHeight, std::mt19937 & mt);
~DungeonLevel(void);
void dump();
char at(int x, int y);
int getWidth();
int getHeight();
private:
std::vector<std::vector<Tile>> m_vvTiles; //Tile was char
};
DungeonLevel.cpp
#include <iostream>
#include <random>
#include "DungeonLevel.h"
using namespace std;
DungeonLevel::DungeonLevel(int iWidth, int iHeight, std::mt19937 & mt){
// Initialize the blank vector
m_vvTiles.resize(iHeight);
for(auto it = m_vvTiles.begin(); it != m_vvTiles.end(); it++ ){
// Tile tempTile = new;?
(*it).resize(iWidth,' ');
}
// divide the level into 4x2 chunks
int iChunkWidth = iWidth / 4;
int iChunkHeight = iHeight / 2;
// Taking the easy way out, and generating
// a loop of tunnels first to drop rooms on to
for( int x = (iChunkWidth/2); x <= ((3 * iChunkWidth) + (iChunkWidth/2)$
m_vvTiles[iChunkHeight/2][x] = '#';
m_vvTiles[iChunkHeight + (iChunkHeight/2)][x] = '#';
}
for( int y = (iChunkHeight/2); y <= (iChunkHeight + (iChunkHeight/2)); $
m_vvTiles[y][iChunkWidth/2] = '#';
m_vvTiles[y][(3 * iChunkWidth) + (iChunkWidth/2)] = '#';
}
void DungeonLevel::dump(){
for( auto itOuter = m_vvTiles.begin(); itOuter != m_vvTiles.end(); itOu$
for( auto itInner = (*itOuter).begin(); itInner != (*itOuter).e$
cout << *itInner.getDisplayChar(); ///Updated:: CAUSING ERROR//
}
cout << endl;
}
}
//SEVERAL IRRELEVANT LINES FOR THIS PROBLEM..
}
char DungeonLevel::at(int x, int y){
return m_vvTiles[y][x].getDisplayChar();
//return m_vvTiles[y][x]; WORKED BEFORE
}
Tile.h
#include "Entity.h"
#include <vector>
class Tile : public Entity {
public:
Tile(void);
virtual ~Tile(void);
//void setEntity(Entity * entityToSet); BOTH IRRELEVANT
//Entity * getEntity();
void setDisplayChar(char displayCharToSet);
char getDisplayChar();
//virtual void dumpObjectData(); IRRELEVANT AT THIS TIME
private:
char displayChar;
//Entity * theEntity; IRRELEVANT AT THIS TIME
};
Tile.cpp
#include "Tile.h"
#include "Entity.h"
using namespace std;
Tile::Tile(void){
displayChar = '.';
//theEntity = NULL;
}
Tile::~Tile(void){
}
void Tile::setDisplayChar(char displayCharToSet){
displayChar = displayCharToSet;
}
char Tile::getDisplayChar(){
return displayChar;
}
* 继承我现有的错误:*
对于DungeonLevel.cpp中的方法dump(),
答案 0 :(得分:1)
我的一些问题与我的答案
我想我需要用新的Tile对象填充它并将它们推送到2D Tile向量?
不需要调整大小并用Tile对象填充它。非常像你在char数组时所做的那样。新的没有进入它。
我想我应该改变方法来获取指向Tile对象的指针并使用setDisplayChar('')方法来改变它的值?
我会使用参考。
我以为我可以将其更改为return m_vvTiles[y][x].getDisplayChar()
但我收到错误。
这听起来对我来说,你得到了什么错误?
关于你重新设计的一切听起来都很有动力。但是,在进行重大重组之前,最好还是备份。