public void OpenPaths_VariousDirectionsAreSetToFalse_OpenPathsAsExpected() { var directions = new DirectionsAvailable(); directions[DirectionEnum.Right] = false; Assert.IsTrue(directions.OpenPaths.Contains(DirectionEnum.Up)); Assert.IsTrue(directions.OpenPaths.Contains(DirectionEnum.Down)); Assert.IsTrue(directions.OpenPaths.Contains(DirectionEnum.Left)); Assert.IsFalse(directions.OpenPaths.Contains(DirectionEnum.Right)); directions[DirectionEnum.Up] = false; Assert.IsFalse(directions.OpenPaths.Contains(DirectionEnum.Up)); Assert.IsTrue(directions.OpenPaths.Contains(DirectionEnum.Down)); Assert.IsTrue(directions.OpenPaths.Contains(DirectionEnum.Left)); Assert.IsFalse(directions.OpenPaths.Contains(DirectionEnum.Right)); directions[DirectionEnum.Left] = false; Assert.IsFalse(directions.OpenPaths.Contains(DirectionEnum.Up)); Assert.IsTrue(directions.OpenPaths.Contains(DirectionEnum.Down)); Assert.IsFalse(directions.OpenPaths.Contains(DirectionEnum.Left)); Assert.IsFalse(directions.OpenPaths.Contains(DirectionEnum.Right)); }
public void OpenPaths_ObjectInitialized_AllDirectionsAreOpen() { var directions = new DirectionsAvailable(); Assert.IsTrue(directions.OpenPaths.Contains(DirectionEnum.Up)); Assert.IsTrue(directions.OpenPaths.Contains(DirectionEnum.Down)); Assert.IsTrue(directions.OpenPaths.Contains(DirectionEnum.Left)); Assert.IsTrue(directions.OpenPaths.Contains(DirectionEnum.Right)); }
public void ConvertMazeGridpointToPixelColor_GridpointIsWall_ColorIsBlack() { var coordinate = new CartesianCoordinate(0, 0); var directions = new DirectionsAvailable(); var mazeGridpoint = new MazeGridpoint(coordinate, directions, false, false, true); var pixelColor = MazeGridpointConverter.ConvertMazeGridpointToPixelColor(mazeGridpoint); Assert.AreEqual(pixelColor.ToArgb(), Color.Black.ToArgb()); }
public void ConvertMazeGridpointToPixelColor_GridpointOHasBeenVisited_ColorIsGray() { var coordinate = new CartesianCoordinate(0, 0); var directions = new DirectionsAvailable(); var mazeGridpoint = new MazeGridpoint(coordinate, directions, false, false, false); mazeGridpoint.HasBeenVisited = true; mazeGridpoint.IsOnSolutionPath = false; var pixelColor = MazeGridpointConverter.ConvertMazeGridpointToPixelColor(mazeGridpoint); Assert.AreEqual(pixelColor.ToArgb(), Color.Gray.ToArgb()); }
public void ConvertMazeGridpointToPixelColor_GridpointIsStart_ColorIsRed() { var coordinate = new CartesianCoordinate(0, 0); var directions = new DirectionsAvailable(); var mazeGridpoint = new MazeGridpoint(coordinate, directions, true, false, false); mazeGridpoint.HasBeenVisited = false; var pixelColor = MazeGridpointConverter.ConvertMazeGridpointToPixelColor(mazeGridpoint); Assert.AreEqual(pixelColor.ToArgb(), Color.Red.ToArgb()); mazeGridpoint.HasBeenVisited = true; pixelColor = MazeGridpointConverter.ConvertMazeGridpointToPixelColor(mazeGridpoint); Assert.AreEqual(pixelColor.ToArgb(), Color.Red.ToArgb()); }
public void Count_VariousDirectionsAreSetToFalse_CountAsExpected() { var directions = new DirectionsAvailable(); Assert.AreEqual(directions.Count, 4); directions[DirectionEnum.Right] = false; Assert.AreEqual(directions.Count, 3); directions[DirectionEnum.Up] = false; Assert.AreEqual(directions.Count, 2); directions[DirectionEnum.Left] = false; Assert.AreEqual(directions.Count, 1); }
public MazeGridpoint( CartesianCoordinate position, DirectionsAvailable directions, bool isStartPoint, bool isFinishPoint, bool isWall) { Position = position; DirectionsAvailable = directions; IsStartPoint = isStartPoint; IsFinishPoint = isFinishPoint; IsWall = isWall; }
// The rule for the problem state that start will be Red, end will be Blue, all walls will be Black. // Futhermore, this code is assuming that the interior of the maze will be white only. // If any of those rules are violated, we can catch them here. // Alternatively, if the rules are changed it then this the only function that needs to be altered. /// <summary> /// Converts a pixel position of an image and it's color into MazeGridpoint. Shades of red are interpreted /// as starting points. Shades of blue are interpreted as ending points. /// </summary> public static MazeGridpoint ConvertPixelInformationToMazeGridpoint(int x, int y, Color mazeImagePixelColor) { var position = new CartesianCoordinate(x, y); var directionsAvailable = new DirectionsAvailable(); // One could also envision an interchanged Start/End/Wall determination logic here as an interface, // but since the rules are clearly stated, that might be overkill. Also, the class would need to // be non-static in order to pull that off. bool isRed; bool isBlue; bool isBlack; ValidatePixelColor(mazeImagePixelColor, out isRed, out isBlue, out isBlack); var isStartPoint = IsColorRed(mazeImagePixelColor); var isEndPoint = IsColorBlue(mazeImagePixelColor); var isWall = IsColorBlack(mazeImagePixelColor); return(new MazeGridpoint(position, directionsAvailable, isStartPoint, isEndPoint, isWall)); }