private Plateau ReadPlateau() { var plateauLine = _reader.ReadLine(); if (string.IsNullOrEmpty(plateauLine)) { throw new InvalidOperationException("First line doesn't contain any data"); } var plateau = Plateau.TryParse(plateauLine); if (plateau == null) { throw new InvalidOperationException("First line doesn't contain plateau coordinate data"); } return(plateau); }
public static Rover TryParse(Plateau plateau, string str) { var parts = str.Split(" ", StringSplitOptions.RemoveEmptyEntries); if (parts.Length != 3) { return(null); } else { var position = Position.FromStrings(parts[0], parts[1]); var direction = DirectionUtilities.TryParse(parts[2]); if (position != null && direction != null) { return(new Rover(plateau, position.Value, direction.Value)); } else { return(null); } } }
private void HandleMovement() { Position offset; switch (Direction) { case Direction.N: offset = new Position(0, 1); break; case Direction.E: offset = new Position(1, 0); break; case Direction.S: offset = new Position(0, -1); break; case Direction.W: offset = new Position(-1, 0); break; default: offset = new Position(0, 0); break; } var newPosition = Position + offset; if (Plateau.Contains(newPosition)) { Position = newPosition; } }