Ejemplo n.º 1
0
        public Rover(IDirection direction, Coordinate coordinate, Terrain terrain)
        {
            ValidateRoverInitialization(direction, coordinate, terrain);

            Direction = direction;
            _coordinate = coordinate;
            _terrain = terrain;
        }
Ejemplo n.º 2
0
        public Coordinate Move(Coordinate position, Terrain terrain)
        {
            if (position.Y == terrain.UpperBoundary.Y)
            {
                throw new RoverInvalidPositionException(Messages.RoverInvalidUpperBoundaryYExceptionMessage);
            }

            position.Y++;

            return position;
        }
Ejemplo n.º 3
0
        public Coordinate Move(Coordinate position, Terrain terrain)
        {
            if (position.X == terrain.LowerBoundary.X)
            {
                throw new RoverInvalidPositionException(Messages.RoverInvalidLowerBoundaryXExceptionMessage);
            }

            position.X--;

            return position;
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
 public MovementSystem(Terrain terrain, Rover rover)
 {
     this.terrain = terrain;
     this.rover   = rover;
 }