Необходимо уметь создавать клетки, параметры которых определяются пошагово. Для правильной генерации нужно учитывать большое количество параметров вероятности. Необходимо уметь генерировать не только сам класс клеток, но и его сериализацию для сохранения карты.
Использование паттерна Строитель, что позволяет вынести конструирование объекта за пределы класса.
Популяции - объекты, которыми управляет игрок - могут быть травоядными и плотоядными, а так же иметь разные размеры (при инициализации: большой, средний и маленький). Чтобы конструировать животных разных размеров в зависимости от способа питания, нужно при конструировании популяции каждый раз писать много однотипного кода.
Применение паттерна "строитель" позволяет вынести конструирование за пределы класса популяции, что улучшает читаемость кода и облегчает конструирование различных типов популяций.
Строитель травоядной популяции
Строитель плоточдной популяции
Необходимо предоставить глобальную точку доступа для объектов, иниициализация которых занимает много времени, а требуются они часто.
Использование паттера Одиночка, что позволяет получить глобальную точку доступа к сложным объектам.
Синглетон для класса с конфигурацией
Синглетон для класса с рандомным генератором
Синглетон для констант интерфейса
Синглетон для констант интерфейса
Необходимо по запросу от пользователя проводить большое количество действий с внутренними классами для поддержки игровой механики.
Использование паттерна Фасад для обеспечения простого интерфейса взаимодействия с визуализацией.
Необходимо обеспечивать взаимодействие объектов с разными интерфейсами. Например, GUI и игрового движка.
Использование паттерна Адаптер для взаимодействия между разными объектами.
Взаимодействие тестовой системы для GUI и google test
Нужна возможность вызова функции адаптера из интерфейса, для этого ей необходимо придать требуемый стандартом вид.
Использование паттерна Декоратор
Мутации определяют как в течении игры изменяются параметры популяции. Причем у конкрутной популяции появляется много мутаций, которые могу образовывать дерево. Нужно уметь подсчитывать как совокупность всех мутаций меняет параметры популяции, а так же добавлять новые мутации.
Применение паттерна "компоновщик" позволят сконструировать дерево мутаций, в котором могут храниться как сами мутации, так и узлы, в которых эти мутации расходятся и легко вычислять необходимые нам параметры.
Абстрактный компонент дерева мутаций
Для реализации бота необходимо задать последовательность действий, которые должны быть выполнены над популяциями, которые у него есть. Но популяций не фиксированное количество и выполняемые с ними действия должны быть разными. Поэтому нам нужна возможность формировать последовательно не фиксированное количестово запросов разного характера.
Применение паттерна "Цепочка обязанностей" позволят выполнить различные операции над всеми популяциями бота.
В той же директории разные типы обработчиков
Необходимо связать интерфейс и движок игры так, чтобы при нажатии пользователем на кнопку в движок передавался запрос.
Для передачи запросов как объектов используется паттерн "Команда"
Необходимо иметь функционал оповещения множества интерфейсов об обновлении данных, но заранее количество интерфейсов неизвестно.
Использование паттерна "Наблюдатель" для обеспечения механизма подписки интерфейсов.
Также этот паттерн используется в механизмах взаимодействия QML интерфейса с адаптером на C++.