static void Main(string[] args) { try { // The third command-line parameter indicates how many extra connections should be added to the labyrinth // once it is a single blob. This will introduce cycles, which should make the labyrinth more challenging to navigate. var numberOfExtraConnections = 0; if (args.Length < 2 || args.Length > 3) { Console.WriteLine("Usage: Labyrinth.exe (NumberOfLevels) (NumberOfRoomsPerLevel) [NumberOfExtraConnections]"); return; } if (args.Length > 2) { numberOfExtraConnections = int.Parse(args[2]); } var generator = new LabyrinthGenerator(int.Parse(args[0]), int.Parse(args[1]), numberOfExtraConnections); generator.Generate(); generator.Report(); generator.PrintLongestPath(); generator.NavigateLabyrinth(); } catch (Exception ex) { Console.WriteLine("Caught {0}: {1}", ex.GetType().FullName, ex.Message); } }
public List <RoomInfo> GeneratePossibleNeighbours(LabyrinthGenerator generator) { var result = new List <RoomInfo>(); if (levelNumber > 0) { result.AddRange(GeneratePossibleNeighboursOnLevel(generator, levelNumber - 1)); } if (levelNumber < generator.numberOfLevels - 1) { result.AddRange(GeneratePossibleNeighboursOnLevel(generator, levelNumber + 1)); } return(result); }
public override void OnInspectorGUI() { DrawDefaultInspector(); LabyrinthGenerator labyrinthGenerator = (LabyrinthGenerator)target; labyrinthGenerator.rows = EditorGUILayout.IntSlider(labyrinthGenerator.rows, 10, 100); labyrinthGenerator.columns = EditorGUILayout.IntSlider(labyrinthGenerator.columns, 10, 100); var isPressButton = GUILayout.Button("Создать лабиринт", EditorStyles.miniButtonLeft); if (isPressButton) { labyrinthGenerator.isNeedToGenerate = false; labyrinthGenerator.Generate(); } }
private List <RoomInfo> GeneratePossibleNeighboursOnLevel(LabyrinthGenerator generator, int newLevel) { var result = new List <RoomInfo>(); if (roomNumber == generator.numberOfRoomsPerLevel - 1) { // Rooms with this room number form the central core of the tower. for (int i = 0; i < generator.numberOfRoomsPerLevel - 1; ++i) { result.Add(new RoomInfo(newLevel, i)); } } else { result.Add(new RoomInfo(newLevel, (roomNumber + 1) % (generator.numberOfRoomsPerLevel - 1))); result.Add(new RoomInfo(newLevel, (roomNumber + generator.numberOfRoomsPerLevel - 2) % (generator.numberOfRoomsPerLevel - 1))); result.Add(new RoomInfo(newLevel, generator.numberOfRoomsPerLevel - 1)); } return(result); }