public void Navigate(Models.Rover rover) { Position finalPosition = new Position(); char[] instructions = rover.Instructions.ToCharArray(); foreach (var instruction in instructions) { ProcessInstruction(rover, Char.ToUpper(instruction)); } }
private bool CheckRoverPositionAllowed(Models.Rover rover) { if (_roverModel.PlateauSizeLongitude <= rover.Position.Longitude) { throw new Exception(string.Format("Rover Longitude ({0}) is out of plateau (max {1})" , rover.Position.Longitude.ToString() , _roverModel.PlateauSizeLongitude - 1)); } if (_roverModel.PlateauSizeLatitude <= rover.Position.Latitude) { throw new Exception(string.Format("Rover Latitude ({0}) is out of plateau (max {1})" , rover.Position.Longitude.ToString() , _roverModel.PlateauSizeLatitude - 1)); } return(true); }
private void ProcessInstruction(Models.Rover rover, char instruction) { Heading heading; heading = ConvertToHeading(instruction); switch (heading) { case Heading.M: Move(rover); if (!CheckRoverPositionAllowed(rover)) { throw new Exception("The Rover has moved out of the plateau"); } break; default: rover.Position.Heading = heading; break; } }
private void Move(Models.Rover rover) { switch (rover.Position.Heading) { case Heading.N: rover.Position.Latitude++; break; case Heading.E: rover.Position.Longitude++; break; case Heading.S: rover.Position.Latitude--; break; case Heading.W: rover.Position.Longitude--; break; default: throw new Exception("The current heading does not exist"); } }