예제 #1
0
        private void Navigate()
        {
            switch (currentKillItWithFirePhase)
            {
            case KillItWithFireStep.MoveFromWall:
                Robot.SetTurnLeft(Robot.Heading % 90 == 0 ? 90 : Robot.Heading % 90);
                Robot.SetAhead(100);
                currentKillItWithFirePhase = KillItWithFireStep.Dodge;
                break;

            case KillItWithFireStep.Dodge:
                var rideIntoTheDangerZone = DetermineWallDanger();
                if (rideIntoTheDangerZone)
                {
                    Robot.Stop();
                    currentKillItWithFirePhase = KillItWithFireStep.EscapeTheDangerZone;
                }
                else if (Robot.DistanceRemaining == 0)
                {
                    if (random.Next(0, 2) == 0)
                    {
                        Robot.SetAhead(random.Next(MIN_RANDOM, MAX_RANDOM));
                    }
                    else
                    {
                        Robot.SetBack(random.Next(MIN_RANDOM, MAX_RANDOM));
                    }

                    if (random.Next(0, 2) == 0)
                    {
                        Robot.SetTurnLeft(random.Next(MIN_RANDOM, MAX_RANDOM));
                    }
                    else
                    {
                        Robot.SetTurnRight(random.Next(MIN_RANDOM, MAX_RANDOM));
                    }
                    isAway = !isAway;
                }
                break;

            case KillItWithFireStep.EscapeTheDangerZone:
                if (Robot.DistanceRemaining == 0 && DetermineWallDanger())
                {
                    MoveTowardsCenter();
                }
                else if (Robot.DistanceRemaining == 0)
                {
                    currentKillItWithFirePhase = KillItWithFireStep.Dodge;
                }

                break;
            }

            if (Robot.TargetEnemyName != null && Robot.KnownEnemies[Robot.TargetEnemyName].Distance >= MAX_DISTANCE && Robot.Others > 1)
            {
                Robot.CurrentPhase = RoboPhase.WallRush;
            }
        }
예제 #2
0
 public override void ActivatePhase(RoboPhase previousPhase)
 {
     base.ActivatePhase(previousPhase);
     currentKillItWithFirePhase = KillItWithFireStep.MoveFromWall;
 }