El primer punto importante es que no hay una respuesta "buena" a esta pregunta.
Lo más parecido a una respuesta correcta sería algo como: depende en gran medida del tipo de juego, la plataforma objetivo, las limitaciones (tiempo), etc.
Dicho esto, hay algunos artículos realmente buenos que le mostrarán cómo otras personas han intentado responder a este problema (ya que he tratado de encontrar información sobre esto en el pasado).
Como el pato comunista mencionó la enginuidad artículo sobre sobre el desarrollo del juego me ayudó a comprender algunas partes de la arquitectura del juego.
Mi diseño actual es un híbrido de Quake3 / Doom3 y un poco de la biblioteca de clases .NET :)
Tengo dos bibliotecas (estática o dinámica depende de cómo quiera construir / entregar) el Framework
y el Library
.
La Biblioteca contiene todas las clases auxiliares que están ahí para ayudar con la producción del software del juego, pero no se limitan a este tipo de producto. es decir, tiene una implementación de una lista vinculada que está optimizada para el código del juego, pero podría ser utilizada por cualquier cosa que necesite el servicio de una lista vinculada.
El Framework es la agalla del 'motor' si quieres llamarlo así. Mucho de esto sigue las filosofías de diseño de Quake3 (solo de una manera más orientada a objetos). Contiene la CLI , la gestión de tiempos, el código específico del sistema operativo y, finalmente, las capas de red, etc.
Estos dos se vinculan con la aplicación real que se está produciendo. losGame
si quieres, que contiene el código específico del juego. De la misma manera, Quake3 carga las DLL dependiendo de qué 'mod' se esté reproduciendo.
Para darle una idea de la estructura aquí hay un desglose rápido de carpetas y contenidos para cada lib:
- Marco de referencia
- IO (clases especializadas de gestión de archivos, clases de impresión de texto (por ejemplo, a la CLI), y registro, etc.)
- Red
- Cliente (clases que representan lo que el Framework considera una 'persona jugando / conectada al juego')
- Servidor (clases para administrar la conexión en el marco y administrar los reproductores)
- Plataforma (clases de manejo de teclado / mouse / controladores, rutinas específicas del sistema operativo como getTime ())
- Sistema (clases de muy bajo nivel, como una clase de error para ayudar a imprimir mensajes de error, clases de temporización y la propia CLI).
- Renderizador (autoexplicativo)
- etc.
- Biblioteca
- Colecciones (clases que representan colecciones de datos, listas vinculadas / tablas hash, etc.)
- Matemáticas (clases básicas de ayuda matemática como vectores y matrices)
- etc.
HTH! Debería darte algunos consejos ...