Si su proyecto está en la etapa de planificación, se recomienda diseñar el proyecto para la creación de redes desde el principio. La fijación del código de red en un estado tardío del proyecto probablemente conducirá a una refactorización masiva o una gran cantidad de piratería, lo que resultará en un código difícil de mantener y corregido por errores.
La forma más limpia es implementar todo el juego como si fuera un juego de red puro. Es decir, implemente el código para un servidor dedicado e implemente este código por ser solo código de servidor. Implemente el código del cliente del juego de manera similar. El servidor y el cliente pueden ejecutarse en el mismo proceso y ni siquiera necesitan usar un socket de red real, pero deben ser entidades separadas y todo el código debe estar diseñado para funcionar de esa manera. Cuando el jugador salta, no modifique el vector de salto del jugador directamente, sino que envíe un paquete de "tecla de salto presionada" al servidor y deje que el servidor se encargue de eso.
Esto significa que incluso en un juego de un solo jugador, hay un servidor invisible ejecutándose en segundo plano. Una versión multijugador del mismo juego solo necesita conectarse a un servidor remoto en lugar del local y listo, multijugador hecho. Las ventajas de esto son:
sin código separado para un jugador y multijugador, el código de red se prueba y desarrolla durante todo el código de limpieza del proyecto
Los proyectos que usan este esquema son casi todos juegos que usan cualquiera de los motores Quake, Civilization 4, Neverwinter Nights y muchos más.
Para conectar cliente y servidor en el mismo proceso con latencia cero, se pueden usar sockets locales. Estos son proporcionados por Zoidcom y pasan paquetes directamente de un ZCom_Control a otro, sin pasar por un socket de nivel de sistema operativo.