C++:„Abstand“ zwischen 2 Koordinaten im 2D-Array
-
21-12-2019 - |
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];
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 ...").