Шаблоны игрового проектирования

Паттерны GoF(Банда 4)

Порождающие паттерны:

  • Фабричный метод (Factory Method)

    Фабричный метод (Factory Method) — это паттерн, который определяет интерфейс для создания объектов некоторого класса, но непосредственное решение о том, объект какого класса создавать происходит в подклассах. То есть паттерн предполагает, что базовый класс делегирует создание объектов классам-наследникам.

    Пример применения: создайте NPC или виджеты GUI на основе строки, прочитанной из файла

    Подробнее

  • Абстрактная фабрика (Abstract Factory)

    Паттерн «Абстрактная фабрика» (Abstract Factory) предоставляет интерфейс для создания семейств взаимосвязанных объектов с определенными интерфейсами без указания конкретных типов данных объектов.

    Подробнее

  • Одиночка (Singleton)

    Одиночка (Singleton, Синглтон) — порождающий паттерн, который гарантирует, что для определенного класса будет создан только один объект, а также предоставит к этому объекту точку доступа.

    Подробнее

  • Прототип (Prototype)

    Паттерн Прототип (Prototype) позволяет создавать объекты на основе уже ранее созданных объектов-прототипов. То есть по сути данный паттерн предлагает технику клонирования объектов.

    Пример использования: сохраните один универсальный символ ‘Эльф’ с начальными свойствами и создайте экземпляры Эльфа, клонируя его.

    Подробнее

  • Строитель (Builder)

    Строитель (Builder) — шаблон проектирования, который инкапсулирует создание объекта и позволяет разделить его на различные этапы.

    Пример применения: настройка компонента на основе компонентов по одному компоненту за раз на основе данных

    Подробнее

Паттерны поведения:

  • Стратегия (Strategy)

    Паттерн Стратегия (Strategy) представляет шаблон проектирования, который определяет набор алгоритмов, инкапсулирует каждый из них и обеспечивает их взаимозаменяемость. В зависимости от ситуации мы можем легко заменить один используемый алгоритм другим. При этом замена алгоритма происходит независимо от объекта, который использует данный алгоритм.

    Пример применения: переключаться между различными эвристиками для поиска A *, в зависимости от того, в какой местности вы находитесь, или, возможно, даже использовать одну и ту же среду A * для выполнения поиска пути и более общего планирования

    Подробнее

  • Наблюдатель (Observer)

    Паттерн «Наблюдатель» (Observer) представляет поведенческий шаблон проектирования, который использует отношение «один ко многим». В этом отношении есть один наблюдаемый объект и множество наблюдателей. И при изменении наблюдаемого объекта автоматически происходит оповещение всех наблюдателей.

    Наблюдатель: иметь визуализируемое представление персонажа, слушающего события из логического представления, чтобы при необходимости изменять визуальное представление, при этом игровой логике не нужно ничего знать о рендеринге кода

    Подробнее

  • Команда (Command)

    Паттерн «Команда» (Command) позволяет инкапсулировать запрос на выполнение определенного действия в виде отдельного объекта. Этот объект запроса на действие и называется командой. При этом объекты, инициирующие запросы на выполнение действия, отделяются от объектов, которые выполняют это действие.

    Команды могут использовать параметры, которые передают ассоциированную с командой информацию. Кроме того, команды могут ставиться в очередь и также могут быть отменены.

    Пример применения: инкапсулировать функциональность игры в виде команд, которые можно вводить в консоль, сохранять и воспроизводить, или даже создавать сценарии для помощи в тестировании игры.

    Подробнее

  • Шаблонный метод (Template Method)

    Шаблонный метод (Template Method) определяет общий алгоритм поведения подклассов, позволяя им переопределить отдельные шаги этого алгоритма без изменения его структуры.

    Шаблонный метод: настройте общую «боевую» подпрограмму с различными функциями ловушек для обработки каждого шага, например. уменьшать боеприпасы, рассчитывать вероятность попадания, разрешать попадания или пропуски, рассчитывать урон, и каждый тип навыка атаки будет реализовывать методы по-своему

    Подробнее

  • Итератор (Iterator)

    Паттерн Итератор (Iterator) предоставляет абстрактный интерфейс для последовательного доступа ко всем элементам составного объекта без раскрытия его внутренней структуры.

    Подробнее

  • Состояние (State)

    Состояние (State) — шаблон проектирования, который позволяет объекту изменять свое поведение в зависимости от внутреннего состояния.

    State: хранить NPC AI как одно из нескольких состояний, например. Атакующий, блуждающий, убегающий. У каждого может быть свой собственный метод update () и любые другие необходимые ему данные (например, хранение символа, из которого он атакует или бежит, области, в которой он блуждает, и т. Д.)

    Подробнее

  • Цепочка Обязанностей (Chain of responsibility)

    Цепочка Обязанностей (Chain of responsibility) — поведенческий шаблон проектирования, который позволяет избежать жесткой привязки отправителя запроса к получателю. Все возможные обработчики запроса образуют цепочку, а сам запрос перемещается по этой цепочке. Каждый объект в этой цепочке при получении запроса выбирает, либо закончить обработку запроса, либо передать запрос на обработку следующему по цепочке объекту.

    Цепочка ответственности: обрабатывать ввод как цепочку обработчиков, например. глобальные клавиши (например, для снимков экрана), затем GUI (например, в случае, если текстовое поле находится в фокусе или меню вверх), затем игра (например, для перемещения персонажа)

    Подробнее

  • Интерпретатор (Interpreter)

    Паттерн Интерпретатор (Interpreter) определяет представление грамматики для заданного языка и интерпретатор предложений этого языка. Как правило, данный шаблон проектирования применяется для часто повторяющихся операций.

    Подробнее

  • Посредник (Mediator)

    Паттерн Посредник (Mediator) представляет такой шаблон проектирования, который обеспечивает взаимодействие множества объектов без необходимости ссылаться друг на друга. Тем самым достигается слабосвязанность взаимодействующих объектов.

    Пример применения: реализуйте игровые сущности в виде небольшого класса посредника, который работает с различными компонентами (например, чтение из компонента здоровья для передачи данных в компонент AI)

    Подробнее

  • Хранитель (Memento)

    Паттерн Хранитель (Memento) позволяет выносить внутреннее состояние объекта за его пределы для последующего возможного восстановления объекта без нарушения принципа инкапсуляции.

    Подробнее

  • Посетитель (Visitor)

    Паттерн Посетитель (Visitor) позволяет определить операцию для объектов других классов без изменения этих классов.

    При использовании паттерна Посетитель определяются две иерархии классов: одна для элементов, для которых надо определить новую операцию, и вторая иерархия для посетителей, описывающих данную операцию.

    Подробнее

