public override TankUpdate Update(IGameState gameState)
        {
            // Pick a random goal to defend
            if (_goalToDefend == null && gameState.Goals.Count > 0)
            {
                var shuffledGoals = gameState.Goals.OrderBy(a => Guid.NewGuid());
                _goalToDefend = shuffledGoals.First();
            }

            TankUpdate tankUpdate = new TankUpdate();

            if (gameState.Foes.Any() && gameState.Goals.Any())
            {
                if (_targetFoe == null || _targetFoe.Health <= 0)
                {
                    // Pick a random target
                    var shuffledFoes = gameState.Foes.OrderBy(a => Guid.NewGuid());
                    _targetFoe = shuffledFoes.First();
                }

                if (_targetFoe != null)
                {
                    // Target the foe's current location
                    tankUpdate.ShotTarget = _targetFoe.Center;
                }

                // Move toward tower
                tankUpdate.MovementTarget = LocationProvider.GetLocation(_goalToDefend.X, _goalToDefend.Y);
                tankUpdate.Bullet = new Bullet { Damage = 200, Freeze = 0, SplashRange = 0 };
            }

            return tankUpdate;
        }
 private void ChangeBulletPower(IFoe foe)
 {
     var range = GetDistanceFromTank(foe) + 1;
     var damage = (int)(2000 / range);
     var freeze = 0;
     if (damage < foe.Health)
     {
         //damage /= 2;
         //freeze = damage;
         freeze = damage - 1;
         damage = 1;
     }
     Bullet = new Bullet { Damage = damage, Freeze = freeze };
 }
 private double ModifyDistanceByDanger(IFoe foe)
 {
     return foe.AbilityType == AbilityType.Healing || foe.AbilityType == AbilityType.RangedHeat ? -100 : 0;
 }
 private void ChangeBulletPower(IFoe foe)
 {
     var range = GetDistanceFromTank(foe) + 1;
     var damage = (int)(1000 / range);
     Bullet = new Bullet { Damage = damage, Freeze = 0, SplashRange = 0 };
 }
Example #5
0
 protected double GetTimeToGoal(IFoe foe, List<IGoal> goals)
 {
     var minDistance = double.MaxValue;
     foreach (var goal in goals)
     {
         var xDistance = (goal.X + goal.Size.Width) - (foe.X + foe.Size.Width);
         var yDistance = (goal.Y + goal.Size.Height) - (foe.Y + foe.Size.Height);
         minDistance = Math.Min(Math.Sqrt(Math.Pow(xDistance, 2) + Math.Pow(yDistance, 2)) / foe.Speed, minDistance);
     }
     return minDistance;
 }