// Метод CreateMaze - создает лабиринт из двух комнат с одной дверью между комнатами. // В нем нет недостатков прошлой версии метода. public Maze CreateMaze(MazeFactory factory) { this.factory = factory; // Лабиринт. Maze aMaze = this.factory.MakeMaze(); Room r1 = this.factory.MakeRoom(1); Room r2 = this.factory.MakeRoom(2); // Дверь - данный экземпляр содержит ссылки на две комнаты. (Является общим для двух комнат.) Door aDoor = this.factory.MakeDoor(r1, r2); aMaze.AddRoom(r1); aMaze.AddRoom(r2); r1.SetSide(Direction.North, this.factory.MakeWall()); r1.SetSide(Direction.East, aDoor); r1.SetSide(Direction.South, this.factory.MakeWall()); r1.SetSide(Direction.West, this.factory.MakeWall()); r2.SetSide(Direction.North, this.factory.MakeWall()); r2.SetSide(Direction.East, this.factory.MakeWall()); r2.SetSide(Direction.South, this.factory.MakeWall()); r2.SetSide(Direction.West, aDoor); return(aMaze); }
public Maze CreateMaze(MazeFactory factoryParam) { factory = factoryParam; var aMaze = factory.MakeMaze(); var r1 = factory.MakeRoom(1); r1.Enter(); var r2 = factory.MakeRoom(2); r2.Enter(); var theDoor = factory.MakeDoor(r1, r2); theDoor.Enter(); aMaze.AddRoom(r1); aMaze.AddRoom(r2); r1.SetSide(Direction.North, factory.MakeWall()); r1.SetSide(Direction.East, theDoor); r1.SetSide(Direction.South, factory.MakeWall()); r1.SetSide(Direction.West, factory.MakeWall()); r1.SetSide(Direction.North, factory.MakeWall()); r1.SetSide(Direction.West, theDoor); r1.SetSide(Direction.South, factory.MakeWall()); r1.SetSide(Direction.East, factory.MakeWall()); return(aMaze); }
public Maze CreateMaze(MazeFactory factory) { this.factory = factory; Maze aMaze = this.factory.MakeMaze(); Room r1 = this.factory.MakeRoom(1); r1.Enter(); Room r2 = this.factory.MakeRoom(2); r2.Enter(); Door aDoor = this.factory.MakeDoor(r1, r2); aDoor.Enter(); aMaze.AddRoom(r1); aMaze.AddRoom(r2); r1.SetSide(Direction.North, this.factory.MakeWall()); r1.SetSide(Direction.East, aDoor); r1.SetSide(Direction.South, this.factory.MakeWall()); r1.SetSide(Direction.West, this.factory.MakeWall()); r2.SetSide(Direction.North, this.factory.MakeWall()); r2.SetSide(Direction.East, this.factory.MakeWall()); r2.SetSide(Direction.South, this.factory.MakeWall()); r2.SetSide(Direction.West, aDoor); return(aMaze); }
public static MazeFactory Instance() { if (instance == null) { // Берем значение свойства MAZESTYLE из файла окружения string mazeStyle = GetEnv("MAZESTYLE"); if (string.Compare(mazeStyle, "bombed") == 0) // 0 - совпадают, 1 - не совпадают { Console.WriteLine("Инстанцируем фабрику для лабиринта с бомбами"); instance = new BombedMazeFactory(); } else if (string.Compare(mazeStyle, "enchanted") == 0) { Console.WriteLine("Инстанцируем фабрику для лабиринта с заклинаниями"); instance = new EnchantedMazeFactory(); } else // По умолчанию. { Console.WriteLine("Инстанцируем фабрику для обычного лабиринта"); instance = new MazeFactory(); } } return(instance); }
public MainWindow() { InitializeComponent(); MazeGame game = new MazeGame(); MazeFactory factory = new MazeFactory(); game.CreateMaze(factory); }
public MainWindow() { InitializeComponent(); // Создаем генератор лабиринта. MazeGame game = new MazeGame(); MazeFactory factory = new MazeFactory(); //Конфигурируем фабрику базовыми элементами лабиринта MazePrototypeFactory simpleMazeFactory = new MazePrototypeFactory(new Maze(), new Wall(), new Room(2), new Door()); // Создаем лабиринт из двух комнат используя фабричный метод - CreateMaze(). Maze maze = game.CreateMaze(simpleMazeFactory); }
public static MazeFactory Instance() { if (instance == null) { string mazeStyle = "standard"; // нужен метод string GetEnv("MAZESTYLE"); if (string.Compare(mazeStyle, "bombed") == 0) // 0 - совпадают, 1 - не совпадают { instance = new BombedMazeFactory(); } else if (string.Compare(mazeStyle, "enchanted") == 0) { instance = new EnchantedMazeFactory(); } else // По умолчанию. { instance = new MazeFactory(); } } return(instance); }
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); } }
public MazeFactory Instanse() { return(factory ?? (factory = new MazeFactory())); }