Planeo hacer un juego multijugador en tiempo real para Android (2-8 jugadores), y considero qué solución para la organización multijugador es la mejor:
Haga que el servidor en la PC y el cliente en el móvil, toda la comunicación pase por el servidor (ClienteA -> SERVIDOR DE PC -> Todos los clientes)
Usa bluetooth, no lo he usado todavía, y no sé si es difícil hacer multijugador en bluetooth
Haga que el servidor en uno de los dispositivos y otros dispositivos se conecten (a través de la red, pero no sé si es difícil resolver un problema con dispositivos a través de NAT)
Otra solución?
architecture
android
networking
multiplayer
mobile
piotrek
fuente
fuente
Respuestas:
Descargo de responsabilidad; No he hecho mucho con Java y la plataforma Android.
Sin embargo, mi experiencia más extensa con los idiomas '.net' en las plataformas móviles de Windows, junto con la plataforma de Windows, es que se mantiene un buen 75-90% de todo el código requerido para crear y mantener una conexión de datos de red o Bluetooth / compatible con el sistema operativo o las bibliotecas que serían necesarias para acceder al hardware.
Hasta ahora, esto también parece cierto con Android, ya que el sistema operativo expone métodos para crear conexiones de datos a través de Bluetooth o Internet, junto con habilitar / deshabilitar el hardware respectivo.
Me imagino que Bluetooth sería el método de conexión preferido, ya que sería el menos costoso de implementar (sin servidores). Y permita una reunión / juego más local. Bluetooth es bastante fácil de usar. Funciona de manera similar a los enchufes de red normales una vez que sabe a qué dispositivo desea conectarse.
Los otros son correctos en que Bluetooth v2.0 / v2.1 actualmente no es capaz de soportar grandes cargas de datos. Esto cambiará con la eventual difusión de v3.0 y superior. y hay formas de sortear esta limitación.
Por ahora, aunque existe un concepto simple, pero una solución compleja, es posible que desee probar. Lo he estado usando por un tiempo, es similar a peer to peer, pero implica tener el juego alojado en todos los dispositivos simultáneamente. De esa manera, si una conexión se pierde temporalmente, se ralentiza o un jugador se cae por algún motivo, otros jugadores no se verán afectados. Esto permite a los usuarios que han sido eliminados volver a unirse al juego en curso con poca o ninguna interrupción para otros jugadores o su propio juego.
CON: Cada jugador en realidad estaría jugando su propia instancia algo única del juego, que estaría vinculada con los otros jugadores para evitar que los juegos se alejen demasiado de la sincronización entre sí.
CON: El código de soporte puede ser extenso / complejo y difícil de entender dependiendo de lo que desee lograr.
PRO: ¡ No se requiere un servidor central o dispositivo! No requiere mantenimiento $$$.
PRO: Un intercambio intenso de datos solo ocurriría cuando un jugador (re) se uniera o se iniciara un juego. - Incluso esto puede reducirse asegurando que todos los juegos serán generados y que todos los jugadores progresen de la misma manera. POTENCIALMENTE reduciendo el consumo de energía que ocurre debido al uso intensivo de la red.
PRO: Los datos se vuelven menos sensibles al tiempo, ya que los dispositivos ya tendrían todos los datos que requieren para mantener un juego sin los otros jugadores. Lo que permite que se concentre más en la experiencia de juego real para los usuarios individuales, en lugar de un grupo de jugadores.
Me ha faltado tiempo para implementar un motor de juego completo que lo utilice. Los juegos que hice se han limitado a recrear juegos similares a Monopoly y Uno, que parecían funcionar extremadamente bien.
La más fácil fue la que emuló a Uno. Básicamente, apilé los mazos de los perdedores después de que un jugador ganó para asegurar que ese jugador ganara todos los juegos. Más del 95% de las veces no podía decir que no estaba jugando exactamente el mismo juego que todos los demás.
Comencé a construir un juego similar al Master of Orion II, pero el juego en sí fue un poco difícil de realizar por mí mismo.
fuente
Depende en gran medida del juego, pero algunos amigos y yo estábamos pensando en los mismos problemas hace solo un par de meses, y esto es lo que determinamos. Estoy de humor pros y contras nuevamente.
Servidor basado en computadora
Pros
Contras
Peer to Peer con uno de ellos en control
Pros
Contras
En cuanto a bluetooth, esperaría que sea similar al método de igual a igual anterior. Tampoco creo que deba tener ningún problema con NAT.
EDITAR : también depende en gran medida de su experiencia. Comenzaría por escribir algunos juegos de cliente / servidor relativamente pequeños para familiarizarse primero con las redes. Es un tema difícil que es fácil equivocarse la primera vez. Tengo el mío justo en el tercer intento. Sigue patrones conocidos y no intentes inventarte algo tú mismo.
fuente
Una de las mayores consideraciones que debe hacer es la confiabilidad. Los teléfonos no son muy confiables; de hecho, probablemente deberías asumir que en un juego de 8 jugadores es probable que alguien se desconecte (llamada entrante, mala recepción, el jugador abandona ...)
Con esto en mente, comprenda que debe minimizar el impacto de un usuario desconectado. En su segunda opción, esencialmente ha convertido un teléfono en el servidor. Si ese teléfono se vuelve MIA, el juego termina para todos los jugadores.
John cubrió los pros y los contras de una arquitectura tradicional de servidor cliente <->. Esta es probablemente la forma más resistente de proporcionar una experiencia multijugador confiable para todos.
También podría considerar una técnica similar a una simulación de bloqueo de pasos. Esto se puede implementar de una manera puramente de igual a igual. La idea general es que se espera que cada cliente envíe su actualización (serie de comandos o falta de ella) en cada paso de simulación. En un paso de simulación posterior, los comandos de cada jugador se aplican a la lógica del juego. Muchos juegos RTS emplean este tipo de esquema de red.
La técnica puede ser difícil de implementar y puede ser muy difícil de depurar. Ciertamente es más difícil que tener una arquitectura cliente-servidor más tradicional. También implica un retraso entre la entrada de un jugador y cuando el juego responde a la entrada. Sin embargo, si un jugador dejara, los jugadores restantes podrían excluirlo del juego y continuar. También puede disminuir potencialmente el tráfico de red en comparación con otros esquemas.
Si desea obtener más información sobre esta técnica, comience con este excelente artículo sobre el tema. De lo contrario, desaconsejaría un esquema de red en el que un solo teléfono sea responsable de una sesión multijugador, y sugeriría una arquitectura de servidor cliente <-> más simple.
fuente