public void AddDefense(Vehicle car, Defense defense) { var carDecorator = new VehicleDecorator(car); switch (defense) { case Defense.Armor: carDecorator = new ArmorDecorator(carDecorator); break; case Defense.Gloves: carDecorator = new GlovesDecorator(carDecorator); break; case Defense.Helmet: carDecorator = new HelmetDecorator(carDecorator); break; case Defense.Shield: carDecorator = new ShieldDecorator(carDecorator); break; } Console.WriteLine($"Def: {carDecorator.GetDef()}"); }
public void HelmetGunDecoratorTest() { VehicleDecorator droneDecorator = new HelmetDecorator(new Drone()); droneDecorator = new GunDecorator(droneDecorator); Assert.AreEqual(6, droneDecorator.GetDef()); Assert.AreEqual(10, droneDecorator.GetAtt()); }
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 IUnit DoSpecialAction(IUnit unit) { if (unit is IAmmunition) { if (((IAmmunition)unit).Access == null) { ((IAmmunition)unit).Access = new Dictionary <int, string>(); } if (((IAmmunition)unit).Access.Count == 4) { return(null); } Component accessory = new AccessoryComponent(); Random random = new Random(); int cloth = 0; bool end = true; while (end) { cloth = random.Next(0, 4); if (((IAmmunition)unit).Access.ContainsKey(cloth)) { continue; } else { end = false; } } var nameAmmunition = ""; switch (cloth) { case 0: nameAmmunition = "Helmet"; accessory = new HelmetDecorator(accessory, unit); accessory.AddAccessory(); break; case 1: nameAmmunition = "Armor"; accessory = new ArmorDecorator(accessory, unit); accessory.AddAccessory(); break; case 2: nameAmmunition = "Horse"; accessory = new HorseDecorator(accessory, unit); accessory.AddAccessory(); break; case 3: nameAmmunition = "Peak"; accessory = new PeakDecorator(accessory, unit); accessory.AddAccessory(); break; } ((IAmmunition)unit).Access.Add(cloth, nameAmmunition); return(accessory.GetUnit()); } return(null); }