/// <summary> /// Gets the surviving units of the army that won the combat /// </summary> /// <param name="combat_result"></param> /// <param name="combat_winner"></param> /// <returns></returns> public static int GetSurvivingUnits(LanchesterCombatResult combat_result, CombatWinner combat_winner) { double surviving_units = 0; try { switch (combat_winner) { case CombatWinner.Owned_Army: surviving_units = Math.Sqrt(Math.Abs(Math.Pow(combat_result.OwnedArmy_Count, 2) - ((combat_result.OwnedArmy_CombatEffectiveness / combat_result.EnemyArmy_CombatEffectiveness) * Math.Pow(combat_result.EnemyArmy_Count, 2)))); break; case CombatWinner.Draw: surviving_units = 0; break; case CombatWinner.Enemy_Army: surviving_units = Math.Sqrt(Math.Abs(Math.Pow(combat_result.EnemyArmy_Count, 2) - ((combat_result.EnemyArmy_CombatEffectiveness / combat_result.OwnedArmy_CombatEffectiveness) * Math.Pow(combat_result.OwnedArmy_Count, 2)))); break; } } catch (Exception ex) { Console.WriteLine($@"GetSurvivingUnits() -> {ex.Message}"); surviving_units = 0; } return(Convert.ToInt32(surviving_units)); }
/// <summary> /// Checks the <see cref="LanchesterCombatResult.OwnedArmy_RelativeCombatEffectiveness"/> /// and returns which army won in the combat /// </summary> /// <param name="combat_result"></param> /// <returns></returns> public static CombatWinner GetCombatWinner(LanchesterCombatResult combat_result) { CombatWinner combat_winner = CombatWinner.Draw; try { var relative_cardinality = (combat_result.OwnedArmy_Count / combat_result.EnemyArmy_Count); //Owned Army Loss if (relative_cardinality < combat_result.OwnedArmy_RelativeCombatEffectiveness) { combat_winner = CombatWinner.Enemy_Army; } //Owned Army Won else if (relative_cardinality > combat_result.OwnedArmy_RelativeCombatEffectiveness) { combat_winner = CombatWinner.Owned_Army; } //Draw else { combat_winner = CombatWinner.Draw; } } catch (Exception ex) { Console.WriteLine($@"GetCombatWinner() -> {ex.Message}"); combat_winner = CombatWinner.Draw; } return(combat_winner); }
internal RoundResults(PlayerSide roundWinner, CombatWinner combatWinner, PlayerStatus leftPlayerStatus, PlayerStatus rightPlayerStatus, RoundStatistics leftPlayerStatistics, RoundStatistics rightPlayerStatistics) { CombatWinner = combatWinner; RoundWinner = roundWinner; LeftPlayerStatus = leftPlayerStatus; RightPlayerStatus = rightPlayerStatus; LeftPlayerStatistics = leftPlayerStatistics; RightPlayerStatistics = rightPlayerStatistics; }