문제

게임의 경우 의 두 세트 사이의 거리에 대한 정수 값을 찾아야합니다.다른지도를 보유하는 2D 어레이 입니다.(원래 젤다처럼). 중심 (5,5) 에서 더 많은 것은 적을 증가시키는 데 어려움이 지남에 따라 숫자가 높아져야합니다.이상적으로는 0 ~ 14 이어야합니다. 배열은 11x11 입니다.

이제는 고등학교에서 기억하는 pythagoras 공식을 사용하려고 노력했지만 오버 플로우 숫자 을 분출합니다.나는 그 이유를 알아낼 수 없다.

        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 return double를 반환하고 int로 캐스팅합니다.

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

다른 팁

^ 2 + b ^ 2= c ^ 2, 빼기가 아닙니다.부정적인 인수로 SQRT를 호출하면, 당신은 자신의 것입니다.

( "... pow ...")를 추가하는 대신 사각형 루트 안에 사각형을 뺍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top