Beispiel #1
0
        public ITile MoveRobot(
            IRobot robot,
            OrientationDirection direction)
        {
            Debug.WriteLine("Moving robot " + robot + " " + direction);

            var currentTile = robot.CurrentTile;
            var relation    = GetTileRelationInDirectionOfTile(currentTile, direction);
            var newTile     = relation.Tile;

            if (relation.IsObstructed)
            {
                return(null);
            }

            var existingRobot = newTile.Robot;

            if (existingRobot != null)
            {
                var newTileForExistingRobot = MoveRobot(existingRobot, direction);
                if (newTileForExistingRobot == null)
                {
                    return(null);
                }
            }

            currentTile.Robot = null;
            newTile.Robot     = robot;
            robot.CurrentTile = newTile;

            FireRenderRequested();

            return(newTile);
        }
Beispiel #2
0
        public MarsRover(int x, int y, OrientationDirection orientation, IPlanet planet = null)
        {
            PositionX   = x;
            PositionY   = y;
            Orientation = orientation;
            _planet     = planet;

            InitializeAvailableCommands();
        }
Beispiel #3
0
        public static OrientationDirection GetRotatedDirection(OrientationDirection targetDirection, RotateDirection rotationDirection)
        {
            var newDirection = ((int)targetDirection + (int)rotationDirection) % 4;

            if (newDirection < 0)
            {
                newDirection += 4;
            }

            return((OrientationDirection)newDirection);
        }
Beispiel #4
0
        public static RotateDirection GetRotationDirection(OrientationDirection fromDirection, OrientationDirection toDirection)
        {
            var rotateDirection = (int)toDirection - (int)fromDirection;

            if (rotateDirection >= 3)
            {
                rotateDirection -= 4;
            }

            if (rotateDirection == -2)
            {
                rotateDirection = (int)RotateDirection.Uturn;
            }

            if (rotateDirection < -1)
            {
                rotateDirection += 4;
            }

            return((RotateDirection)rotateDirection);
        }
Beispiel #5
0
        private ITileRelation GetTileRelationInDirectionOfTile(
            ITile tile,
            OrientationDirection direction)
        {
            switch (direction)
            {
            case OrientationDirection.Down:
                return(tile.Bottom);

            case OrientationDirection.Up:
                return(tile.Top);

            case OrientationDirection.Left:
                return(tile.Left);

            case OrientationDirection.Right:
                return(tile.Right);

            default:
                throw new InvalidOperationException("An unknown direction " + direction + " was specified.");
            }
        }
Beispiel #6
0
 public ExpressConveyorBeltTile(OrientationDirection direction) : base(direction)
 {
 }
Beispiel #7
0
 public ConveyorBeltTile(OrientationDirection direction)
 {
     Direction = direction;
 }