如何将具有字符的2D矢量的类转换为具有char变量的另一个obj的2D矢量?

时间:2013-04-08 21:01:27

标签: c++ class object implementation 2d-vector

我还是新手,所以如果我提供太多或者没有足够的信息来解决我的问题,我会提前道歉。


向下跑

这个问题并不像游戏相关的问题,但是对于我的程序所做的一些背景来说......就像游戏一样流氓。

好的,所以我有一个具有成员2D字符向量的类(字符被操纵以表示“地牢”)。一切都无缝衔接。我想扩展我的程序可以做的事情,所以我决定创建一个新的类来替换字符的2D向量,这样char就是新类的可视化表示,其他变量可以与char一起存储。

为简单起见,我试图删除此问题不需要的内容。这个新类名为 Tile - 表示用于地下城级别的空间。 Tile 有:

  • 一个名为displayChar的char变量..默认为''更改以表示它包含的内容

  • (其他变量..)


问题/我的可怜猜测

我不完全理解编程语法/实现的一些概念,所以请不要判断。

  • 我填充字符向量的方式,我将其调整到游戏板的宽度,并将所有值设置为''因为所有值都是字符
  • 我想我需要用新的Tile对象填充它并将它们推送到 2D平铺矢量?

  • 我操纵char值的其他方法给出错误。

  • 我想我应该改变方法来指向 Tile 对象并使用 setDisplayChar('')方法来更改它 值?

  • 我的at(int,int)方法用于返回该位置的char

  • 我以为我可以将其更改为“return m_vvTiles [y] [x] .getDisplayChar()”但是我收到错误

我不善于改变某些方面的工作方式,而且我通常最终会弄乱我的代码。我将发布与此相关的代码。我非常感谢您提供的任何帮助。如果我需要添加更多,请告诉我。 (我会尝试将代码保持最小化,仅限于相关方法)。谢谢!


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(),

1 个答案:

答案 0 :(得分:1)

我的一些问题与我的答案

我想我需要用新的Tile对象填充它并将它们推送到2D Tile向量?

不需要调整大小并用Tile对象填充它。非常像你在char数组时所做的那样。新的没有进入它。

我想我应该改变方法来获取指向Tile对象的指针并使用setDisplayChar('')方法来改变它的值?

我会使用参考。

我以为我可以将其更改为return m_vvTiles[y][x].getDisplayChar()但我收到错误。

这听起来对我来说,你得到了什么错误?

关于你重新设计的一切听起来都很有动力。但是,在进行重大重组之前,最好还是备份。