public Robot(ISurfaceGrid marsSurface, SurfacePosition position, SurfaceDirection direction) { Position = position; Direction = direction; _marsSurface = marsSurface ?? throw new ArgumentNullException(nameof(marsSurface)); IsLost = !_marsSurface.IsValidPosition(position); }
public void Execute(IRobot robot, ISurfaceGrid surfaceGrid) { var newPosition = new SurfacePosition(robot.Position.Row, robot.Position.Column); switch (robot.Direction) { case SurfaceDirection.Up: newPosition.Row++; break; case SurfaceDirection.Left: newPosition.Column--; break; case SurfaceDirection.Down: newPosition.Row--; break; case SurfaceDirection.Right: newPosition.Column++; break; default: throw new ArgumentException(nameof(robot.Direction), "Direction is not supported: " + robot.Direction); } if (!surfaceGrid.IsDeadScentMovement(robot.Position, robot.Direction)) { try { surfaceGrid.Move(robot.Position, robot.Direction); } finally { robot.SetPosition(newPosition); } } }
public void Execute(IRobot robot, ISurfaceGrid surface) { switch (robot.Direction) { case SurfaceDirection.Up: robot.SetDirection(SurfaceDirection.Right); break; case SurfaceDirection.Left: robot.SetDirection(SurfaceDirection.Up); break; case SurfaceDirection.Down: robot.SetDirection(SurfaceDirection.Left); break; case SurfaceDirection.Right: robot.SetDirection(SurfaceDirection.Down); break; default: throw new ArgumentException(nameof(robot.Direction), "Current direction is not supported"); } }