// Maximum Fitness = Win + N * (50 + H) + N * 50 public double Calculate(string playerName, BattleResult result) { var score = 0.0; var players = new[] { result.Winner, result.Loser }; var playerState = players.Single(p => p.Name == playerName); var opponentState = players.Single(p => p.Name != playerName); if (result.Winner == playerState) { score += 200; } score += playerState.AllNeuromon.Where(n => !n.IsDead).Sum(n => 50.0 + n.Health); score += opponentState.AllNeuromon.Where(n => n.IsDead).Sum(n => 50.0); score -= opponentState.AllNeuromon.Where(n => !n.IsDead).Sum(n => n.Health); return score >= 0.0 ? score : 0.0; }
private void RenderGameOver(BattleResult battleResult) { var playerOne = _battleSimulator.Player1.State; var playerTwo = _battleSimulator.Player2.State; RenderPlayerState(playerOne); RenderPlayerState(playerTwo); var scoreCalculator = new ScoreCalculator(); var sb = new StringBuilder(); sb.AppendLine(TurnMadeBorder); sb.AppendLine($"{battleResult.Loser.Name} has no remaining Neuromon..."); sb.AppendLine($"{battleResult.Winner.Name} beat {battleResult.Loser.Name}!"); sb.AppendLine(); sb.AppendLine($"{playerOne.Name}'s score: {scoreCalculator.Calculate(playerOne.Name, battleResult)}"); sb.AppendLine($"{playerTwo.Name}'s score: {scoreCalculator.Calculate(playerTwo.Name, battleResult)}"); sb.AppendLine(TurnMadeBorder); RenderTextWithColour(sb.ToString(), ConsoleColor.DarkGreen); }