Яка філософія коду / структура абстракції / дизайн програми дозволить використовувати гру як з 2D, так і з 3D графікою (окремо) БЕЗ необхідності перекодувати логіку гри?
Ми говоримо про те, щоб взяти один і той же код, змінити мінімум речей (наприклад, обміняти назви файлів для двовимірних активів з іменами на тривимірні активи) і, можливо, підключити декілька спеціалізацій базового класу на генеричні / шаблони.
Поставити це в реальному контексті, де це має сенс: уявіть собі багатокористувацьку гру з локальною мережею, де є один чудовий 3D-клієнт з високим рівнем продуктивності для гравців, які мають справді хороші геймерські установки, і більш скромний 2D-клієнт для старого запилені ящики, які хтось знайшов на своєму горищі. Але це все та сама гра - реєструються ті ж події (хтось підхопив монету), використовується той же мережевий протокол, світи пропорційні тощо.
Щоб помістити його в контекст MVC: Контролери точно такі ж (натискання клавіші "Вгору" встановить прискорення гравців на 3,5 одиниці в секунду), Погляди абсолютно різні (2D проти 3D), а Модель така ж за винятком всього, що безпосередньо пов'язане з графікою (перевірка зіткнення навколишнього середовища виконується кожні 5 секунд, і він використовує той самий алгоритм. Зауважте, що це означатиме, що існує 2-координата Z для всіх ігрових об’єктів у 2D-версії, але це просто ігнорується або відображається користувачеві іншим способом, наприклад, тінню, яка відображається далі зліва, коли гравець знаходиться в повітрі).
Що робить цю захоплюючу тему тим, що це змусить розробника мати дуже чітке уявлення про структурування його даних та про те, як відбувається управління. Зауважте, що це не означає використання нічого іншого, крім графічної бібліотеки, наприклад SDL, D3DX або OpenGL. Немає ігрових двигунів!
Оскільки це здебільшого теоретичне запитання, я залишу його мови програмування, але якщо ви хочете навести приклад, ви можете використовувати будь-яку мову, яка вам подобається, C ++, якщо ви хочете пройти цілу свиню, або навіть Brainfuck, якщо відчуваєте аж до виклику (Будь-які конкретні відповіді будуть вдячні, як і будь-які абстрактні!).