2014-01-09 3 views
-1

Для игры, которую я пишу, мне нужно найти целочисленное значение для расстояния между двумя наборами координат. Это 2D-массив, который содержит разные карты. (Как оригинальная зеландия). Чем дальше вы идете от центра (5,5), тем выше число должно быть, так как сложность врагов возрастает. В идеале это должно быть между 0 и 14. Массив - 11x11.C++: «Расстояние» между двумя координатами в 2D-массиве

Теперь, я пытался использовать Пифагор формулы, что я помню из лицейных, но это извергает номер переполнения. Я не могу понять, почему.

 srand(rand()); 
     int distance=sqrt(pow((5-worldx), 2)-pow((5-worldy), 2)); 
     if(distance<0) //alternative to abs() 
     { 
      distance+=(distance * 2); 
     } 
     if(distance>13) 
     { 
      distance=13; 
     } 

     int rnd=rand()%(distance+1); 

     Monster testmonster = monsters[rnd]; 
+1

Прежде всего, sqrt возвращает двойной, поэтому расстояние должно быть двойным – CoryKramer

ответ

1

srand(rand()); не имеет смысла, оно должно быть srand(time(NULL));

не используют pow для квадрата, просто используйте x*x

ваша формула тоже неправильно, вы должны добавить номер вместе не минус

sqrt возвращение double и отлитые до int округляют его

Я думаю sqrt всегда возвращать положительное число

вы знаете abs есть право? почему бы не использовать его? также distance = -distance лучше distance+=(distance * 2)

srand(time(NULL)); 

int dx = 5 - worldx; 
int dy = 5 - worldy; 
int distance=sqrt(dx * dx + dy * dy); 
if(distance>13) 
{ 
    distance=13; 
} 

int rnd=rand()%(distance+1); 

Monster testmonster = monsters[rnd]; 
+0

спасибо. Очень глупая ошибка. Причина, по которой я использую srand (rand()), состоит в том, что проект делает много случайных вещей, и использование его со временем каждый раз иногда происходит так быстро, что часы не меняются, и это дает мне такие же рандомы. используя предыдущий случайный случай, когда семена избегают этого. Я попробовал if, а не abs(), потому что я подозревал, что это проблема. – Cinaed666

+0

вам нужно только один раз называть 'srand', а не каждый раз, когда вы хотите использовать' rand' –

+0

Со статическим семенем, похожим на rand(), который будет давать одинаковый результат каждый раз. – Cinaed666

0

Это a^2 + b^2 = c^2, а не минус. Когда вы вызываете sqrt с отрицательным аргументом, вы сами по себе.

0

Вы вычитанием квадраты внутри квадратного корня, а не добавлять их («...- пау ...»).

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