2016-07-13 5 views
-2

Я пытаюсь обнаружить, что «start» и «end» и в проходящем местоположении используется вектор bools, называемый «map», но когда я запускаю программу, иногда появляются и начало и конец в непереходном месте. Я включил небольшой раздел моего кода, который посвящен инициализации мест начала, в конце используется тот же код.Как я могу обнаружить, когда черепица проходит?

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, который использует тот же во время цикла и работает отлично:

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

WTH is 'tydle :: Vector' ?? –

+0

tydle - класс, извините, должен был упомянуть, что tydle :: Vector - это система координат 2d – simfrek

+1

Опубликовать [MCVE], демонстрируя вашу проблему, пожалуйста. –

ответ

0

Держу пари, проблема происходит от того, что вы вычислительное индексы массива:

int Coord = (tempx % 512) * tempy;

Если map представляет собой прямоугольный массив bool, размер width * height, то вы должны получить доступ к массив как

array[(y * width) + x] 

так что увеличение одного в вашей y позиции сдвигает индекс по width местах, или один ряд (так как элементы сохраненный смежно), и увеличение одного в вашем x позиции сдвигает ровно один индекс.

+0

он делает это, но нечетным образом это просто длинный список от 0 до 512 * 512 в одном массиве размеров, я пробовал это, и он не работал, map - это вектор bools – simfrek

+0

@simfrek вы сделали тот же массив расчет индекса по всему вашему проекту? Там может быть больше, чтобы исправить –

+0

да и в других местах работает – simfrek

Смежные вопросы