Puoi scrivere un motore di gioco praticamente in qualsiasi lingua usando praticamente qualsiasi metodo di rendering. Potresti scrivere un motore di gioco in bash usando ad esempio l'output della console.
Quindi, penso che sarebbe meglio definire esattamente cosa vuoi imparare scrivendo il tuo motore. Ci sono molti "campi" nello sviluppo del gioco.
ecc. Da lì puoi anche avere argomenti secondari. In Rendering / Grafica
2d o 3d?
modellismo
Ombreggiatura
Illuminazione
texturing
GUI / Huds / interfacce.
ecc. ecc
Solo uno di questi sotto-argomenti potrebbe richiedere molte ore (o anni!) Di studio!
Quindi, prima di tutto definisci ciò che vuoi imparare. Inizia semplice.
Usa la lingua che preferisci, anche se alcuni sono più adatti per determinate attività. Ad esempio, il motore principale e il rendering sono probabilmente fatti meglio con un linguaggio di livello "inferiore" come C / C ++ (se hai bisogno di prestazioni); ma qualcosa come l'intelligenza artificiale o le regole del gioco potrebbe essere fatto meglio in un linguaggio di livello superiore. Nulla dice che non puoi mescolare e abbinare. Potresti scrivere il tuo motore in C ++, il tuo rendering in C (dal momento che funziona bene con OpenGL) e quindi usare LUA per lo scripting delle regole del gioco, ecc.
Per esempio, esiste un motore di gioco chiamato Slick2D. È scritto in Java ed è open source. È un esempio di un semplice motore 2d scritto e progettato davvero bene. Puoi imparare concetti di base da ciò, come loop di gioco, gestione degli stati di gioco, ecc.
Se sei a tuo agio con C / C ++; Suggerirei di dare un'occhiata a SDL / OpenGL. Gestisce alcune delle pulizie come input, suono, creazione di finestre, ecc. E può concentrarsi su altre cose.