public static void ChangeDirection(CurrentDirection currentDirection) { Directions direction = new Directions(); int currentDirectionCount = 0; int DIRECTIONS_COUNT = 8; for (int i = 0; i < DIRECTIONS_COUNT; i++) { if (direction.X[i] == currentDirection.X && direction.Y[i] == currentDirection.Y) { currentDirectionCount = i; break; } } if (currentDirectionCount == (DIRECTIONS_COUNT - 1)) { currentDirection.X = direction.X[0]; currentDirection.Y = direction.Y[0]; return; } currentDirection.X = direction.X[currentDirectionCount + 1]; currentDirection.Y = direction.Y[currentDirectionCount + 1]; }
public void ChangeDirection_Direction11_ShouldReturnNextDirection() { // Arrange CurrentDirection direction = new CurrentDirection(1, 1); // Act Directions.ChangeDirection(direction); CurrentDirection expectedDirection = new CurrentDirection(1, 0); // Assert Assert.IsTrue(expectedDirection.X == direction.X && expectedDirection.Y == direction.Y); }
public static int[,] FillMatrix(int matrixDimension) { int[,] matrix = new int[matrixDimension, matrixDimension]; int fillingNumber = 1; CurrentPosition currentPosition = new CurrentPosition(0, 0); CurrentDirection currentDirection = new CurrentDirection(1, 1); while (true) { matrix[currentPosition.X, currentPosition.Y] = fillingNumber; if (!CheckForEmptyCellInCurrentDirection(matrix, currentPosition)) { FindEmptyCell(matrix, currentPosition); // Break if no more empty cells if (currentPosition.X == 0 && currentPosition.Y == 0) { return(matrix); } // Will be positioned in the empty cell after the update currentPosition.X--; currentPosition.Y--; currentDirection.X = 1; currentDirection.Y = 1; } bool isInBoundariesX = 0 <= currentPosition.X + currentDirection.X && currentPosition.X + currentDirection.X < matrixDimension; bool isInBoundariesY = 0 <= currentPosition.Y + currentDirection.Y && currentPosition.Y + currentDirection.Y < matrixDimension; while (!isInBoundariesX || !isInBoundariesY || matrix[currentPosition.X + currentDirection.X, currentPosition.Y + currentDirection.Y] != 0) { Directions.ChangeDirection(currentDirection); isInBoundariesX = 0 <= currentPosition.X + currentDirection.X && currentPosition.X + currentDirection.X < matrixDimension; isInBoundariesY = 0 <= currentPosition.Y + currentDirection.Y && currentPosition.Y + currentDirection.Y < matrixDimension; } currentPosition.X += currentDirection.X; currentPosition.Y += currentDirection.Y; fillingNumber++; } }
public static int[,] FillMatrix(int matrixDimension) { int[,] matrix = new int[matrixDimension, matrixDimension]; int fillingNumber = 1; CurrentPosition currentPosition = new CurrentPosition(0, 0); CurrentDirection currentDirection = new CurrentDirection(1, 1); while (true) { matrix[currentPosition.X, currentPosition.Y] = fillingNumber; if (!CheckForEmptyCellInCurrentDirection(matrix, currentPosition)) { FindEmptyCell(matrix, currentPosition); // Break if no more empty cells if (currentPosition.X == 0 && currentPosition.Y == 0) { return matrix; } // Will be positioned in the empty cell after the update currentPosition.X--; currentPosition.Y--; currentDirection.X = 1; currentDirection.Y = 1; } bool isInBoundariesX = 0 <= currentPosition.X + currentDirection.X && currentPosition.X + currentDirection.X < matrixDimension; bool isInBoundariesY = 0 <= currentPosition.Y + currentDirection.Y && currentPosition.Y + currentDirection.Y < matrixDimension; while (!isInBoundariesX || !isInBoundariesY || matrix[currentPosition.X + currentDirection.X, currentPosition.Y + currentDirection.Y] != 0) { Directions.ChangeDirection(currentDirection); isInBoundariesX = 0 <= currentPosition.X + currentDirection.X && currentPosition.X + currentDirection.X < matrixDimension; isInBoundariesY = 0 <= currentPosition.Y + currentDirection.Y && currentPosition.Y + currentDirection.Y < matrixDimension; } currentPosition.X += currentDirection.X; currentPosition.Y += currentDirection.Y; fillingNumber++; } }
public void CurrentDirection_InValidInputY_ShouldTrowException() { CurrentDirection currentDirection = new CurrentDirection(1, 2); }