我怎样才能检测到瓷砖可以穿越的时间

时间:2016-07-13 20:10:37

标签: c++ vector random 2d

我正在尝试使用名为“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];
        }
    }

1 个答案:

答案 0 :(得分:0)

我打赌这个问题来自你计算数组索引的方式:

  

int Coord = (tempx % 512) * tempy;

如果map表示bool的大小为width * height的矩形数组,那么您应该像

一样访问您的数组
array[(y * width) + x]

因此,y位置增加1会使索引移位width个位置或一行(因为元素是连续存储的),并且x位置会增加一个位置恰好改变一个指数。