我正在尝试使用名为“map”的bool向量检测“start”和“end”是否在可遍历的位置,但是当我运行程序时,start和end有时会出现在不可遍历的位置。我已经包含了我的代码的一小部分,它处理初始化start,end的位置使用相同的代码。
start = tydle::Vector(rand() % 512, rand() % 512);
end = tydle::Vector(rand() % 512, rand() % 512);
nodes.resize(0);
int tempx = start.x;
int tempy = start.y;
int Coord = (tempx % 512) * tempy;
while (!map[Coord]){
start.x = rand() % 512;
start.y = rand() % 512;
tempx = start.x;
tempy = start.y;
Coord = (tempx % 512) * tempy;
}
下面是使用elswhere的代码段,它使用相同的while循环并且工作正常:
for (int i = 0; i < numNodes; i++){
tempNodes[i].resize(2);
tempNodes[i][0] = rand() % 512;
tempNodes[i][1] = rand() % 512;
int mapCood = (tempNodes[i][0] % 512) * tempNodes[i][1];
while (!map[mapCood]){
tempNodes[i][0] = rand() % 512;
tempNodes[i][1] = rand() % 512;
mapCood = (tempNodes[i][0] % 512) * tempNodes[i][1];
}
}
答案 0 :(得分:0)
我打赌这个问题来自你计算数组索引的方式:
int Coord = (tempx % 512) * tempy;
如果map
表示bool
的大小为width * height
的矩形数组,那么您应该像
array[(y * width) + x]
因此,y
位置增加1会使索引移位width
个位置或一行(因为元素是连续存储的),并且x
位置会增加一个位置恰好改变一个指数。