Первый важный момент, на который следует обратить внимание, заключается в том, что нет ни одного «хорошего» ответа на этот вопрос.
Наиболее близким к правильному ответу было бы что-то вроде: это очень сильно зависит от типа игры, целевой платформы, ограничений (времени) и т. Д.
Тем не менее, есть несколько действительно хороших статей, которые покажут вам, как другие люди пытались ответить на эту проблему (как я пытался найти информацию об этом в прошлом).
Как упомянул «Коммунистическая утка», статья об инженерии игровых разработок помогла мне понять некоторые аспекты игровой архитектуры.
Мой текущий дизайн - гибрид Quake3 / Doom3 и немного библиотеки классов .NET :)
У меня есть две библиотеки (статическая или динамическая зависит от того, как вы хотите собрать / доставить) Framework
и Library
.
Библиотека содержит все вспомогательные классы, которые могут помочь в создании игрового программного обеспечения, но не ограничиваются этим видом продукта. то есть он имеет реализацию связанного списка, который оптимизирован для игрового кода, но может использоваться всем, что нуждается в обслуживании связанного списка.
Framework - это «двигатель», если вы хотите так его назвать. Многое из этого следует философии дизайна Quake3 (только в более объектно-ориентированном виде). Он содержит CLI , управление синхронизацией, специфический для ОС код и, в конечном итоге, сетевые уровни и т. Д.
Эти два затем связываются с фактическим приложением, которое создается. Game
, Если вы хотите, который содержит код игр конкретного. Почти так же, как Quake3 загружает DLL в зависимости от того, какой мод воспроизводится.
Чтобы дать вам представление о структуре, вот краткая разбивка папок и содержимого для каждой библиотеки:
- Фреймворк
- IO (специализированные классы управления файлами, классы печати текста (например, в CLI), ведения журналов и т. Д.)
- сеть
- Клиент (классы, которые представляют то, что Framework считает «человеком, играющим / подключенным к игре»)
- Сервер (классы для управления соединением в рамках и управления плеером (ами))
- Платформа (классы обработки клавиатуры / мыши / контроллеров, специфичные для ОС подпрограммы, такие как getTime ())
- Система (классы очень низкого уровня, такие как класс ошибок, помогающий распечатывать сообщения об ошибках, классы Timing и сам CLI.)
- Рендерер ( говорит сам за себя)
- и т.п.
- Библиотека
- Коллекции (классы, которые представляют коллекции данных, связанные списки / хэш-таблицы и т. Д.)
- Math (базовые вспомогательные классы по математике, такие как векторы и матрицы)
- и т.п.
НТН! Должен дать вам несколько советов ...