public DefenceStrategy DefendEarth(IAlienInvasionWave invasionWave) { if (_cannons == null || cannonsDoNotMatchAssets(invasionWave.WeaponsAvailableForDefence)) { _cannons = invasionWave.WeaponsAvailableForDefence.Select(a => new Cannon(a)).OrderBy(c => c.DefenceWeapon.DefenceWeaponType.ToString()).ToList(); } foreach (var cannon in _cannons) { cannon.Reload(); } var invaders = invasionWave.AlienInvaders.Select(a => new Invader(a)).ToList(); var assetsToUse = new List <IDefenceWeapon>(); foreach (var cannon in _cannons) { if (cannon.BlastNext(invaders)) { assetsToUse.Add(cannon.DefenceWeapon); } if (invaders.Count == 0) { break; } } return(new DefenceStrategy(assetsToUse)); }
public DefenceStrategy DefendEarth(IAlienInvasionWave invasionWave) { IEnumerable<IDefenceWeapon> weaponsToUse; weaponsToUse = invasionWave.WeaponsAvailableForDefence.Take(1); //weaponsToUse = invasionWave.WeaponsAvailableForDefence.Take(invasionWave.AlienInvaders.Count()); return new DefenceStrategy(weaponsToUse); }
public DefenceStrategy DefendEarth(IAlienInvasionWave invasionWave) { if (!_armouries.ContainsKey(invasionWave.WeaponsAvailableForDefence)) { _armouries.Add(invasionWave.WeaponsAvailableForDefence, ArmouryBuilder.From(invasionWave.WeaponsAvailableForDefence)); } var armoury = _armouries[invasionWave.WeaponsAvailableForDefence]; return new DefenceStrategy(armoury.WeaponsFor(invasionWave.AlienInvaders)); }
public DefenceStrategy DefendEarth(IAlienInvasionWave invasionWave) { return new DefenceStrategy(invasionWave.WeaponsAvailableForDefence.Take(invasionWave.AlienInvaders.Count())); }