Você pode escrever um mecanismo de jogo em praticamente qualquer idioma usando praticamente qualquer método de renderização. Você pode escrever um mecanismo de jogo no bash usando a saída do console, por exemplo.
Então, acho que seria melhor definir exatamente o que você deseja aprender escrevendo seu próprio mecanismo. Existem muitos "campos" no desenvolvimento de jogos.
etc .. A partir daí você pode até ter sub-tópicos. Em Renderização / Gráficos
Apenas um desses sub-tópicos poderia consumir muitas horas (ou anos!) De estudo!
Então, primeiro defina o que você deseja aprender. Comece simples.
Use qualquer idioma com o qual você se sinta confortável - embora alguns sejam mais adequados para determinadas tarefas. Por exemplo, o mecanismo principal e a renderização provavelmente são melhores com uma linguagem de nível "inferior", como C / C ++ (se você precisar de desempenho); mas algo como IA ou regras do jogo pode ser melhor realizado em um idioma de nível superior. Nada diz que você não pode misturar e combinar. Você pode escrever seu mecanismo em C ++, sua renderização em C (já que funciona bem com o OpenGL) e, em seguida, usar LUA para criar scripts para suas Regras de Jogo, etc.
Até o exemplo, existe um mecanismo de jogo chamado Slick2D. É escrito em Java e é de código aberto. É um exemplo de um mecanismo 2D simples, escrito e projetado muito bem. Você pode aprender conceitos básicos com isso, como loops de jogos, gerenciamento de estados de jogos etc.
Se você está confortável com C / C ++; Eu sugeriria dar uma olhada no SDL / OpenGL. Ele lida com algumas tarefas domésticas, como entrada, som, criação de janelas etc. e pode se concentrar em outras coisas.