Exemple #1
0
 public EnemyBot(ScannedRobotEvent ev, EnemyBot previous, double robotX, double robotY, double robotHeading, int hits)
 {
     Name          = ev.Name;
     Energy        = ev.Energy;
     Heading       = ev.Heading;
     HeadingRad    = ev.HeadingRadians;
     Time          = ev.Time;
     Bearing       = ev.Bearing;
     Distance      = ev.Distance;
     X             = robotX;
     Y             = robotY;
     Hits          = hits;
     PreviousEntry = previous;
     Velocity      = ev.Velocity;
 }
Exemple #2
0
        public Point GetLastTargetCoordinates(bool tryOptimize = false)
        {
            if (TargetEnemyName == null || !KnownEnemies.ContainsKey(TargetEnemyName))
            {
                return(new Point());
            }

            var lastScanStatus = KnownEnemies[TargetEnemyName];

            if ((lastScanStatus?.Energy ?? 0) == 0)
            {
                lastScanStatus = null;
            }

            double?x = LastBulletHit?.Bullet?.X;
            double?y = LastBulletHit?.Bullet?.Y;

            if (KnownEnemies.ContainsKey(TargetEnemyName))
            {
                lastScanStatus = KnownEnemies[TargetEnemyName];

                if (LastBulletHit == null || lastScanStatus.Time > LastBulletHit.Time)
                {
                    x = lastScanStatus.X;
                    y = lastScanStatus.Y;
                }

                if (tryOptimize)
                {
                    EnemyBot        curEnemy    = lastScanStatus;
                    List <EnemyBot> interesting = new List <EnemyBot>();

                    for (var i = 0; i < 100; i++)
                    {
                        interesting.Add(curEnemy);

                        if (!curEnemy.IsTarget)
                        {
                            break;
                        }
                        if (curEnemy.PreviousEntry == null)
                        {
                            break;
                        }
                        curEnemy = curEnemy.PreviousEntry;
                    }

                    var target = interesting.Select(i => new
                    {
                        Amount = interesting.Count(i2 => BoundCompare(i.X, i2.X, 10) && BoundCompare(i.Y, i2.Y, 10)),
                        X      = i.X,
                        Y      = i.Y
                    }).ToArray();

                    if (target.Max(t => t.Amount) > 10)
                    {
                        x = target.OrderByDescending(t => t.Amount).FirstOrDefault()?.X;
                        y = target.OrderByDescending(t => t.Amount).FirstOrDefault()?.Y;
                    }
                }
            }

            return(new Point {
                X = x ?? 0, Y = y ?? 0
            });
        }