-1

私が書いているゲームでは、2 つの座標セット間の距離の整数値を見つける必要があります。これは、さまざまなマップを保持する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];
4

3 に答える 3

1

srand(rand());意味がありません、そうあるべきですsrand(time(NULL));

pow正方形には使用しないでください。x*x

あなたの数式も間違っています。マイナスではなく、数値を加算する必要があります

sqrtreturndoubleと cast tointは切り捨てます

私は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];
于 2014-01-09T00:29:13.633 に答える
0

マイナスではなく、a^2 + b^2 = c^2 です。負の引数で sqrt を呼び出すと、自分でできます。

于 2014-01-09T00:29:11.780 に答える