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);
        }
示例#7
0
        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));
        }