예제 #1
0
        public void SetDistanceFromStart_Should_Work_On_Large_Mazes_With_Multiple_Portals()
        {
            StringBuilder mazeDef = new StringBuilder();

            mazeDef.AppendLine("         A         ");
            mazeDef.AppendLine("         A         ");
            mazeDef.AppendLine("  #######.#########");
            mazeDef.AppendLine("  #######.........#");
            mazeDef.AppendLine("  #######.#######.#");
            mazeDef.AppendLine("  #######.#######.#");
            mazeDef.AppendLine("  #######.#######.#");
            mazeDef.AppendLine("  #####  B    ###.#");
            mazeDef.AppendLine("BC...##  C    ###.#");
            mazeDef.AppendLine("  ##.##       ###.#");
            mazeDef.AppendLine("  ##...DE  F  ###.#");
            mazeDef.AppendLine("  #####    G  ###.#");
            mazeDef.AppendLine("  #########.#####.#");
            mazeDef.AppendLine("DE..#######...###.#");
            mazeDef.AppendLine("  #.#########.###.#");
            mazeDef.AppendLine("FG..#########.....#");
            mazeDef.AppendLine("  ###########.#####");
            mazeDef.AppendLine("             Z     ");
            mazeDef.AppendLine("             Z     ");
            var          allMaze = mazeDef.ToString().ToDoubleCharArray();
            Maze         m       = new Maze(allMaze, new DayTwentyMazeFactory());
            MazeEntrance e       = m.Cells.OfType <MazeEntrance>().First();

            m.ResetCells();

            m.SetDistancesFrom(e);

            m.Cells.OfType <MazeExit>().First().DistanceFromStart.Should().Be(23);
        }
예제 #2
0
 public void SetUp()
 {
     cell       = new MazeCell(new Point2D(1, 1));
     wall       = new MazeWall(new Point2D(1, 1));
     exit       = new MazeExit(new Point2D(1, 1));
     entrance   = new MazeEntrance(new Point2D(1, 1));
     collection = new MazeCellCollection();
 }
예제 #3
0
        public void SetDistanceFromStart_Should_Work_On_Very_Large_Mazes_With_Multiple_Portals()
        {
            StringBuilder mazeDef = new StringBuilder();

            mazeDef.AppendLine("                   A               ");
            mazeDef.AppendLine("                   A               ");
            mazeDef.AppendLine("  #################.#############  ");
            mazeDef.AppendLine("  #.#...#...................#.#.#  ");
            mazeDef.AppendLine("  #.#.#.###.###.###.#########.#.#  ");
            mazeDef.AppendLine("  #.#.#.......#...#.....#.#.#...#  ");
            mazeDef.AppendLine("  #.#########.###.#####.#.#.###.#  ");
            mazeDef.AppendLine("  #.............#.#.....#.......#  ");
            mazeDef.AppendLine("  ###.###########.###.#####.#.#.#  ");
            mazeDef.AppendLine("  #.....#        A   C    #.#.#.#  ");
            mazeDef.AppendLine("  #######        S   P    #####.#  ");
            mazeDef.AppendLine("  #.#...#                 #......VT");
            mazeDef.AppendLine("  #.#.#.#                 #.#####  ");
            mazeDef.AppendLine("  #...#.#               YN....#.#  ");
            mazeDef.AppendLine("  #.###.#                 #####.#  ");
            mazeDef.AppendLine("DI....#.#                 #.....#  ");
            mazeDef.AppendLine("  #####.#                 #.###.#  ");
            mazeDef.AppendLine("ZZ......#               QG....#..AS");
            mazeDef.AppendLine("  ###.###                 #######  ");
            mazeDef.AppendLine("JO..#.#.#                 #.....#  ");
            mazeDef.AppendLine("  #.#.#.#                 ###.#.#  ");
            mazeDef.AppendLine("  #...#..DI             BU....#..LF");
            mazeDef.AppendLine("  #####.#                 #.#####  ");
            mazeDef.AppendLine("YN......#               VT..#....QG");
            mazeDef.AppendLine("  #.###.#                 #.###.#  ");
            mazeDef.AppendLine("  #.#...#                 #.....#  ");
            mazeDef.AppendLine("  ###.###    J L     J    #.#.###  ");
            mazeDef.AppendLine("  #.....#    O F     P    #.#...#  ");
            mazeDef.AppendLine("  #.###.#####.#.#####.#####.###.#  ");
            mazeDef.AppendLine("  #...#.#.#...#.....#.....#.#...#  ");
            mazeDef.AppendLine("  #.#####.###.###.#.#.#########.#  ");
            mazeDef.AppendLine("  #...#.#.....#...#.#.#.#.....#.#  ");
            mazeDef.AppendLine("  #.###.#####.###.###.#.#.#######  ");
            mazeDef.AppendLine("  #.#.........#...#.............#  ");
            mazeDef.AppendLine("  #########.###.###.#############  ");
            mazeDef.AppendLine("           B   J   C               ");
            mazeDef.AppendLine("           U   P   P               ");
            var          allMaze = mazeDef.ToString().ToDoubleCharArray();
            Maze         m       = new Maze(allMaze, new DayTwentyMazeFactory());
            MazeEntrance e       = m.Cells.OfType <MazeEntrance>().First();

            m.ResetCells();

            m.SetDistancesFrom(e);

            m.Cells.OfType <MazeExit>().First().DistanceFromStart.Should().Be(58);
        }
예제 #4
0
    private MazeEntrance CreateEntrance(IntVector2 coordinates)
    {
        MazeEntrance newCell = Instantiate(entrancePrefab) as MazeEntrance;

        cells[coordinates.x, coordinates.y] = newCell;
        newCell.coordinates = coordinates;
        newCell.name = "Maze Entrance " + coordinates.x + ", " + coordinates.y;
        newCell.transform.parent = transform;
        newCell.transform.localPosition = new Vector3(
            coordinates.x * newCell.size.x - size.x * 0.5f * newCell.size.x + 0.5f * newCell.size.x,
            coordinates.y * newCell.size.y - size.y * 0.5f * newCell.size.y  + 0.5f * newCell.size.y,
            0f
        );

        return newCell;
    }
예제 #5
0
        public void SetDistanceFromStart_Should_Use_Portals_When_Available()
        {
            StringBuilder mazeDef = new StringBuilder();

            mazeDef.AppendLine("########");
            mazeDef.AppendLine("##BC..ZZ");
            mazeDef.AppendLine("########");
            mazeDef.AppendLine("AA..BC##");
            mazeDef.AppendLine("########");
            var          allMaze = mazeDef.ToString().ToDoubleCharArray();
            Maze         m       = new Maze(allMaze, new DayTwentyMazeFactory());
            MazeEntrance e       = m.Cells.OfType <MazeEntrance>().First();

            m.ResetCells();

            m.SetDistancesFrom(e);

            m.Cells.OfType <MazeExit>().First().DistanceFromStart.Should().Be(3);
        }