Domanda

Per un gioco che sto scrivendo ne ho bisogno trovare un valore intero per la distanza tra due insiemi di coordinate.È un matrice 2D che contiene le diverse mappe.(Come la Zelda originale).Più vai lontano da centro (5,5) più alto dovrebbe essere il numero poiché aumenta la difficoltà dei nemici.Idealmente dovrebbe essere tra 0 e 14.IL l'array è 11x11.

Ora, ho provato a usare il file Pitagora formula che ricordo dal liceo, ma sta vomitando numeri in eccesso.Non riesco a capire perché.

        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];
È stato utile?

Soluzione

srand(rand()); non ha senso, dovrebbe esserlo srand(time(NULL));

non usare pow per quadrato, basta usare x*x

anche la tua formula è sbagliata, dovresti sommare i numeri e non i meno

sqrt ritorno double e lanciare a int lo arrotonderà per difetto

Penso sqrt restituisce sempre un numero positivo

Sai abs esiste vero?perché non usarlo?Anche distance = -distance è meglio di 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];

Altri suggerimenti

È A ^ 2 + B ^ 2= c ^ 2, non meno.Una volta chiamati SQRT con un argomento negativo, sei da solo.

stai sottraendo i quadrati all'interno della radice quadrata, invece di aggiungerli ("...- pow ...").

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top