private void UpdateImbalance(ArmyComposition resultArmyComposition)
 {
     if (imbalance < 0)
     {
         imbalance += resultArmyComposition.TotalUnitQuantity();
     }
     else
     {
         imbalance -= resultArmyComposition.TotalUnitQuantity();
     }
 }
        /// <summary>
        /// Merges two army compositions.
        /// The old experience is uniformly distributed among the total number of units in each army.
        /// </summary>
        public static ArmyComposition Merge(ArmyComposition first, ArmyComposition second)
        {
            var newExperience = (first.TotalUnitQuantity() * first.Experience +
                                 second.TotalUnitQuantity() * second.Experience) /
                                (first.TotalUnitQuantity() + second.TotalUnitQuantity());

            return(new ArmyComposition(first.Spearmen + second.Spearmen,
                                       first.Archers + second.Archers,
                                       first.Cavalrymen + second.Cavalrymen,
                                       newExperience));
        }