Quelle philosophie de code / structure d'abstraction / conception de programme permettrait d'utiliser un jeu avec des graphiques 2D et 3D (séparément) SANS avoir à recoder la logique du jeu?
Nous parlons de prendre le même code, de changer un minimum de choses (par exemple, échanger des noms de fichiers pour des actifs 2D avec des noms de fichiers pour des actifs 3D), et peut-être de brancher quelques spécialisations d'une classe de base par génériques / modèles.
Pour le mettre dans un contexte réel où cela a du sens: imaginez un jeu multijoueur LAN où il y a un client 3D haut de gamme et gourmand en performances pour les joueurs avec de très bonnes plates-formes de joueurs, et un client 2D plus humble pour les anciens. des boîtes poussiéreuses que quelqu'un a trouvées dans leur grenier. Mais c'est toujours le même jeu - les mêmes événements sont enregistrés (quelqu'un a ramassé une pièce), le même protocole réseau est utilisé, les mondes sont proportionnels, etc.
Pour le mettre dans un contexte MVC: les contrôleurs sont exactement les mêmes (en appuyant sur la touche "Haut", l'accélération des joueurs sera réglée à 3,5 unités / seconde), les vues sont totalement différentes (2D par rapport à 3D) et le modèle est le même. sauf pour tout ce qui est directement lié aux graphiques (un contrôle de collision pour l'environnement est effectué toutes les 5 secondes, et il utilise le même algorithme. Notez que cela signifierait qu'il y a une coordonnée Z pour tous les objets de jeu dans la version 2D, mais c'est simplement ignoré ou affiché à l'utilisateur d'une autre manière, par exemple par une ombre qui est affichée plus à gauche lorsque le joueur est en l'air).
Ce qui rend ce sujet si fascinant, c'est qu'il obligerait le développeur à avoir une idée très claire de la façon dont ses données sont structurées et comment les flux de contrôle. Notez que cela n'implique pas d'utiliser autre chose qu'une bibliothèque graphique comme SDL, D3DX ou OpenGL. Aucun moteur de jeu!
Puisqu'il s'agit d'une question principalement théorique, je vais laisser les langages de programmation hors de lui, mais si vous voulez donner un exemple, vous pouvez utiliser n'importe quel langage que vous aimez, C ++ si vous voulez aller tout le porc, ou même Brainfuck si vous vous sentez à la hauteur du défi (Toute réponse concrète sera appréciée, ainsi que toute réponse abstraite!).