Marzo 06, 2016, 01:55:22 AM Ultima modificación: Marzo 06, 2016, 03:03:49 AM por t4rmo
Hola estaba desarrollando un juego de mesa multijugador.En él, existe un servidor y un cliente.El servidor esta dividido en salas organizadas por un array de listas,en plan sala[0]=ds_list_create .... cada vez que supera el numero maximo de clientes se crea una nueva lista en la que entran los nuevos clientes.

El problema es que ese sistema crea muchisimas listas y me gustaria un sistema mas optimo pero igualmente de accesible.
Se aceptan ideas  XD

Idea #1: En vez de listas (que son pesadísimas en comparación) puedes usar un método de explode() para sacar un array con la información cada vez que se necesite.

Idea #2: Usa buffers, no tengo experiencia usándolos pero no se ven tan complicados según el manual.

Idea #3: no, ninguna más :P
alaberga regué el café.

BA:STFW&RTFM

#2 Marzo 06, 2016, 11:34:05 AM Ultima modificación: Marzo 06, 2016, 11:36:14 AM por t4rmo
Gracias le echare un ojo a lo que dices de explode,respecto a lo de los buffers,ya los uso para el envio de informacion entre servidor-cliente,cliente-servidor.
Rebuscando en el foro vi posts sobre mysql que hablaban sobre la gestion en un servidor,pero no veo claro como implementarlo
a la hora de almacenar cada cliente en su respectiva sala y dirigir la comunicacion entre ellos

Bueno, MySQL sería otra opción. Podrías, en vez de almacenar información en el mismo juego usando arrays, listas o lo que sea, guardar cada sala en un campo de una tabla MySQL.
El problema es que, como puedes imaginar, es mucho más lento esperar la respuesta de MySQL para obtener una sala que simplemente sacar el valor de un array o lista.
Aparte de que necesitarías un servidor, no de esos multiplayer que un dispositivo se hace servidor y otro cliente, sino de los usados en páginas web. No sé si ya tengas uno para el multiplayer, pero si no, te tocará comprarlo porque uno gratuito se te cae a la primera XD

Con respecto a los buffers, me refería a que en vez de usar una ds_list() podrías usar un buffer para meter los datos. No sé, nunca los he usado, ideas locas mías xD
alaberga regué el café.

BA:STFW&RTFM

#4 Marzo 06, 2016, 05:05:41 PM Ultima modificación: Marzo 06, 2016, 05:44:19 PM por t4rmo
Gracias NiuWeb,he estado echando un ojo a otros juegos que hay por ahi que hacen uso de los sockets y todo el tema del multijugador y por lo que veo se manejan  principalmente con mapas,aunque yo no lo acabo de ver el uso de mapas.

He estado probando con mysql y la verdad que he conseguido mis avances.
He seguido algunos de los tutoriales que hay en el foro y mirando un poco por ahi he conseguido crear una base de datos,y almacenar la posicion de un jugador en una base de datos.La verdad que es una forma interesante de manejar la informacion pero volviendo a mi problema,¿Es realmente optimo que cada jugador almacene su posicion en una base de datos?Ya que el servidor tendria que leer esa base de datos y mandar la informacion a cada cliente.
Por cierto otra pregunta es lo mismo una lista de 1000 clientes que 1000 lista de un cliente?

Siento mi pesadez  :-[

Cita de: t4rmo en Marzo 15, 2016, 04:21:07 PM¿Es realmente optimo que cada jugador almacene su posicion en una base de datos?
¿Queeeé? D: D: D: D:
¿Me estás diciendo que lo que planeabas era guardar cada rato la posición de los jugadores en una BD y también leer la BD desde otros dispositivos para que parezca multiplayer? ¡Nunca! D: D: D':
El juego te daría el mayor lag que jamás hayas visto en toda tu vida, sería horrible, y probablemente tengas que despedirte rápidamente de tu servidor (si no es local xD) porque gastaría un ancho de banda bárbaro D:

Cita de: t4rmo en Marzo 15, 2016, 04:21:07 PM
He estado probando con mysql y la verdad que he conseguido mis avances.
Por cierto otra pregunta es lo mismo una lista de 1000 clientes que 1000 lista de un cliente?
Obviamente no xD, una lista de mil clientes es una sola estructura de datos, mil listas de un cliente es lo menos eficiente (aparte de lo de arriba xD) que pueda existir, es gastar toda una estructura de datos para guardar un simple valor... ¿No sería mejor usar un array en ese caso? xD
alaberga regué el café.

BA:STFW&RTFM

#7 Marzo 15, 2016, 08:42:34 PM Ultima modificación: Marzo 15, 2016, 08:45:15 PM por t4rmo
Si... esa era la idea que cada cliente actualizara su posicion en la base de datos y el servidor se encargase de leer esas posiciones y enviarlas a los clientes.La verdad que si que es una idea muy mala pero no consigo entender como lo hacen los mmorpg todo el tema del networking.(Digo los mmorpg por que es el ejemplo de multijugador mas masivo que me viene a la cabeza)

Cuenta la leyenda que por aquí en el foro ronda un tutorial de multijugador que enseña a usar el networking. Pero bueno, sólo es una leyenda  ;)
[spoiler=La leyenda]http://www.comunidadgm.org/articulos/(programacion)hacer-un-juego-multijugador-online-con-game-maker-studio-ver2/[/spoiler]
alaberga regué el café.

BA:STFW&RTFM

He mirado todo lo que hay en el foro sobre networking y mi problema no esta ahi,por que conozco las funciones y sé como establecer una comunicacion mi problema está en que no sé como gestionar toda esa informacion del mejor modo(Como almacenar los clientes de una manera que sea correcta,como almacenar sus datos y enviarselos al resto de un modo mas o menos decente...).

Bueno, depende de qué tipo de información quieras guardar. Si como decías hace poco, quieres enviar las posiciones de los jugadores constantemente, creo que el tutorial ese de multiplayer muestra a hacerlo, y networking es la única manera decente de hacerlo. Si lo que quieres es guardar highscores y cosas así, creo que SQL aguantaría D:
alaberga regué el café.

BA:STFW&RTFM

Con networking me refiero a la forma de enviar los datos y si,sé de sobra que es la mejor manera pero una vez enviada la informacion su manejo no sé como hacerlo.
Ejemplo:
Mi juego trata de un juego de mesa por turnos en el que cada jugador tiene unos movimientos dependiendo si es su turno.Cada jugador envia su posicion al servidor.(Hasta ahi bien)
Mi problema empieza en como guarda esa informacion el servidor.El diseño que tenia antes era el de el array de listas,siendo cada array una sala donde radicaba una partida.Ese sistema me permitia un manejo perfecto de cada cliente y a la hora de enviar la posicion de donde estan los otros dentro de una misma partida.
Pero vi otros codigos que no utilizan ese sistema que usan mapas para almacenar toda la informacion.
El problema de los mapas es que no sé exactamente como manejar cada partida con los mapas.

Asi que asi estoy un poco perdido viendo tutos de todos lados,e intentando comprender como un juego serio organiza toda esa informacion(clientes,posicion,objetos...)

Eso es todo  :'( . Gracias Niuweb por estar ahi pendiente se agradece tu ayuda