Frage

Für ein Spiel, das ich schreibe, muss ich es tun Finden Sie einen ganzzahligen Wert für den Abstand zwischen zwei Koordinatensätzen.Es ist ein 2D-Array das die verschiedenen Karten enthält.(Wie das Original von Zelda).Je weiter man sich von der entfernt Mitte (5,5) Je höher die Zahl sein sollte, da die Schwierigkeit der Feinde zunimmt.Im Idealfall sollte es so sein zwischen 0 und 14.Der Array ist 11x11.

Jetzt habe ich versucht, das zu verwenden Pythagoras Formel, an die ich mich aus der Highschool erinnere, aber sie sprudelt heraus Überlaufzahlen.Ich kann nicht herausfinden, warum.

        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];
War es hilfreich?

Lösung

srand(rand()); macht keinen Sinn, sollte es sein srand(time(NULL));

nicht verwenden pow für quadratisch, einfach verwenden x*x

Ihre Formel ist auch falsch, Sie sollten Zahlen addieren, nicht minus

sqrt zurückkehren double und werfen int werde es abrunden

Ich glaube sqrt Gibt immer eine positive Zahl zurück

Du weisst abs existiert, oder?Warum nicht verwenden?Auch distance = -distance ist besser als 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];

Andere Tipps

Es ist ein ^ 2 + b ^ 2= c ^ 2, nicht minus.Sobald Sie SQRT mit einem negativen Argument anrufen, sind Sie alleine.

Sie subtrahieren Quadrate in Ihrer Quadratwurzel, anstatt sie hinzuzufügen ("...- pow ...").

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top