public ActionResult DoSpecialAction(int position, IArmy myArmy, IArmy enemyArmy, Random random = null) { if (random == null) { random = new Random(); } double probability = random.NextDouble(); //для лечения сгенерированная вероятность должна принадлежать промежутку [0, HealingProbability) if (probability >= HealingProbability) { return(ActionResult.Empty); } List <ICanBeHealed> availibleForHealing = GetAvailibleForHealing(position, myArmy); if (availibleForHealing.Count == 0) { return(ActionResult.Empty); } ICanBeHealed unitForHealing = availibleForHealing[random.Next(0, availibleForHealing.Count)]; unitForHealing.TakeHealth(HealingPower); return(new ActionResult(this, (IUnit)unitForHealing, ActionResultType.Healing)); }
public string DoAbility(List <IUnit> Allies, List <IUnit> Enemies, int position) { string AbilityResult = "Cleric at position " + position; for (int i = Range; i > -Range; i--) { if (i + position >= Allies.Count || position + i < 0) { continue; } if (Allies[position + i] is ICanBeHealed) { ICanBeHealed HealetUnit = Allies[position + i] as ICanBeHealed; if (HealetUnit.MaxHealth > Allies[position + i].Health) { Allies[position + i].GetHit(AbilityDamage); AbilityResult += string.Format(" cured the {0} at position {1} by {2} points\n", Allies[position + i].Name, position + i, AbilityDamage); return(AbilityResult); } } } return(AbilityResult + string.Format(" can't heal\n")); }