Welche Codephilosophie / Struktur der Abstraktion / Programmgestaltung würde es ermöglichen, ein Spiel sowohl mit 2D- als auch mit 3D-Grafiken (separat) zu verwenden, ohne die Spielelogik neu codieren zu müssen?
Wir sprechen davon, denselben Code zu verwenden, ein Minimum an Dingen zu ändern (z. B. Dateinamen für 2D-Assets gegen Dateinamen für 3D-Assets auszutauschen) und möglicherweise einige Spezialisierungen einer Basisklasse pro Generika / Vorlagen einzufügen.
Um es in einen realen Kontext zu stellen, in dem es Sinn macht: Stellen Sie sich ein LAN-Multiplayer-Spiel vor, in dem es einen erstklassigen, leistungshungrigen 3D-Client für die Spieler mit einigen wirklich guten Gamer-Rigs und einen bescheideneren 2D-Client für die alten gibt staubige Kisten, die jemand auf seinem Dachboden gefunden hat. Aber es ist immer noch dasselbe Spiel - dieselben Ereignisse werden registriert (jemand hat eine Münze abgeholt), dasselbe Netzwerkprotokoll wird verwendet, die Welten sind proportional usw.
Um es in einen MVC-Kontext zu stellen: Die Controller sind exakt gleich (durch Drücken der Taste "Auf" wird die Beschleunigung des Spielers auf 3,5 Einheiten / Sekunde eingestellt), die Ansichten sind völlig unterschiedlich (2D gegenüber 3D) und das Modell ist das gleiche mit Ausnahme von allem, was in direktem Zusammenhang mit Grafiken steht (alle 5 Sekunden wird eine Kollisionsprüfung für die Umgebung durchgeführt, und es wird derselbe Algorithmus verwendet. Beachten Sie, dass dies bedeuten würde, dass für alle Spielobjekte in der 2D-Version eine Z-Koordinate vorhanden ist, dies ist jedoch der Fall nur ignoriert oder dem Benutzer auf andere Weise angezeigt werden, z. B. durch einen Schatten, der weiter links angezeigt wird, wenn sich der Spieler in der Luft befindet).
Was dieses Thema so faszinierend macht, ist, dass es den Entwickler zwingen würde, eine sehr klare Vorstellung davon zu haben, wie seine Daten strukturiert sind und wie die Kontrolle fließt. Beachten Sie, dass dies nichts anderes als die Verwendung einer Grafikbibliothek wie SDL, D3DX oder OpenGL bedeutet. Keine Spiel-Engines!
Da dies eine größtenteils theoretische Frage ist, werde ich Programmiersprachen weglassen, aber wenn Sie ein Beispiel geben möchten, können Sie jede Sprache verwenden, die Sie mögen, C ++, wenn Sie das ganze Schwein gehen wollen, oder sogar Brainfuck, wenn Sie das Gefühl haben bis zur Herausforderung (Konkrete Antworten werden ebenso geschätzt wie abstrakte!).