protected double RemoveProbability = 0.1; //вероятность потерять улучшение protected HeavyInfantryDecorator(IHeavyInfantry heavyInfantry) { if (heavyInfantry == null) { throw new ArgumentNullException(); } HeavyUnit = heavyInfantry; }
public virtual IUnit TakeDamage(int damage) { Random random = new Random(); if (random.NextDouble() < RemoveProbability) { HeavyUnit = (IHeavyInfantry)HeavyUnit.TakeDamage(damage); return(HeavyUnit); } return(this); }
//описание юнита в описании армии private void OutputUnit(IUnit unit) { IHeavyInfantry heavy = unit as IHeavyInfantry; string improvements = String.Empty; if (heavy != null) { improvements = heavy.GetImprovements(); } OutputNameInOutputResult(unit.Name, GetColor(unit)); Console.WriteLine("{0,10}|{1, 8}|{2,5}|{3, -50}|", unit.Health, unit.Defence, unit.Power, improvements); OutputLineInDisplayUnitTable(); }
public SwordDecorator(IHeavyInfantry heavyInfantry) : base(heavyInfantry) { HeavyUnit.Power += SwordPower; }
public HelmetDecorator(IHeavyInfantry heavyInfantry) : base(heavyInfantry) { }
public ShieldDecorator(IHeavyInfantry heavyInfantry) : base(heavyInfantry) { }
public ActionResult DoSpecialAction(int position, IArmy myArmy, IArmy enemyArmy, Random random = null) { if (random == null) { random = new Random(); } double probability = random.NextDouble(); //для улучшения сгенерированная вероятность должна принадлежать промежутку [0, ImprovementHeavyUnitProbability) if (probability >= ImprovementHeavyUnitProbability) { return(ActionResult.Empty); } int[] availibleForImprovement = GetAvailibleForImprovement(position, myArmy).ToArray(); if (availibleForImprovement.Length == 0) { return(ActionResult.Empty); } int index = availibleForImprovement[random.Next(0, availibleForImprovement.Length)]; int action = random.Next(0, 4); IHeavyInfantry unit = myArmy.GetUnit(index) as IHeavyInfantry; switch (action) { case 0: if (unit.ContainsImprovement(typeof(HelmetDecorator))) { return(ActionResult.Empty); } unit = new HelmetDecorator(unit); myArmy.ReplaceUnit(unit, index); break; case 1: if (unit.ContainsImprovement(typeof(HorseDecorator))) { return(ActionResult.Empty); } unit = new HorseDecorator(unit); myArmy.ReplaceUnit(unit, index); break; case 2: if (unit.ContainsImprovement(typeof(ShieldDecorator))) { return(ActionResult.Empty); } unit = new ShieldDecorator(unit); myArmy.ReplaceUnit(unit, index); break; case 3: if (unit.ContainsImprovement(typeof(SwordDecorator))) { return(ActionResult.Empty); } unit = new SwordDecorator(unit); myArmy.ReplaceUnit(unit, index); break; default: return(ActionResult.Empty); } return(new ActionResult(this, unit, ActionResultType.Improvement)); }
public HorseDecorator(IHeavyInfantry heavyInfantry) : base(heavyInfantry) { HeavyUnit.Power += AttackPower; }