// Чтобы построить дверь между двумя комнатами, требуется найти обе комнаты в лабиринте и их общую стену. public override void BuildDoor(int roomFrom, int roomTo) { Room room1 = currentMaze.RoomNo(roomFrom); Room room2 = currentMaze.RoomNo(roomTo); Door door = new Door(room1, room2); room1.SetSide(CommonWall(room1, room2), door); room2.SetSide(CommonWall(room2, room1), door); }
static void Main() { // Создаем генератор лабиринта. MazeGame game = new MazeGame(); Room room1 = new Room(1); Room room2 = new Room(2); // MazeFactory - SINGLETON. MazeFactory mazeFactory = MazeFactory.Instance(); // Создаем лабиринт из двух комнат используя фабричный метод - CreateMaze(). Maze maze = game.CreateMaze(mazeFactory); // Генератор псевдослучайных последовательностей. Random random = new Random(); // Попадаем в лабиринт, выбирая комнату случайным образом. Room room = maze.RoomNo(random.Next(1, 3)); // Выбранная сторона. MapSite site = null; // ИГРОВАЯ ПЕТЛЯ. // Начинаем идти по лабиринту. while (true) { // Случайным образом выбираем новую сторону. switch (random.Next(0, 5)) { // Выбираем направление куда будем идти (получаем ссылку на сторону). case 0: site = room.GetSide(Direction.North); break; case 1: site = room.GetSide(Direction.South); break; case 2: site = room.GetSide(Direction.East); break; case 3: site = room.GetSide(Direction.West); break; } // Отображаем номер комнаты в которой сейчас находимся. Console.Write("Я в комнате {0}. Делаю шаг. - ", room.RoomNumber); // Делаем шаг в выбранную сторону. (Визуальное отображение стороны на экране) site.Enter(); if (site is Door) // Если дверь, то перейти в другую комнату. { Door door = (Door)site; // Переход в другую комнату (Получение ссылки на новую комнату). room = door.OtherSideFrom(room); } // Иначе стена. Тогда опять ищем другое направление в той-же комнате. // Задержка между шагами. Thread.Sleep(800); } }
static void Main() { // Генератор лабиринта. MazeGame mazeGame = new MazeGame(); // Создается лабиринт из двух комнат используя фабричный метод - CreateMaze(). Maze maze = mazeGame.CreateMaze(); // Генератор псевдослучайных последовательностей. Random random = new Random(); // Ввод имнимого игрока в лабиринт (комната выбирается случайным образом). Room room = maze.RoomNo(random.Next(1, 3)); // Выбранная сторона. MapSite site = null; // ИГРОВАЯ ПЕТЛЯ. // Начало прохождения лабиринта. while (true) { // Выбор новой стороны случайным образом. switch (random.Next(0, 4)) { // Выбор стороны направления (получаем ссылку на сторону). case 0: site = room.GetSide(Direction.North); break; case 1: site = room.GetSide(Direction.South); break; case 2: site = room.GetSide(Direction.East); break; case 3: site = room.GetSide(Direction.West); break; } // Отображение номера комнаты в которой сейчас находится мнимый игрок. Console.Write("Я в комнате {0}. Делаю шаг. - ", room.RoomNumber); // Попытка следать шаг в выбранную сторону (Визуальное отображение стороны на экране). site.Enter(); if (site is Door) // Если дверь, то перейти в другую комнату. { Door door = (Door)site; // Переход в другую комнату (Получение ссылки на новую комнату). room = door.OtherSideFrom(room); } // Иначе стена. Тогда продолжается поиск другого направления в той-же комнате. // Задержка между шагами. Thread.Sleep(800); } }