Hallo Community!
Ich habe ein ein für mich unerklärliches Problem:
Die Kurzfassung: Ich habe ein Programm geschrieben, bei dem zwei Gladiatoren gegeneinander kämpfen. Jeder Gladiator besteht aus einer Klasse mit Variblen: Staerke, Lebenspunkte, Geschwindigkeit etc.
Die Kämpfe finden Rundenweise statt. Je höher die Geschwindigkeit desto schneller schlägt ein Gladiator zu. Jede Runde wird durch zehn geteilt. In jeder dieser zehntelrunden wird der Angriffswert(= wenn dieser Wert 1.0 erreicht führt der Gladiator einen Schlag aus) um den von der Memberfunktion errechneten Wert erhöht. Bei Gladiator1 beträgt dieser Wert 0.1, bei Gladiator2 0.15.
Nachdem dieser Wert errechnet wurde starten die Runden bis einer der Gladiatoren siegt. Somit werden diese beiden Werte im späteren Verlauf des Programms nicht mehr geändert.
Nun das eigentliche Problem:
Ab der 40 - 45 Zehntelrunde wird der Angriffswert von Gladiator1 laut Anzeige um ganz normal um 0.1 erhöht, beträgt dann tatsächlich jedoch 0.600001 statt 0.6. Dieser Wert wird jedoch nur in dieser einen Runde addiert.
Der Angriffswert von Gladiator2 wird normal um 0.15 erhöht. Stelle ich es jedoch auf eine Erhöhung um 0.1 ergeht es ihm wie Gladiator1.
Nun, ich weiß, dass ist überhaupt nicht tragisch und hat auf dieses Programm überhaupt keinen Einfluss. Jedoch würde ich gern wissen wieso es denn so ist, ich konnte hierfür noch keine Lösung finden.
Weiß jemand von euch Rat?
Danke schonmal fürs Interesse!
Hier der Code der beiden Funktionen:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
void CGladiator::CGeschwindigkeitsRechner(float Rundenpunkte, float *pRundengeschwindigkeit) //Errechnet die Geschwindigkeitspunkte pro Runde und gibt diese aus
{
m_fRundenpunkte = m_fGeschwindigkeit / Rundenpunkte;
*pRundengeschwindigkeit = m_fRundenpunkte;
}//GeschwindigkeitsRechner
bool CGladiator::CGeschwPunkte(float fPunkte) //Erhöht den Wert m_fGeschwindigkeitsPunkte (wenn dieser 1.0 erreicht wird ein Schlag ausgeführt)
{
m_fGeschwindigkeitsPunkte += fPunkte;
cout << "Wird um " << fPunkte << " erhoeht" << endl;
cout << m_fGeschwindigkeitsPunkte << endl;
if (m_fGeschwindigkeitsPunkte >= 1.0)
{
m_fGeschwindigkeitsPunkte -= 1.0;
return true;
}
else
{
return false;
}
}//CGeschwPunkte
|