En términos más generales, el problema es uno de “simulación distribuida”. Incluso si fuera un simple juego de damas. El principal problema es sincronizar los estados del juego entre varias computadoras que funcionan a diferentes velocidades y con un retraso impredecible en el envío del estado del juego.
Con los juegos por turnos se vuelve mucho más simple. El problema del retraso se reduce a simplemente que todos los jugadores se reporten, ya que el tiempo es discreto.
Con los juegos “en tiempo real”, la situación no se reduce tan fácilmente, pero hay 3 modelos básicos, desde el más simple (y menos receptivo) hasta el más difícil (y más receptivo).
- ¿Por qué pierdo el espacio de mi unidad C mientras navego por Internet?
- Si tengo la supuesta dirección IP de un hacker, ¿cómo obtengo pruebas de que lo hicieron?
- Mi Dell Inspiron 15 serie 3000 no se apaga por completo. Siempre tengo que apagarlo con el botón de encendido. ¿Qué tengo que hacer?
- Mi computadora portátil no se está iniciando. ¿Qué tengo que hacer?
- Quiero llevar 3 paños y computadora portátil, ¿qué marca de bolsa es mejor para un presupuesto de 1200 rupias indias, debe colgarse en el hombro?
El primer modelo es completo del lado del servidor. Todos los clientes son clientes “tontos”, y simplemente transmiten las entradas del juego al servidor, y luego reciben el estado del juego del servidor y lo muestran al usuario. La mayoría de los juegos por turnos funcionan de esta manera, ya que nuevamente, la demora no es un factor en los juegos por turnos.
El segundo modelo son los clientes predictivos, con servidores de arbitraje. Básicamente, los clientes pueden actuar como motores de juego independientes y utilizar esa capacidad para predecir un poco más adelante, pero todos los clientes informan el estado del juego al servidor, y el servidor esencialmente “arbitra”, ejecutando su propia simulación y la del servidor. La decisión es final.
El tercer modelo es muy similar al segundo. Excepto que los clientes no transfieren el “estado” del juego. Al igual que el primer modelo, solo transfieren entradas del juego. Pero a diferencia del primer modelo, transfieren marcas de tiempo del juego junto con este estado. El servidor luego transmite todas estas entradas del juego según corresponda a los clientes afectados, pero esto es solo una línea de tiempo tentativa. (Y este es un paso opcional). Finalmente, el servidor esperará una corta duración, digamos una décima de segundo. La simulación final e irreversible del tiempo del juego correrá una décima de segundo detrás del tiempo real. Después de esa fecha límite, ignorará cualquier entrada de juego anterior a 1/10 de segundo (o cualquiera que sea el período). Ahora todos los clientes tienen su secuencia final de eventos del juego. El servidor recopiló todas las entradas como una cremallera de abrigo. La predicción del cliente del tiempo de juego “actual” ahora usa este “punto de control” de hace 1/10 de segundo en el tiempo de juego para predecir el estado actual del mundo del juego. Las entradas del juego se reenvían al servidor para ser recopiladas con las de otros clientes, mientras se juegan simultáneamente en los clientes (tentativamente). Y el proceso continúa en paralelo. Este modelo minimiza la sensación de “retraso”, pero como puede imaginar, es más complicado.
Es un poco un proyecto hacer un motor de juego multijugador realmente bueno, a menos que sea por turnos.
Supongo que quieres que sea simple.
Yo diría que cada cliente solo transmita el estado de solo las unidades bajo su control a todos los demás clientes.
El problema ocurre cuando dos entidades diferentes bajo el control de dos jugadores diferentes interactúan. Desea que el resultado sea el mismo para todos los clientes, aunque cada cliente vea el estado del otro cliente retrasado.
Ese es el enigma. Si utiliza las marcas de tiempo del juego y un servidor para resolverlo, puede hacerlo todo consistente.
Pero ese es el enigma con la simulación en tiempo real.
Si está basado en turnos, por otro lado, ese enigma desaparece y se vuelve trivial (a pesar de lo que te haga creer la civilización de Sid Meier).
EDITAR: piense en el problema de la simulación distribuida en tiempo real de esta manera: es un juego de peligro, excepto que los zumbadores están en lados opuestos del planeta, y el retraso es impredecible y, además, diferente dependiendo de dónde se encuentre.
Una dificultad que, como han dicho otros, probablemente esté más allá del alcance de su clase actual.