Mathematisches Problem
-
In meinem Spiel wird ein Gebäude aufgebaut. Wenn das Gebäude jetzt z.B.
2000 Hitpoints hat und die Bauzeit ist 1000 "Runden", dann bekommt das Gebäude pro Runde 2 Hitpoints. Was mach ich jetzt aber, wenn das Gebäude 800 Hitpoints hat und die Bauzeit ist 2400 Runden? Ich möchte nicht mit float-Werten rechnen, stattdessen soll das Gebäude einfach nur jede dritte Runde nen Hitpoint bekommen.
Ich hab mir darüber schon länger Gedanken gemacht, aber mir fällt einfach keine Formel ein, die mir berechnet, wieviel HPs ein Gebäude in der Baurunde x bekommt.
-
Dann nimmst Du einen Subticker.
if (++subhp==3) { subhp=0; hitpoint++; }
[ Dieser Beitrag wurde am 05.04.2003 um 13:26 Uhr von Bitsy editiert. ]
-
ich würd einfach nur solche zahlen wählen, die du dann schön pro runde aufaddieren kannst, alternativ bei der konstruktion die ersten x von den y HP gleich zu beginn setzen, damit du dann wieder schön pro runde hochzählen kannst
-
eben, alle Werte mal 3 nehmen und dann kriegt das andere Gebäude eben 3*2 Punkte pro Runde...
-
Des funktioniert aber nicht bei
HP = 3784
Bauzeit = 8237des mit den "schönen" Zahlen ist nur ne Behelfslösung die ich im Moment anwende. Außerdem füg ich nur alle 10 runden HPs hinzu, aber eine dauerhafte Lösung ist das nicht.
-
erm. Was soll der Grund für krumme Zahlen sein? Da stimmt doch was mit dem Design nicht. Okay, ein Jahr hat 365 Tage, und wenn man es darauf aufbaut...
Dann musst Du eben fixfloats nehmen. Aber auch die haben ein Problem mit 1/3.Eine letzte Möglichkeit wäre dann noch eine Inkrementalgebung im Stil des Bresenham-Algorithmus. Aber den erkläre ich hier jetzt nicht, google mal.
[ Dieser Beitrag wurde am 05.04.2003 um 15:48 Uhr von Bitsy editiert. ]
-
So krumme Zahlen nehme ich natürlich nicht her. Aber 800 HP bei 2000 Bauzeit ist schwierig genug.
Ich hab sehr viel verschiedene Gebäudetypen mit unterschiedlichen Werten und ich brauche eine Formel, die für alle Kombinationen passt.
-
warum nicht mit floats?
-
Das mit dem Bresenham-Algorithmus war ne gute Idee, ich hab jetzt ein ähnliches Verfahren entwickelt:
int oldShouldHaveHP = completed*MaxHP / buildingTime; completed++; int newShouldHaveHP = completed*MaxHP / buildingTime; if (oldShouldHaveHP != newShouldHaveHP) // Schaun ob bei diesem Wert von completed ein "sprung" ist. Unit[Unit[i].targetUnit].HP++;
klappt nur für buildingTime > MaxHP, aber das reicht mir.
Danke auf jeden Fall mal