예제 #1
0
        // Метод 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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #6
0
        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);
        }
예제 #8
0
        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()));
 }