Antecedentes: Ayudo a desarrollar un juego multijugador, escrito principalmente en C++, que usa una arquitectura estándar cliente-servidor. El servidor puede compilarse por sí mismo, y el cliente se compila con el servidor para que pueda alojar juegos.Mantener el código en un juego cliente-servidor organizado
Problema
El juego combina código de cliente y servidor en las mismas clases, y esto está empezando a ser muy engorroso.
Por ejemplo, la siguiente es una pequeña muestra de algo que se puede ver en una clase común:
// Server + client
Point Ship::calcPosition()
{
// Do position calculations; actual (server) and predictive (client)
}
// Server only
void Ship::explode()
{
// Communicate to the client that this ship has died
}
// Client only
#ifndef SERVER_ONLY
void Ship::renderExplosion()
{
// Renders explosion graphics and sound effects
}
#endif
Y el encabezado:
class Ship
{
// Server + client
Point calcPosition();
// Server only
void explode();
// Client only
#ifndef SERVER_ONLY
void renderExplosion();
#endif
}
Como se puede ver, al compilar el servidor solo, las definiciones del preprocesador se utilizan para excluir los gráficos y el código de sonido (lo que parece feo).
Pregunta:
Cuáles son algunas de las mejores prácticas para mantener el código en una arquitectura cliente-servidor organizada y limpia?
Gracias!
Editar: ejemplos de proyectos de código abierto que utilizan una buena organización también son bienvenidos :)
¿Conoces algún ejemplo de tu diseño? – faffy