gpt4 book ai didi

c++ - vector 图,坏访问器

转载 作者:行者123 更新时间:2023-11-28 00:31:03 25 4
gpt4 key购买 nike

我正在和几个 friend 一起开发地牢游戏,并且正在研究寻路。该游戏是基于图 block 的,我们计划实现的寻路是这样的:

类 PathMapper 生成一个网格,其中包含每个图 block 与给定图 block 的距离

怪物类使用此网格向给定的方 block 移动(现在,始终是玩家)

我们计划有 4 个玩家,但我们/我希望脚本支持动态数字。每个玩家都有一个整数形式的 ID。

每个玩家都需要 PathMapper 生成一个网格,所有怪物都可以共享它们(尽管生成网格很慢,每个玩家只做一次,对所有怪物来说,似乎是一个不错的寻路解决方案)。

我有一个名为“PathMapper”的类,它生成瓷砖距离起始瓷砖的网格。理论上,将创建其中的 4 个——每个玩家一个。敌人要找到玩家的路径,它会询问玩家的 ID,然后询问相应的瓷砖网格,它将用于寻路。服务器使用“createMap(playerID, playerXPosition, playerYPosition)”更新这些网格。

所以每个网格都是 vector 的 vector ,映射到私有(private) map “pathMap”中玩家的 ID,怪物可以通过“getLocalPath()”访问的值

问题是,尽管“createMap”编译正常,但一旦尝试复制第一堵墙(“pathMap[ID][x].push_back(9000);”),我就会得到“EXE_BAD_ACCESS”。我应该注意到它在尝试(并且失败)插入“9000”之前经历了大约十二次迭代我确信 dungeon->width 和 dungeon->height 是正确的(现在都是 20;对于真实游戏),ID 的“正确性”应该不会影响代码的访问者,对吧?

我有点困惑,b/c 我认为我正在做的是保留空间,遍历它,并尝试访问我刚刚保留的内存:

reserve(20)
for(i=0; i<20; i++)
reserve(20)
for(j=0; j<20; j++)
access(i,j) // error!?

代码如下:

class PathMapper{
public:
PathMapper(Dungeon* d);
void createMap(int ID, int x, int y);

// returns values of the surrounding tiles (up, right, down, left)
std::vector<int> getLocalPath(int ID, int x, int y);
private:
Dungeon* dungeon;
std::vector< std::vector<bool> > wallBitmap;
std::map<int, std::vector< std::vector<int> > > pathMap;
}

PathMapper::PathMapper(Dungeon* d) {
dungeon = d;
wallBitmap = dungeon->getWalls(); // bools tell if there is a wall on a tile
}

void PathMapper::createMap(int ID, int x, int y) {
pathMap[ID].reserve(dungeon->width());
for(int x=0; x<dungeon->width(); x++) {
pathMap[ID][x] = std::vector<int>();
pathMap[ID][x].reserve(dungeon->height());
for(int y=0; y<dungeon->height(); y++) {
if(wallBitmap[x][y]) {
pathMap[ID][x].push_back(9000); // error is here
}
else {
pathMap[ID][x][y] = -1;
}
}
}

// code to calculate values here; shouldn't affect the code above

}

最佳答案

reserve不改变 vector 的大小(只有容量),你需要resize .

关于c++ - vector 图,坏访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22925185/

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