-1

对于我正在编写的游戏,我需要为两组坐标之间的距离找到一个整数值。这是一个包含不同地图的二维数组。(就像原来的塞尔达)。距离中心 (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];
4

3 回答 3

1

srand(rand());没有意义,应该是srand(time(NULL));

不要pow用于正方形,只需使用x*x

你的公式也错了,你应该把数字加在一起而不是减

sqrtreturndouble和 cast toint将四舍五入

我认为sqrt总是返回正数

你知道abs存在对吗?为什么不使用它?也distance = -distancedistance+=(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];
于 2014-01-09T00:29:13.633 回答
0

它是 a^2 + b^2 = c^2,而不是负数。一旦您使用否定参数调用 sqrt,您就只能靠自己了。

于 2014-01-09T00:29:11.780 回答
0

您在平方根中减去平方,而不是添加它们(“...-pow ...”)。

于 2014-01-09T00:32:05.060 回答