示例#1
0
    public static void Main(string[] args)
    {
        Console.SetWindowSize(240, 80);

        Random      rand    = new Random();
        SegmentMask maskSet = new SegmentMask(10, 10);

        while (true)
        {
            Console.Clear();

            MazeGenerator mazeGen = new MazeGenerator(rand);
            mazeGen.SetLoopChance(0.1F);
            mazeGen.SetStraightBias(0.2F);
            MazeMap mazeMap = mazeGen.Generate(12, 8);

            CellularGenerator cellGen = new CellularGenerator(rand);
            cellGen.SetPasses(8);
            cellGen.SetFillWeight(0.5F);
            cellGen.SetThresholds(4, 4);
            CellMap cellMap = cellGen.Generate(mazeMap, maskSet);

            for (int j = 0; j < cellMap.Height(); j++)
            {
                for (int i = 0; i < cellMap.Width(); i++)
                {
                    Console.Write(GetCharFromCell(cellMap.GetSegment(new MapPos(i, j))) + " ");
                }
            }

            Console.Write("Press enter to regenerate...");
            Console.ReadLine();
        }
    }
示例#2
0
    public CellMap Generate(MazeMap maze, SegmentMask masks)
    {
        CellMap map = new CellMap(maze.Width() * masks.SegmentWidth(), maze.Height() * masks.SegmentHeight());

        BakeMask(map, maze, masks);
        SeedMap(map);

        for (int n = 0; n < passes; n++)
        {
            DoPass(map);
        }

        return(map);
    }
示例#3
0
    private void BakeMask(CellMap map, MazeMap maze, SegmentMask masks)
    {
        for (int i1 = 0; i1 < maze.Width(); i1++)
        {
            for (int j1 = 0; j1 < maze.Height(); j1++)
            {
                int segID = maze.GetSegment(new MapPos(i1, j1));

                for (int i2 = 0; i2 < masks.SegmentWidth(); i2++)
                {
                    for (int j2 = 0; j2 < masks.SegmentHeight(); j2++)
                    {
                        MapPos pos = new MapPos(i1 * masks.SegmentWidth() + i2, j1 * masks.SegmentHeight() + j2);
                        map.SetSegment(pos, masks.GetMask(segID).GetSegment(new MapPos(i2, j2)));
                    }
                }
            }
        }
    }