Помните, что вам нужно знать целевую платформу только во время компиляции. С помощью этой информации вы можете «вставлять и выключать» компоненты для правильной платформы.
В хорошем дизайне игра должна , а не требовать какую-либо информацию о своей платформе; он должен содержать только логику и связанные компоненты.
Ваши классы 'Engine' должны беспокоиться о платформе.
Классы Game должны взаимодействовать с объектами Engine только через публичные функции, которые не являются специфичными для платформы; Вы можете иметь несколько версий объектов Engine для каждой платформы и выбирать, какую из них использовать во время компиляции.
Например, у вас может быть класс двигателя 'Texture', который представляет текстуру в игре. Если вы поддерживаете OS X и Windows, у вас может быть «Texture.h», который включает «Windows / Texture.h» или «OSX / Texture.h» в зависимости от платформы, на которой вы компилируете. Оба заголовка будут определять класс Texture с одинаковым интерфейсом (т. Е. Они будут иметь одинаковые публичные функции с одинаковыми аргументами), но их реализация будет зависеть от платформы.
Для уточнения, Игра должна указать Приложению инициализировать Рендерер; должна быть строгая грань между игровой логикой и деталями реализации. Рендерер - это деталь реализации, а не часть игровой логики. Классы игры не должны знать ничего о системе и только об игровом мире.