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 }); }
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); }
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())); }