Этот вопрос можно разделить на два отдельных вопроса. "Как я могу написать переносимый код?" и «Каковы различные требования основных игровых платформ?».
На первый вопрос относительно легко ответить. Рекомендации по абстрагированию вашего непереносимого кода описаны в разделе «Создание переносимого кода»:
http://books.google.ca/books?id=4VOKcEAPPO0C&printsec=frontcover
Реализуя теорию на практике, исходный код Quake 3 довольно неплохо делит разные платформы на отдельные области для базы кода C, доступной по адресу http://www.idsoftware.com/business/techdownloads/ Однако он не демонстрирует такие шаблоны C ++, как абстрактные интерфейсы, реализованные один раз для каждой платформы.
Вторая часть вашего вопроса: «Каковы различные требования основных игровых платформ?» это сложнее. Тем не менее, примечательно, что ваши самые большие области изменений по-прежнему - это ваш рендер, ваша аудиоподсистема и ваша сеть.
Каждая консольная платформа имеет ряд сертификационных требований, доступных по соглашению с соответствующими владельцами консоли. Требования обеспечивают согласованность в работе пользователя и не ориентированы на игровой процесс или качественные проблемы высокого уровня. Например, ваша игра может отображать довольно интересный анимационный экран загрузки, а черные экраны недопустимы.
Получение этой документации в кратчайшие сроки является ключом к правильному выбору при разработке под конкретную консольную платформу.
Наконец, если вы не можете заполучить консольный девкит, я предлагаю вам перенести код на Mac из Windows. Mac предоставляет вам порт ОС, гарантирующий, что вы не привязаны к Windows, а также порт процессора, если вы поддерживаете универсальные двоичные файлы. Это гарантирует, что ваш код не зависит от порядка байтов.
Если вы поддерживаете как ПК, так и Mac, у вас будет все необходимое для поддержки третьей платформы, если вы получите к ней доступ в будущем.
Приложение Вы писали:
идеальное решение - использовать как можно больше
код как можно вместо переписывания
все для каждой платформы
Во многих сценариях портирования игр идеальным решением является не для повторного использования максимально возможного количества кода, а для написания оптимального кода для каждой платформы. Код может использоваться повторно между проектами и является относительно недорогим по сравнению с контентом, который принимает движок. Более разумной целью является стремление к наименьшему общему знаменателю контента, который выполняется на всех платформах без изменений (фаза сборки, которая упаковывает контент для медиа все в порядке).