我还是新手,所以如果我为我的问题提供太多或不够的信息,我提前道歉。
破败不堪
这个问题不是与流氓游戏相关的问题,但对于我的程序所做的一些背景知识..类似于流氓游戏。
好的,所以我有一个具有成员 2D 字符向量的类(这些字符被操纵以表示“地牢”)。一切都无缝地工作。我想扩展我的程序可以做的事情,所以我决定创建一个新类来替换 chars 的 2D 向量,以便 char 只是新类的视觉表示,其他变量可以与该 char 一起存储。
为了简单起见,我试图删除这个问题不需要的内容。这个新类称为Tile - 表示用于地牢关卡的空间。瓷砖有:
一个名为 displayChar.. 的 char 变量默认为 ' ' 更改以表示它包含的内容
(其他变量..)
问题/我可怜的猜测
我不是最擅长完全理解编程语法/实现的一些概念,所以请不要判断。
- 我填充字符向量的方式,我将其调整为游戏板的宽度,并将所有内容设置为'',因为所有值都是字符
我想我需要用新的 Tile 对象填充它并将它们推送到 2D Tile 矢量?
我操纵 char 值的其他方法正在出错。
我想我应该更改方法以获取指向Tile 对象的指针并使用setDisplayChar(' ')方法来更改其值?
我的 at(int, int) 方法用于返回该位置的字符
- 我以为我可以将其更改为“返回 m_vvTiles[y][x].getDisplayChar()”,但出现错误
我不擅长改变某些东西的工作方式,而且我通常最终会把我的代码弄得一团糟。我将发布与此相关的代码。我非常感谢您提供的任何帮助。如果我需要添加更多内容,请告诉我。(我会尽量将代码最小化为仅相关的方法)。谢谢!
地牢等级.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
};
地牢关卡.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
}
瓷砖.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
};
瓷砖.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(),