O primeiro ponto importante a destacar é que não há uma resposta 'boa' para essa pergunta.
A coisa mais próxima de uma resposta certa seria algo como: Depende muito do tipo de jogo, plataforma de destino, restrições (tempo) etc.
Dito isto, existem alguns artigos realmente bons por aí que mostrarão como outras pessoas tentaram responder a esse problema (como eu tentei encontrar informações sobre isso no passado).
Como o pato comunista mencionou, o artigo de enginuity no game dev me ajudou a entender algumas partes da arquitetura de jogos.
Meu design atual é um híbrido do Quake3 / Doom3 e um pouco da biblioteca de classes .NET :)
Eu tenho duas bibliotecas (estáticas ou dinâmicas depende de como você deseja criar / entregar) o Framework
e o Library
.
A Biblioteca contém todas as classes auxiliares que existem para ajudar na produção de software de jogos, mas não estão limitadas a esse tipo de produto. isto é, implementa uma lista vinculada, otimizada para o código do jogo, mas que pode ser usada por qualquer coisa que precise do serviço de uma lista vinculada.
O Framework é a essência do 'mecanismo', se você quiser chamar assim. Muito disso segue as filosofias de design do Quake3 (apenas de uma maneira mais orientada a objetos). Ele contém a CLI , o gerenciamento de tempo, o código específico do SO e, eventualmente, as camadas de rede etc.
Esses dois são vinculados ao aplicativo real que está sendo produzido. O Game
se você gosta, que contém o código específico do jogo. Da mesma forma, o Quake3 carrega DLLs, dependendo de qual 'mod' estiver sendo reproduzido.
Para lhe dar uma idéia da estrutura, aqui está uma rápida decomposição de pastas e conteúdos para cada lib:
- Estrutura
- IO (classes de gerenciamento de arquivos especializadas, classes de impressão de texto (por exemplo, para a CLI) e registro etc.)
- Rede
- Cliente (classes que representam o que o Framework considera uma 'pessoa jogando / conectada ao jogo')
- Servidor (classes para gerenciar a conexão na estrutura e gerenciar os players)
- Plataforma (teclado / mouse / controladores manipulando classes, rotinas específicas do SO, como getTime ())
- Sistema (classes de nível muito baixo, como uma classe de erro, para ajudar na impressão de mensagens de erro, classes de tempo e a própria CLI.)
- Renderizador (auto-explicativo)
- etc.
- Biblioteca
- Coleções (classes que representam coleções de dados, listas / hashtables vinculadas etc.)
- Matemática (classes auxiliares básicas de matemática como vetores e matrizes)
- etc.
HTH! Deve dar algumas dicas ...