2014-01-09 22 views
-1

게임을 작성하는 중 좌표 사이의 거리에 대한 정수 값을 찾으십시오. 다른지도를 보유하고있는 2D 배열입니다. (원래 젤다처럼). 더 멀리 가면 센터 (5,5)에서 증가할수록 적의 난이도가 높아 지므로 숫자가 높아야합니다. 0과 14 사이의 이 이상적이어야합니다.. 배열은 11x11입니다.C++ : 2D 배열의 2 좌표 사이의 "거리"

지금, 나는 내가 고등학교에서 기억 피타고라스 공식을 사용하려고하지만 오버 플로우 번호 밖으로 분출입니다. 나는 이유를 알 수 없다.

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

우선 sqrt는 double을 반환하므로 거리는 double이되어야합니다. – CoryKramer

답변

1

srand(rand()); 이해가되지 않습니다, 그것은 srand(time(NULL));

그냥 x*x

수식도 잘못된 것입니다, 당신은 마이너스되지 함께 번호를 추가해야 사용, 사각형에 대한 pow를 사용하지 않는해야

sqrtdouble이고 캐스트가 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]; 
+0

감사합니다. 아주 어리석은 실수. 내가 srand (rand())를 사용하는 이유는 프로젝트가 무작위로 많은 일들을하기 때문이며 때로는 시간이 지남에 따라 시간이 너무 빨라서 시계가 바뀌지 않고 똑같은 문제가 발생하기 때문입니다. 이전 무작위를 시드로 사용하면이를 피할 수 있습니다. 나는 그것이 문제라고 의심하기 때문에 abs() 대신 if를 시도했다. – Cinaed666

+0

당신은 단지'srand'를 한 번만 호출하면되고,'rand'를 사용할 때가 아닙니다. –

+0

rand() 같은 정적 시드를 사용하면 같은 결과를 얻을 수 있습니다. – Cinaed666

0

마이너스가 아니라^2 + b^2 = c^2입니다. 일단 음의 인수로 sqrt를 호출하면 스스로 해결할 수 있습니다.