Hallo zusammen,
Das Problem an sich ist eigentlich sehr einfach, aber ich finde den Fehler einfach nicht. Es geht um folgende Schleife:
//Get a random Enemy
randomEnemy = selectedEnemies.get(random.nextInt(selectedEnemies.size()));
//Heal Player
p.setHealth(100);
//Reset rounds
round = 0;
//Fight
while(p.getHealth() > 0 && randomEnemy.getHealth() > 0){
damage = p.attack() - randomEnemy.attack();
if(damage>0){
randomEnemy.changeHealth(-damage);
}
else if(damage <0){
p.changeHealth(damage);
}
round += 1;
}
if(p.getHealth()>0)
totalWins += 1;
//Add to average
averageRounds += round;
averageHealth += 100-p.getHealth();
//Set Mins and Maxs
if(p.getHealth()>maxHealth)
maxHealth = p.getHealth();
if(p.getHealth()<minHealth)
minHealth = p.getHealth();
if(round>maxRound)
maxRound = round;
if(round<minRound)
minRound = round;
}
Dabei ist “p” der Spieler. Die restlichen Bezeichnungen sollte selbsterklärend sein. Alle Zahlen sind int.
Folgendes passiert: Es sollen N Kämpfe zwischen dem Spieler und einem zufälligen Gegner durchlaufen werden. Dazu wähle ich jedesmal einen neuen Gegner, der Spieler erhält wieder volle Lebenspunkte und der Rundenzähler wird auf 0 gesetzt.
Die while-schleife stellt den Kampf dar: Solange beide noch mehr als 0 Leben haben, lasse sie kämpfen und ziehe vom Verlierer die Differenz ab. Anschließend erhöhe “round” um 1.
Das Problem: “round” wird oft gar nicht erhöht. auch der averageHealth Wert ist unter N bei N gewonnen Kämpfen. Weiß jemand warum die Werte nicht immer erhöht werden?
Ich hoffe einer von euch findet sofort was schief läuft, ich sitze seit ner halben Stunde dran und kapiers nicht…
Grüße,
TheAceOfSpades
*** Edit ***
Ich habe es zuerst mit N=10000 durchlaufen lassen. Wenn ich N kleiner mache dann erhalte ich korrekte Werte. Jetzt verstehe ich es erst recht nicht mehr…