C ++: «Расстояние» между 2 координатами в 2D массиве

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

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

        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

Решение

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];
1

Другие решения

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

0

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

0
По вопросам рекламы [email protected]