#include <GameBuilders.h>
Открытые члены | |
void | create_rooms () override |
void | set_rooms_sides () override |
CommonBuilder (float width, float height, float room_size) | |
![]() | |
CommonBuilder (float width, float height, float room_size) | |
void | create_context (float static_objects_ratio, float dynamic_objects_ratio, int players) override |
Создает контекст для игры | |
void | create_state (IStateManager &state_manager, const sf::VideoMode &mode, const std::string &window_title) override |
Cоздаем состояние GameState, используя имя, режим окна и сслыку на менеджер состояний | |
void | set_all_to_state () override |
Созданный лабиринт и контекст назначаем созданному состоянию игры GameState. | |
std::unique_ptr< GameState > | get_game () override |
Получить результат строителя. | |
Дополнительные унаследованные члены | |
![]() | |
float | m_width |
float | m_height |
float | m_room_size |
std::vector< std::vector< Room * > > | m_rooms |
GameContext | m_context |
std::unique_ptr< GameState > | m_game_state |
сложный строитель для уровня HARD
|
overridevirtual |
создание комнат
Замещает IGameBuilder.
|
overridevirtual |
Генерация лабиринта через алгоритм Эллера
все комнаты нулевой строки сверху получают стену UP
все комнаты последней строки снизу получают стену DOWN
создаем проход направо между соседними комнатами
все комнаты нулевого столбца слева получают стену LEFT
все комнаты последнего столбца справа получают стену RIGHT
присваиваем ячейкам свое уникальное множество
исключаем последнюю строку
создавать стену или нет?
объединение множеств
соединение с ячейкой снизу/вверх
гарантируем, что в каждом множетве будет хотя бы один выход вниз
если есть еще ячейки, у которых нет выхода вниз -> можно поставить стену
обязательно ставим проход
всегда ставим проход
обновляем множества для следующей строки
Замещает IGameBuilder.