Структурные паттерны:

  • Декоратор (Decorator)

    Декоратор (Decorator) представляет структурный шаблон проектирования, который позволяет динамически подключать к объекту дополнительную функциональность.

    Для определения нового функционала в классах нередко используется наследование. Декораторы же предоставляет наследованию более гибкую альтернативу, поскольку позволяют динамически в процессе выполнения определять новые возможности у объектов.

    Подробнее

  • Адаптер (Adapter)

    Паттерн Адаптер (Adapter) предназначен для преобразования интерфейса одного класса в интерфейс другого. Благодаря реализации данного паттерна мы можем использовать вместе классы с несовместимыми интерфейсами.

    Пример применения: включите дополнительную стороннюю библиотеку, обернув ее в слой, который выглядит как существующий код. Очень полезно с DLL.

    Подробнее

  • Фасад (Facade)

    Фасад (Facade) представляет шаблон проектирования, который позволяет скрыть сложность системы с помощью предоставления упрощенного интерфейса для взаимодействия с ней.

    Пример применения: упростите сложные сторонние библиотеки, предоставив более простой интерфейс, чтобы сделать вашу жизнь проще в будущем.

    Подробнее

  • Компоновщик (Composite)

    Паттерн Компоновщик (Composite) объединяет группы объектов в древовидную структуру по принципу «часть-целое и позволяет клиенту одинаково работать как с отдельными объектами, так и с группой объектов.

    Образно реализацию паттерна можно представить в виде меню, которое имеет различные пункты. Эти пункты могут содержать подменю, в которых, в свою очередь, также имеются пункты. То есть пункт меню служит с одной стороны частью меню, а с другой стороны еще одним меню. В итоге мы однообразно можем работать как с пунктом меню, так и со всем меню в целом.

    Подробнее

  • Заместитель (Прокси)

    Паттерн Заместитель (Proxy) предоставляет объект-заместитель, который управляет доступом к другому объекту. То есть создается объект-суррогат, который может выступать в роли другого объекта и замещать его.

    Пример применения: создайте на клиенте небольшие классы, представляющие более крупные и сложные классы на сервере, и пересылайте запросы по сети.

    Подробнее

  • Мост (Bridge)

    Мост (Bridge) — структурный шаблон проектирования, который позволяет отделить абстракцию от реализации таким образом, чтобы и абстракцию, и реализацию можно было изменять независимо друг от друга.

    Подробнее

  • Приспособленец (Flyweight)

    Паттерн Приспособленец (Flyweight) — структурный шаблон проектирования, который позволяет использовать разделяемые объекты сразу в нескольких контекстах. Данный паттерн используется преимущественно для оптимизации работы с памятью.

    Пример применения: хранить общие аспекты NPC (например, модели, текстуры, анимации) отдельно от отдельных аспектов (например, положение, здоровье) в основном прозрачным способом

    Подробнее

