Exemple #1
0
        public Robot(ISurfaceGrid marsSurface, SurfacePosition position, SurfaceDirection direction)
        {
            Position  = position;
            Direction = direction;

            _marsSurface = marsSurface ?? throw new ArgumentNullException(nameof(marsSurface));
            IsLost       = !_marsSurface.IsValidPosition(position);
        }
Exemple #2
0
        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);
                }
            }
        }
Exemple #3
0
        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");
            }
        }