質問

私が書いているゲームでは、次のことが必要です 2 つの座標セットの間の距離の整数値を見つけます. 。それは 2次元配列 さまざまなマップを保持します。(初代ゼルダみたいに)そこから遠ざかるほど、 センター (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];
役に立ちましたか?

解決

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

他のヒント

それはマイナスではなく^ 2 + b ^ 2= c ^ 2です。否定的な引数でsqrtを呼び出されたら、あなたはあなた自身のものです。

あなたの平方根の中の正方形を差し引いています( "... - pow ...")。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top