Quale filosofia / struttura del codice di astrazione / progettazione del programma consentirebbe di utilizzare un gioco con grafica 2D e 3D (separatamente) SENZA dover ricodificare la logica di gioco?
Stiamo parlando dello stesso codice, cambiando un minimo di cose (ad esempio, scambiando nomi di file per risorse 2D con nomi di file per risorse 3D) e forse inserendo alcune specializzazioni di una classe base per generici / modelli.
Per dirlo in un contesto reale in cui ha senso: immagina un gioco multiplayer LAN in cui c'è un client 3D di prim'ordine e affamato di prestazioni per i giocatori con alcune piattaforme di gioco davvero buone e un client 2D più umile per il vecchio scatole polverose che qualcuno ha trovato nella loro soffitta. Ma è sempre lo stesso gioco: vengono registrati gli stessi eventi (qualcuno ha preso una moneta), viene utilizzato lo stesso protocollo di rete, i mondi sono proporzionali, ecc.
Per dirla in un contesto MVC: i controller sono esattamente gli stessi (premendo il tasto "Su" si imposta l'accelerazione dei giocatori a 3,5 unità / secondo), le viste sono totalmente diverse (2D contro 3D) e il modello è lo stesso fatta eccezione per qualsiasi cosa direttamente correlata alla grafica (un controllo delle collisioni per l'ambiente viene eseguito ogni 5 secondi e utilizza lo stesso algoritmo. Si noti che ciò significherebbe che esiste una coordinata Z per tutti gli oggetti di gioco nella versione 2D, ma è semplicemente ignorato o visualizzato all'utente in un altro modo, ad esempio da un'ombra che viene visualizzata più a sinistra quando il giocatore è in aria).
Ciò che rende questo argomento così affascinante è che FORZARE lo sviluppatore di avere un'idea molto chiara di come sono strutturati i suoi dati e di come scorre il controllo. Si noti che ciò non implica l'utilizzo di nient'altro che una libreria grafica come SDL, D3DX o OpenGL. Nessun motore di gioco!
Poiché questa è una domanda prevalentemente teorica, lascerò fuori i linguaggi di programmazione, ma se vuoi fare un esempio puoi usare qualsiasi linguaggio che ti piace, C ++ se vuoi andare tutto il maiale, o anche Brainfuck se ti senti fino alla sfida (eventuali risposte concrete saranno apprezzate, così come eventuali risposte astratte!).