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(); } }
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); }
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))); } } } } }