gpt4 book ai didi

c++ - 我怎样才能有一个 map 数组?

转载 作者:行者123 更新时间:2023-11-30 04:21:28 25 4
gpt4 key购买 nike

我如何在我的游戏中加载关卡,因为第 1 层是对象,第 2 层是角色等等。我只需要 3 层,它们都会层层叠叠。即有一朵透明背景的花放在下面层的草或泥土上。我也想从同一个文件中读取。我将如何去做这件事?任何帮助,将不胜感激。

我从关卡文件中加载 map ,该文件只是与图 block 表中的图 block 相对应的数字。

下面是解释它的代码

void LoadMap(const char *filename, std::vector< std::vector <int> > &map)
{
std::ifstream openfile(filename);
if(openfile.is_open())
{
std::string line, value;
int space;

while(!openfile.eof())
{
std::getline(openfile, line);

if(line.find("[TileSet]") != std::string::npos)
{
state = TileSet;
continue;
}
else if (line.find("[Layer1]") != std::string::npos)
{
state = Map;
continue;
}

switch(state)
{
case TileSet:
if(line.length() > 0)
tileSet = al_load_bitmap(line.c_str());
break;
case Map:

std::stringstream str(line);
std::vector<int> tempVector;

while(!str.eof())
{
std::getline(str, value, ' ');
if(value.length() > 0)
tempVector.push_back(atoi(value.c_str()));
}
map.push_back(tempVector);
break;
}
}
}
else
{
}
}

这就是它绘制 map 的方式。此外,图 block 尺寸为 1280 x 1280,tilesizeX 和 tilesizeY 为 64

void DrawMap(std::vector <std::vector <int> > map)
{
int mapRowCount = map.size();

for(int i, j = 0; i < mapRowCount; i ++)
{
int mapColCount = map[i].size();

for (int j = 0; j < mapColCount; ++j)
{
int tilesetIndex = map[i][j];
int tilesetRow = floor(tilesetIndex / TILESET_COLCOUNT);
int tilesetCol = tilesetIndex % TILESET_COLCOUNT;
al_draw_bitmap_region(tileSet, tilesetCol * TileSizeX, tilesetRow * TileSizeY, TileSizeX, TileSizeY, j * TileSizeX, i * TileSizeX, NULL);
}
}
}

编辑:http://i.imgur.com/Ygu0zRE.jpg

最佳答案

看来您需要不止一个二维数组。

尝试这样的事情:

unsigned int map[3][8][8];
#define OBJECTS_LAYER 0
#define CHARACTER_LAYER 1
#define FLOWER_ID 2

//...

map[OBJECTS_LAYER][3][4] = FLOWER_ID;

编辑1

根据 OP 的描述,层是一个 8 x 8 的二维数组,表示为:

unsigned int layer[8][8];

Th OP 的 map 有多个图层。这转化为层的容器。
一种方法是使用数组的另一个维度。很像分层蛋糕,或建筑物的地板。

unsigned int map[/* maximum layers */][8 /* from layer above */][8 /* from layer above */];

要访问第 1 层的位置 [3,4],表达式为:

map[0][3][4]

由于 C++ 中的索引是从零开始的,因此第一层的索引为零。

要访问建筑物的第 3 层,第 2 行,第 7 列,可以使用命名法:

empire_state_building[2][1][6]

关于c++ - 我怎样才能有一个 map 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14531615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com