对于我正在编写的游戏,我需要找到两组坐标之间距离的整数值。它是一个 2D数组,用于保存不同的地图。 (就像原始的塞尔达)。你离中心(5,5)越远,由于敌人的难度增加,这个数字应该越高。理想情况下,它应该介于0到14之间。 数组为11x11 。
现在,我尝试使用我记得来自高中的毕达哥拉斯公式,但它正在喷出溢出数。我无法弄清楚原因。
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];
答案 0 :(得分: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 :(得分:0)
它是^ 2 + b ^ 2 = c ^ 2,而不是减去。一旦你用负参数调用sqrt,你就可以自己动手了。
答案 2 :(得分:0)
你在平方根中减去方格,而不是添加它们(“...- pow ......”)。