Паттерны игрового проектирования

Последовательные шаблоны:

  • Двойная буферизация (Double Buffering)

    Дать возможность ряду последовательных операций выполняться мгновенно или одновременно.

    Подробнее

  • Игровой цикл(Game Loop)

    Устранить зависимость игрового времени от пользовательского ввода и скорости процессора

    Подробнее

  • Метод обновления (Update Method)

    Симуляция коллекции независимых объектов с помощью указания каждому объекту обработки одного кадра поведения за раз.

    Подробнее

Поведенческие шаблоны:

  • Байткод (Bytecode)

    Обеспечить поведению гибкость данных, декодируемых в виде инструкций для виртуальной машины.

    Подробнее

  • Подкласс песочница (Subclass Sandbox)

    Определение поведения в подклассе с помощью набора операций, предоставляемых базовым классом.

    Подробнее

  • Объект тип (Type Object)

    Сделать более гибким создание новых «классов» с помощью создания класса, каждый экземпляр которого может представлять собой другой тип объекта.

    Подробнее

Шаблоны уменьшения связности:

  • Компонент(Component)

    Позволяет одной сущности охватывать несколько областей, не связывая их между собой.

    Подробнее

  • Очередь событий (Event Queue)

    Позволяет одной сущности охватывать несколько областей, не связывая их между собой.

    Подробнее

  • Поиск службы (Service Locator)

    Обеспечить глобальную точку доступа к службе без привязки пользователя к конкретному классу, который ее реализует.

    Основная сложность при работе с поиском службы заключается в том, что он берет зависимость —  связь между двумя кусками кода —  и откладывает их связывание до времени выполнения

    Подробнее

Шаблоны оптимизации:

  • Локализация данных (Data Locality)

    Ускорение доступа к памяти с помощью более удобного для кэширования процессором размещения данных.

    Подробнее

  • Грязный флаг (Dirty Flag)

    Избегать ненужной работы, откладывая ее до тех пор, пока не потребуется результат.

    Набор первичных данных изменяется со временем. Набор вторичных данных вычисляется на основе первичных с помощью ресурсоемкого процесса. «Грязный» флаг отслеживает рассинхронизацию вторичных данных с первичными. Он устанавливается, когда первичные данные изменяются. Если флаг установлен, когда нам понадобились вторичные данные, они вычисляются и флаг снимается. В противном случае используются уже вычисленные вторичные данные.

    Подробнее

  • Пул объектов (Object Pool)

    Улучшение производительности и эффективности использования памяти за счет повторного использования объектов из фиксированного пула, вместо их индивидуального выделения и освобождения.

    Подробнее

  • Разделение пространства (Spatial Partition)

    Эффективный поиск находящихся рядом объектов с помощью сохранения их в структуре данных с организацией на основе их местоположения.

    Подробнее

example in guitHub

Must know: singleton, observer, command, component, flyweght, state, mediator, event dispatcher

GRASP Информационный эксперт (Information Expert) Низкая связанность (Low Coupling) Высокое зацепление (High Cohesion) Устойчивый к изменениям (Protected Variantions) Контроллер (Controller) Полиморфизм (Polymorphism) Чистая выдумка (Pure Fabrication) Перенаправление (Indirection) Создатель (Creator)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *