Image

Imagetopright wrote in Imageru_cpp

Categories:

Модульная архитектура игрового движка 2

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

Game - класс настроек приложения, в нем происходит инициализация окружения, Windows stuff и т.д. Паттерн Singleton.

GameModeBase - абстрактный класс, воплощающий в отчужденном виде режим (или состояние) игры. Паттерн State. Содержит protected static members - ссылки на классы Direct3d, DirectInput, DirectAudio (каждый из которых является синглтоном-фасадом).

GameMode1, GameMode2 - наследники GameModeBase, конкретные режимы игры. Каждый из них загружает свои ресурсы, предоставляет игроку свой игровой интерфейс, имеет свою функцию отрисовки. Кандидаты в GameMode: отдельная глава игры; меню; один из жанровых режимов игры со своим особым интерфейсом, мини-игра и т.д.

GameDispatcher - класс организует главный цикл сообщений Windows, знает обо всех GameModes (они ничего не знают друг о друге). Обрабатывает сообщения, возвращаемые методами GameModes и на основании этого осуществляет диспетчеризацию и согласование модулей GameModes. Паттерн Mediator. Теоретически, диспетчеры могут загружаться динамически и "заступать на смену", подменяя "на лету" систему взаимосвязей между GameModes.

Функция WinMain имеет примерно такой вид:

if ( Game::Init() )
{
GameDispatcher d( 2 );
ID_TYPE GamePlay_id = d.Register( new GamePlay );
ID_TYPE GameMenu_id = d.Register( new GameMenu );
d.Start( GameMenu_id );
}

Game::Release();