static void testAll() { (int, int)mazeDimenations = (Console.WindowWidth - 8, Console.WindowHeight - 5); Console.ForegroundColor = ConsoleColor.Green; Console.Write("generating maze..."); var mazes = new HashSet <HashSet <Point> >(); var thread = new Thread( () => { mazes.Add(BoruvkasAlgorithm.generateMaze(mazeDimenations.Item1, mazeDimenations.Item2)); }); var thread2 = new Thread( () => { mazes.Add(PrimsAlgorithm.generateMaze(mazeDimenations.Item1, mazeDimenations.Item2)); }); var thread3 = new Thread( () => { mazes.Add(KruskalsAlgorithm.generateMaze(mazeDimenations.Item1, mazeDimenations.Item2)); }); var thread4 = new Thread( () => { mazes.Add(RecursiveBacktrackerAlgorithm.generateMaze(mazeDimenations.Item1, mazeDimenations.Item2)); }); var thread5 = new Thread( () => { mazes.Add(HuntandKill.generateMaze(mazeDimenations.Item1, mazeDimenations.Item2)); }); var threadList = new List <Thread> { thread, thread2, thread3, thread4, thread5 }; foreach (var t in threadList) { t.Start(); } ; Console.Clear(); if (thread.IsAlive | thread2.IsAlive | thread3.IsAlive | thread4.IsAlive) { Console.ForegroundColor = ConsoleColor.Red; Console.Write("generating mazes..."); } while (thread.IsAlive | thread2.IsAlive | thread3.IsAlive | thread4.IsAlive) { //if a maze is still being generated then don't go onto the code below } Console.SetCursorPosition(0, 0); Console.ForegroundColor = ConsoleColor.Red; Console.Write("finished generating mazes"); foreach (HashSet <Point> maze in mazes) { setBothColours(ConsoleColor.White); printMaze(maze); Depth_first_Search.solveMaze(maze); Thread.Sleep(800); resetWindow(); } }
public static HashSet <Point> generateMaze(int width, int height) { var startV = new Point(5, 3); var currentV = startV; var visited = RecursiveBacktrackerAlgorithm.ReturnDict(width, height); var maze = new HashSet <Point>(); var mazeEntry = new Point(5, 2); maze.Add(mazeEntry); visited[startV] = true; maze.Add(startV); var r = new Random(); while (unvisitedVertices(visited)) { var availableVertices = Program.returnUnvisitedNeighbours(visited, currentV); if (availableVertices.Count > 0) { var temporaryV = availableVertices[r.Next(availableVertices.Count)]; visited[temporaryV] = true; var wallV = RecursiveBacktrackerAlgorithm.pointMidPoint(currentV, temporaryV); maze.Add(wallV); maze.Add(temporaryV); currentV = temporaryV; } else { foreach (Point v in visited.Keys) { var visitedNeighbours = PrimsAlgorithm.returnVisitedNeighbours(visited, v); if (visitedNeighbours.Count == 0 || visited[v]) { continue; } else { var newVertex = visitedNeighbours[r.Next(visitedNeighbours.Count)]; var wallV = RecursiveBacktrackerAlgorithm.pointMidPoint(newVertex, v); maze.Add(wallV); maze.Add(v); currentV = v; break; } } visited[currentV] = true; } } var mazeExit = RecursiveBacktrackerAlgorithm.returnExit(width, height); maze.Add(mazeExit); return(maze); }