Estoy buscando diseños de redes y trucos específicos para juegos. Conozco algunos problemas y tengo algunas soluciones parciales para algunos de ellos, pero puede haber problemas que aún no veo. Creo que no hay una respuesta definitiva a esto, pero aceptaré una respuesta que realmente me gusta. Puedo pensar en 4 categorías de problemas.Problemas de red en juegos
Malo red
Los mensajes enviados por los clientes a tomar algún tiempo para llegar al servidor. El servidor no puede simplemente procesarlos FCFS porque eso es injusto para los jugadores con mayor latencia. Una solución parcial para esto serían las marcas de tiempo en los mensajes pero necesita 2 cosas para eso:
- Se puede confiar en el reloj del cliente. (Creo que esto es imposible.)
- Latencias constantes que puede medir. ¿Qué puedes hacer con respecto a la latencia variable?
Muchos juegos usan UDP, lo que significa que se pueden perder mensajes. En ese caso, intentan estimar el estado del juego en función de la información que ya tienen. ¿Cómo se puede saber si el estado estimado es correcto o no después de que la conexión vuelva a funcionar?
En juegos MMO, el servidor maneja una gran cantidad de clientes. ¿Cuál es la mejor forma de distribuir la carga? ¿Basado en la ubicación en el juego? ¿Vincula un grupo de clientes a servidores? ¿Puedes evitar enviar todo a través del servidor?
jugadores dejando
he visto 2 comportamientos diferentes cuando esto sucede. En la mayoría de los juegos de FPS, si el jugador que organizó el juego (supongo que es el servidor) deja que los demás no puedan jugar. En la mayoría de los juegos de estrategia en tiempo real, si un jugador deja a los demás, puede seguir jugando sin él. ¿Cómo es posible sin un servidor dedicado? ¿Todos saben el estado completo? ¿Están transfiriendo el papel del servidor de alguna manera?
acceso a la información
El siguiente problema puede ser resuelto por un servidor dedicado, pero estoy ansioso por ver si se puede hacer sin una. En muchos juegos, los jugadores no deberían saber el estado completo del juego. La niebla de guerra en RTS y las paredes en FPS son buenos ejemplos. Sin embargo, necesitan saber si una acción es válida o no. (Por ejemplo, ¿me puedes disparar desde allí o estás del otro lado del mapa?) En este caso, los clientes deben validar los cambios en un estado desconocido. Esto suena como algo que se puede resolver con el uso inteligente de primitivos criptográficos. ¿Algunas ideas?
Hacer trampa
Algunos de los problemas anteriores son fáciles en un entorno de cliente de confianza, pero que no se puede asumir. ¿Existen soluciones que funcionan, por ejemplo, en un 80% de usuarios normales, un 20% de entorno de tramposo? ¿Realmente puedes crear un software anti-trampas que funcione (y no requiera cosas ridículas como módulos kernel)?
He leído estas preguntas y algunas de las respuestas https://stackoverflow.com/questions/901592/best-game-network-programming-articles-and-books pero otras respuestas enlazan al contenido no disponible/restringido. Esta es una pregunta independiente de la plataforma/sistema operativo, pero también son bienvenidas las soluciones para plataformas específicas/sistemas operativos.
Una gran pregunta. –
Quizás este sitio es más correcto para esta pregunta? http://gamedev.stackexchange.com/ – Nakilon
No me di cuenta de que había una versión específica del juego del sitio. Gracias, definitivamente lo verificaré. – stribika