public Rover(IDirection direction, Coordinate coordinate, Terrain terrain) { ValidateRoverInitialization(direction, coordinate, terrain); Direction = direction; _coordinate = coordinate; _terrain = terrain; }
public Coordinate Move(Coordinate position, Terrain terrain) { if (position.Y == terrain.UpperBoundary.Y) { throw new RoverInvalidPositionException(Messages.RoverInvalidUpperBoundaryYExceptionMessage); } position.Y++; return position; }
public Coordinate Move(Coordinate position, Terrain terrain) { if (position.X == terrain.LowerBoundary.X) { throw new RoverInvalidPositionException(Messages.RoverInvalidLowerBoundaryXExceptionMessage); } position.X--; return position; }
private void ValidateRoverInitialization(IDirection direction, Coordinate coordinate, Terrain terrain) { if (direction == null) { throw new RoverNullDirectionException(Messages.RoverArgumentNullExceptionMessage); } if (terrain == null) { throw new RoverNullTerrainException(Messages.RoverNullTerrainExceptionMessage); } if (coordinate.X < terrain.LowerBoundary.X || coordinate.Y < terrain.LowerBoundary.Y) { throw new RoverInvalidPositionException(Messages.RoverNegativePositionExceptionMessage); } }
public void ExecuteMarsRoverMission(string commands) { _commands = commands.Split(_commandLineBreaker); try { var terrain = new Terrain(new Coordinate(_commands[0])); for (var i = 1; i < _commands.Length; i += 2) { var rover = new Rover(GetDirectionFromCommand(_commands[i]), new Coordinate(_commands[i]), terrain); foreach (var commandString in _commands[i + 1]) { var command = Repositories.Commands.FirstOrDefault(c => c.ToString() == commandString.ToString()); command.Execute(rover); } _marsRoverMissionResult.Append(rover.Position); if(i + 1 < _commands.Length - 1) { _marsRoverMissionResult.Append("\n"); } } } catch(TerrainInvalidInitializationValueException terrainException) { ClearMarsRoverMissionResult(); _marsRoverMissionResult.Append(terrainException.Message); } catch(RoverInvalidPositionException roverNegativePositionException) { ClearMarsRoverMissionResult(); _marsRoverMissionResult.Append(roverNegativePositionException.Message); } catch(RoverNullDirectionException roverNullDirectionException) { ClearMarsRoverMissionResult(); _marsRoverMissionResult.Append(roverNullDirectionException.Message); } }
public MovementSystem(Terrain terrain, Rover rover) { this.terrain = terrain; this.rover = rover; }