private static BattleResult performBattle( Hero hero, Robot robot, DiceService diceService) { var battleResult = new BattleResult(); var round = 0; while (hero.Health > 0 && robot.Health > 0) { var battleRound = new BattleRound(); round++; battleRound.RoundNumber = round; battleRound.RobotHealthBeginning = robot.Health; battleRound.HeroDamageInflicted = robot.Defend(hero.Attack(diceService)); battleRound.RobotHealth = robot.Health; battleRound.HeroHealthBeginning = hero.Health; battleRound.RobotDamageInflicted = hero.Defend(robot.Attack(hero, diceService)); battleRound.HeroHealth = hero.Health; battleResult.BattleRounds.Add(battleRound); } if (hero.Health > 0) { hero.MovesRemaining--; hero.Wins++; hero.Health = hero.Health; battleResult.CreditsEarned = hero.CollectCredits(diceService, robot.Difficulty); battleResult.BonusMovesAwarded = hero.AwardBonusMoves(diceService, robot.Difficulty); } else { hero.MovesRemaining = 0; hero.Losses--; hero.Health = 0; } battleResult.Hero = hero; battleResult.Robot = robot; return battleResult; }
private static string formatBattleResult(BattleResult battleResult) { string result; var robotName = battleResult.Robot.Name; var heroName = battleResult.Hero.Name; var progressMessage = "<h4>Battle Progress:</h4>"; foreach (var battleRound in battleResult.BattleRounds) { if (battleRound.HeroHealth <= 20) { progressMessage += (battleRound.HeroHealth <= 0 ? string.Format("<div class='bs-callout bs-callout-danger'><h4>Round {0} ...</h4>", battleRound.RoundNumber) : string.Format("<div class='bs-callout bs-callout-warning'><h4>Round {0} ...</h4>", battleRound.RoundNumber)); } else { progressMessage += string.Format("<div class='bs-callout bs-callout-info'><h4>Round {0} ...</h4>", battleRound.RoundNumber); } var robotHealth = (battleRound.RobotHealth > 0 ? battleRound.RobotHealth : 0); var heroHealth = (battleRound.HeroHealth > 0 ? battleRound.HeroHealth : 0); var heroDamageInflicted = battleRound.HeroDamageInflicted; progressMessage += string.Format("<p>{0} inflicted {1} damage on {2} reducing {2}'s health to {3}.</p>", robotName, heroDamageInflicted, robotName, robotHealth); var robotDamageInflicted = battleRound.RobotDamageInflicted; progressMessage += string.Format("<p>{0} inflicted {1} damage on {2} reducing {2}'s health to {3}.</p>", heroName, robotDamageInflicted, heroName, heroHealth); progressMessage += "</div>"; } if (battleResult.Hero.Health > 0) { result = string.Format("<p class='text-success'>Awesome! {0} defeats {1}!</p>", heroName, robotName); result += string.Format("<p class='text-success'>Earned {0} credits!</p>", battleResult.CreditsEarned); if (battleResult.BonusMovesAwarded > 0) { result += string.Format("<p class='text-success'>w00t! You earned {0} bonus moves!</p>", battleResult.BonusMovesAwarded); } if (battleResult.Hero.Health <= 20) { result += string.Format("<p class='text-warning'>Be careful! Your hero only has {0} health left!</p>", battleResult.Hero.Health); } } else { result = (battleResult.Robot.Health > 0 ? string.Format("<p class='text-danger'>Oh no! {0} defeats {1}!</p>", robotName, heroName) : string.Format("<p class='text-danger'>Oh no! Both {0} and {1} were knocked out.", heroName, robotName)); } return result + progressMessage; }