public void NextDirection_ShouldReturnCorrectDirection(DirectionEnum currentEnum, MoveBehaviorEnum moveBehavior, DirectionEnum expected)
        {
            //Arrange & Act
            var actualDirection = currentEnum.NextDirection(moveBehavior);

            //Assert
            Assert.Equal(expected, actualDirection);
        }
        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
            });
        }