public Position Move(MoveBehaviorEnum currentBehavior, DirectionEnum currentDirection, Point currentPosition)
        {
            var nextPosition  = currentPosition;
            var nextDirection = currentDirection.NextDirection(currentBehavior);

            if (currentBehavior == MoveBehaviorEnum.Move)
            {
                switch (nextDirection)
                {
                case DirectionEnum.East:
                    nextPosition.Y = currentPosition.Y + 1;
                    break;

                case DirectionEnum.West:
                    nextPosition.Y = currentPosition.Y - 1;
                    break;

                case DirectionEnum.North:
                    nextPosition.X = currentPosition.X - 1;
                    break;

                case DirectionEnum.South:
                    nextPosition.X = currentPosition.X + 1;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            // Check boundary of boarsize
            if (nextPosition.X < 0)
            {
                nextPosition.X = 0;
            }
            else if (nextPosition.X > _gameSetting.BoardSize.Height - 1)
            {
                nextPosition.X = _gameSetting.BoardSize.Height - 1;
            }

            if (nextPosition.Y < 0)
            {
                nextPosition.Y = 0;
            }
            else if (nextPosition.Y > _gameSetting.BoardSize.Width - 1)
            {
                nextPosition.Y = _gameSetting.BoardSize.Width - 1;
            }

            return(new Position {
                Direction = nextDirection, CurrentPosition = nextPosition
            });
        }
Exemplo n.º 2
0
        public void Move_ShouldReturnCorrectPosition(MoveBehaviorEnum behavior, DirectionEnum direction, int posX,
                                                     int posY, DirectionEnum expectedDirection, int expPosX, int expPosY)
        {
            //Arrange
            var currentPos  = new Point(posX, posY);
            var expectedPos = new Point(expPosX, expPosY);
            var gameSetting = new GameSetting
            {
                BoardSize = new BoardSize
                {
                    Width  = 5,
                    Height = 5
                }
            };
            var sequenceMoveHandler = new SequenceMoveHandler(gameSetting);
            //Act
            var expectedResult = sequenceMoveHandler.Move(behavior, direction, currentPos);

            //Assert
            Assert.Equal(expectedPos, expectedResult.CurrentPosition);
            Assert.Equal(expectedDirection, expectedResult.Direction);
        }
        public void NextDirection_ShouldReturnCorrectDirection(DirectionEnum currentEnum, MoveBehaviorEnum moveBehavior, DirectionEnum expected)
        {
            //Arrange & Act
            var actualDirection = currentEnum.NextDirection(moveBehavior);

            //Assert
            Assert.Equal(expected, actualDirection);
        }
Exemplo n.º 4
0
        public static DirectionEnum NextDirection(this DirectionEnum currentDirection, MoveBehaviorEnum behavior)
        {
            if (behavior == MoveBehaviorEnum.Move)
            {
                return(currentDirection);
            }

            var newDirectionPos = (int)currentDirection;

            if (behavior == MoveBehaviorEnum.Left)
            {
                newDirectionPos = (int)currentDirection - 1;
            }
            else if (behavior == MoveBehaviorEnum.Right)
            {
                newDirectionPos = (int)currentDirection + 1;
            }

            if (newDirectionPos < 1)
            {
                newDirectionPos = 4;
            }
            else if (newDirectionPos > 4)
            {
                newDirectionPos = 1;
            }

            return((DirectionEnum)Enum.Parse(typeof(DirectionEnum), newDirectionPos.ToString()));
        }