Ejemplo n.º 1
0
        /// <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));
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
 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;
 }