Pregunta

Para un juego que estoy escribiendo necesito encontrar un valor entero para la distancia entre dos conjuntos de coordenadas.Es un matriz 2D que contiene los diferentes mapas.(Como el zelda original).Cuanto más te alejas del centro (5,5) cuanto mayor debe ser el número ya que aumenta la dificultad de los enemigos.Lo ideal debería ser entre 0 y 14.El la matriz es 11x11.

Ahora, intenté usar el Pitágoras Fórmula que recuerdo de la escuela secundaria, pero está saliendo a borbotones. números desbordados.No puedo entender por qué.

        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];
¿Fue útil?

Solución

srand(rand()); no tiene sentido, debería serlo srand(time(NULL));

no usar pow para cuadrado, solo usa x*x

tu fórmula también es incorrecta, debes sumar el número, no menos

sqrt devolver double y lanzar a int lo redondeará hacia abajo

creo sqrt siempre devuelve un número positivo

sabes abs existe verdad?¿Por qué no usarlo?también distance = -distance es mejor que 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];

Otros consejos

es un ^ 2 + b ^ 2= c ^ 2, no menos.Una vez que llame a SQRT con un argumento negativo, estás por su cuenta.

Estás restando cuadrados dentro de su raíz cuadrada, en lugar de agregarlos ("...- pow ...").

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top