Programadores => Programación en red => Mensaje iniciado por: CoLSoN2 en 01 de Abril de 2005, 02:36:45 pm

Título: Dudas Sobre Qué Usar Para Un Juego Multijugador
Publicado por: CoLSoN2 en 01 de Abril de 2005, 02:36:45 pm
 Tengo un proyecto en mente, un juego por turnos (osea que no necesita ser muy rápido transmitiendo datos) y quiero que además tenga un sistema de chat + match making tipo Battle.NET de Blizzard. El juego será multiplataforma también (PC y Mac).

Lo que había pensado:
 - Hacer toda la interfaz previa al juego (Opciones, crear cuenta, chat, lobby de cada partida, ...) con interfaz del sistema, usando Java o C#, que sería muy cómodo tanto para la UI como para la transferencia de datos por red.
 - No estoy muy puesto en Web Services, creeis que sería útil diseñar el servidor de esta forma?
 - ¿Quizá sería conveniente usar un servidor IRC para el chat? No estoy seguro porque quizá me metería cosas de más que no me interesa.
 - Luego el juego en sí sería una aplicación a parte en C++ con una librería de red propia (acepto sugerencias). Al crear una partida en multiplayer se crearía un fichero XML en disco con la configuración de la misma, y al ejecutar esta segunda aplicación leería el fichero y sabría las IPs de los demás jugadores.
 - Lo cual me lleva al siguiente punto, la arquitectura para la aplicación juego debe ser peer-to-peer, para que no me toque tener servidore/es muy cargados transmitiendo datos de partidas. Tampoco quiero que sea server uno de los clientes para que si sale no les joda la partida a los demás. Además siendo el juego por turnos no veo un problema en esto.
 - Necesitaré una base de datos para las cuentas de usuario, estadísticas de cada uno, etc. Algo al estilo de los profiles de Battle.NET (¿se nota que me encanta?). ¿Alguna sugerencia de cual usar? MySQL supongo que me hará el apaño.

Creo que es todo, a parte de sugerencias o comentarios generales, me gustaría saber si conoceis librerías de red decentes para la aplicación juego (la mayoría son únicamente cliente/servidor), o formas de organizarlo todo, etc. Porque experiencia con aplicaciones de red tengo más bien poca.

Un saludo.
Título: Dudas Sobre Qué Usar Para Un Juego Multijugador
Publicado por: Jond en 05 de Abril de 2005, 09:30:01 am
 Hola ColSoN2,

yo en del tema de redes no te puedo ayudar, pero como consejo para la base de datos, ya que vas a utilizar c#, no es necesario que utilices ningun gestor de base de datos (como mysql) ya que el ADO.NET sus objetos recordsets pueden ser guardados y recuperados de ficheros xml de forma directa.
 
Título: Dudas Sobre Qué Usar Para Un Juego Multijugador
Publicado por: gdl en 05 de Abril de 2005, 10:41:19 am
 Sí te sugiero que uses web services para desarrollar más rápido. Si el cliente también está en .NET supongo que podrás usar este interfaz web desde el C++.

Olvídate del servidor IRC. Simplifica. Unos pocos métodos en el web service te solucionarán la cosa.
Título: Dudas Sobre Qué Usar Para Un Juego Multijugador
Publicado por: CoLSoN2 en 05 de Abril de 2005, 11:43:32 am
 Al final usaré python para casi todo: GUI (wxPython), acceso a base de datos y todo el tema de red via XMLRPC, que en python es un lujazo de usar.
Título: Dudas Sobre Qué Usar Para Un Juego Multijugador
Publicado por: ethernet en 05 de Abril de 2005, 01:39:13 pm
 python rocks

