Esempio n. 1
0
        protected double RemoveProbability = 0.1; //вероятность потерять улучшение

        protected HeavyInfantryDecorator(IHeavyInfantry heavyInfantry)
        {
            if (heavyInfantry == null)
            {
                throw new ArgumentNullException();
            }
            HeavyUnit = heavyInfantry;
        }
Esempio n. 2
0
        public virtual IUnit TakeDamage(int damage)
        {
            Random random = new Random();

            if (random.NextDouble() < RemoveProbability)
            {
                HeavyUnit = (IHeavyInfantry)HeavyUnit.TakeDamage(damage);
                return(HeavyUnit);
            }

            return(this);
        }
Esempio n. 3
0
        //описание юнита в описании армии
        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();
        }
Esempio n. 4
0
 public SwordDecorator(IHeavyInfantry heavyInfantry) : base(heavyInfantry)
 {
     HeavyUnit.Power += SwordPower;
 }
Esempio n. 5
0
 public HelmetDecorator(IHeavyInfantry heavyInfantry) : base(heavyInfantry)
 {
 }
Esempio n. 6
0
 public ShieldDecorator(IHeavyInfantry heavyInfantry) : base(heavyInfantry)
 {
 }
Esempio n. 7
0
        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));
        }
Esempio n. 8
0
 public HorseDecorator(IHeavyInfantry heavyInfantry) : base(heavyInfantry)
 {
     HeavyUnit.Power += AttackPower;
 }