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; } }
public override void ActivatePhase(RoboPhase previousPhase) { base.ActivatePhase(previousPhase); currentKillItWithFirePhase = KillItWithFireStep.MoveFromWall; }