Acerca de usar WS ... por qué razón usar WS y no XMLRPC ? WS hace menos que RPC, lo único en lo que podría aventajar a otros middleware es que los protocolos que usa son stadard, aunque ahora mismo no creo que a nadie le importe que SOAP, WSDL y cía sean standard siendo tan asquerosos de manejar. A quien se le ocurre volver a implementar toda la torre de protocolos sobre el puerto 80?
Título: Dudas Sobre Qué Usar Para Un Juego Multijugador
Publicado por: ethernet en 05 de Abril de 2005, 01:54:25 pm
Cita de: "CoLSoN2"
Al final usaré python para casi todo: GUI (wxPython), acceso a base de datos y todo el tema de red via XMLRPC, que en python es un lujazo de usar.
Por cierto, mucho cuidado si usas el módulo de python para mysql que tiene un problema con un destructor y no elimina las conexiones a la base de datos (incluso diciendole explícitamente que las cierre no lo hace, o hacía), con lo que si haces varias al final el server te dirá "too many connections". Las pasé putísimas en el curro con ese problema, no sé si habrán sacado alguna nueva versión desde entonces.

saludos  
Título: Dudas Sobre Qué Usar Para Un Juego Multijugador
Publicado por: shephiroth en 05 de Abril de 2005, 03:09:16 pm
 Wenas.

Yo hay muchos temas q no comentaste que no me atrevo a aconsejarte........pero el tema que comentaste de quien hostea la partida......en el starcraft utilizaron un sistema bastante elaborado (o por lo menos lo que he deducido). Un jugador es el host, o por asi decirlo todos son host menos uno q es el primario. Cuando uno de ellos se cae no pasa nada todos son host, ahora cuando se cae el primario que pasa?? Realmente nada, todos son host. Los 4 preguntan al servidor de battle net y el elije cual es el nuevo host (creo q lo realiza segun lag) y desde ese momento ya hay nuevo host primario. Totalmente transparente al usuario.

Se que es un poquito lioso y no se cuan dificil será de programar, pero espero que te haya dado ideas ^^

EDITADO:

Otra cosa que se me ha ocurrido ahora es q el servidor cambie el servidor cuando lo vea conveniente. Tu imagionate que crea una partida un usuario q tiene mala conexion y resto la tiene mejor.....seria "ilogico" que la hosteara el. Como todos los jugadores estan en comunicacion continua, el server puede evaluar latencias e ir cambiando de host. Si nota que un usuario se esta callendo, mira en q partida esta y al resto de usuarios le manda cambio de host.
Título: Dudas Sobre Qué Usar Para Un Juego Multijugador
Publicado por: CoLSoN2 en 05 de Abril de 2005, 03:23:55 pm
Cita de: "shephiroth"
Wenas.

Yo hay muchos temas q no comentaste que no me atrevo a aconsejarte........pero el tema que comentaste de quien hostea la partida......en el starcraft utilizaron un sistema bastante elaborado (o por lo menos lo que he deducido). Un jugador es el host, o por asi decirlo todos son host menos uno q es el primario. Cuando uno de ellos se cae no pasa nada todos son host, ahora cuando se cae el primario que pasa?? Realmente nada, todos son host. Los 4 preguntan al servidor de battle net y el elije cual es el nuevo host (creo q lo realiza segun lag) y desde ese momento ya hay nuevo host primario. Totalmente transparente al usuario.

Se que es un poquito lioso y no se cuan dificil será de programar, pero espero que te haya dado ideas ^^

EDITADO:

Otra cosa que se me ha ocurrido ahora es q el servidor cambie el servidor cuando lo vea conveniente. Tu imagionate que crea una partida un usuario q tiene mala conexion y resto la tiene mejor.....seria "ilogico" que la hosteara el. Como todos los jugadores estan en comunicacion continua, el server puede evaluar latencias e ir cambiando de host. Si nota que un usuario se esta callendo, mira en q partida esta y al resto de usuarios le manda cambio de host.
O hacerlo como tengo pensado, osea peer-to-peer XD

Si uno es server quiere decir que tiene información sobre la partida que los demás no tienen. En caso de desconexión total sería imposible 'reasignar' a otro jugador como servidor.

Starcraft usa un sistema peer-to-peer como el que digo, como todos los RTS que conozco. Sino cuando perdiera el servidor se acabaría la partida, y como que no es plan.