Какая философия кода / структура абстракции / дизайн программы позволят использовать игру как с 2D, так и с 3D-графикой (отдельно), БЕЗ необходимости перекодировать игровую логику?
Мы говорим о том, чтобы взять один и тот же код, изменить минимум вещей (например, обмениваться именами файлов для 2D-ресурсов с именами файлов для 3D-ресурсов) и, возможно, подключить несколько специализаций базового класса для шаблонов / шаблонов.
Чтобы представить его в реальном контексте, где это имеет смысл: представьте себе многопользовательскую LAN-игру, в которой есть один первоклассный, требовательный к производительности 3D-клиент для игроков с некоторыми действительно хорошими игровыми платформами и более скромный 2D-клиент для старых пыльные коробки, которые кто-то нашел на чердаке. Но это все та же игра - регистрируются те же события (кто-то взял монетку), используется тот же сетевой протокол, миры пропорциональны и т. Д.
Чтобы поместить это в контекст MVC: контроллеры одинаковы (нажатие клавиши «Вверх» установит ускорение игроков на уровне 3,5 единиц / секунду), виды полностью различаются (2D и 3D), и модель такая же за исключением всего, что напрямую связано с графикой (проверка столкновений для среды выполняется каждые 5 секунд, и он использует тот же алгоритм. Обратите внимание, что это будет означать, что есть Е-Z-координата для всех игровых объектов в 2D-версии, но это просто игнорировать или отображаться пользователю по-другому, например, с помощью тени, которая отображается слева дальше, когда игрок находится в воздухе).
Что делает эту тему такой увлекательной, так это то, что она заставит разработчика иметь очень четкое представление о том, как его данные структурированы и как происходит управление. Обратите внимание, что это не означает использование чего-либо, кроме графической библиотеки, такой как SDL, D3DX или OpenGL. Нет игровых движков!
Так как это в основном теоретический вопрос, я оставлю языки программирования вне его, но если вы хотите привести пример, вы можете использовать любой язык, который вам нравится, C ++, если вы хотите работать в полную силу, или даже Brainfuck, если вы чувствуете, до задачи (Будут оценены любые конкретные ответы, а также любые абстрактные!).