[GAME] Rosie ~ The Rascal

Proyectos en Desarrollo.

Re: [GAME] Rosie ~ The Rascal

Postby erkosone » Thu Apr 05, 2012 4:16 pm

Si, hay que montar un sistema de cola de peticiones, es importante hacerlo para juegos medianamente grandes.
Para cuando algo jugable en red?
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Rosie ~ The Rascal

Postby SimulatorOne » Thu Apr 05, 2012 4:32 pm

Pues te digo lo que funciona y lo que no Actualmente:

-Soporte multijugador 4 jugadores(4 clientes) (+ Servidor aparte,Jugador 0)
-Zona Multijuador de Espera "Lobby".
-Soporte de Nicks de nombre de jugador, 12 caracteres (pero aun no visible en los chats de los demas)
-Los jugadores pueden Elejir el Skin a gusto (pero aun no visible por los demas jugadores...)
-Soporte de CHAT hasta 48 Caracteres, multijugador (el Servidor tambien puede chatear) Funciona al 100%
-Sopprte para ver a otros jugadores moverse a tiempo real (lo mas rapio que pueden,dependiendo de la CPU y conexion ADSL)

Lo que aun no funciona,falla o falta por programar:
40%-Soporte de Skins que los Clientes sepan que Skin esta usando ese jugador.(de momento por nombre de skin)
20%-Mostrar nombre del Nick del jugador al chatear (de momento solo muestra el numero de ID jugador donde proviene el chat)
20%-Boton de Confirmar "Listo" para empezar a jugar a la siguiente Zona. (de momento se trata de un comando)
0%-Enviar a los demas Clientes "que cosas" han destruido/cogido : Anillos,Enemigos,Cabinas,Bloques...
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME] Rosie ~ The Rascal

Postby BigHead » Thu Apr 05, 2012 5:58 pm

Madremia simu akaba d salir el modulo d net hace na,vas muy bien!q ganas d probar esas fases online!!!enhorabuena. Q curro,animo q ya casi lo tienes,ahora faktamos el resto (menos erkos)q estamos a años luz d ti cn el online!
Hañime Bushi, nekonoashi
User avatar
BigHead
 
Posts: 1277
Joined: Sun Nov 30, 2008 1:28 pm

Re: [GAME] Rosie ~ The Rascal

Postby erkosone » Thu Apr 05, 2012 8:28 pm

Hombre Gracias, no es para tanto jeje..
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Rosie ~ The Rascal

Postby SimulatorOne » Thu Apr 05, 2012 9:13 pm

60%-Mostrar nombre del Nick del jugador al chatear...
casi lo tengo

solo debo solucionar un problemaa con el manejo de laa STRUCT.
por que entre clientes no se sabe que nombre,Skin tienen...
El servidor si que lo sabe.
pero ningun Cliente sabe naadaa de ningun otro cliente. solo saben las cordenadas,graph...

y debo recibir esa info de los clientes remotos...

creiaa que podiaa obtener esa info de los Clientes de maneraa directa sin pasar por el servidor.

Su historiaa comicaa: XDDD
Cliente 1: oie, Cliente 2 como te llamaas?
...
paasa un buen rato...
Cliente 2: no veo a nadie O_o¿ estoy solo???
...
Cliente 1: Me estoy haartaando de preguntarte como te llaamaaas?!!! Ò@Ó!!
Cliente 2: -_____- no me entero de naaaaaaaa.

XDDD

Pues ese el problema, el Cliente 2 nunca le llega ese mensaaje.

El servidor conoce a Todos.
Pero entre Clientes no se conocen....


El servidor, es el primero en llegar a la sala.
Entra el Cliente 1.
y el servidor dice: Hola! Como te llaamas
Cliente 1: me llamo Tino xDD
Servidor: Oks ^^ y como eres?
Cliente 1: pues soy rojo y negro te gustaa?
Servidor: mola, graaciaas, espera aqui aver si viene otro cliente.
(Servidor se guarda toda la info del Cliente 1)

....(El Servidor y Cliente 1 pueden hablarse sin problemas, enviando y recibiendo comandos entre si)

Cliente 2, Entra.
Servidor dice: Hola Cliente 2, Como te llamas?
Cliente 2: yo me llamo Raul
Servidor: y como eres?
Cliente 2: yo soy azul!
Servidor: vale, me alegro.
(Servidor se guarda la info del Cliente 2)

Cliente 1, se daa cuenta de que el Cliente 2 a entrado...
y le pregunta: Oie! Cliente 2, como te llamas?
Cliente 2: me parece que haay algien mas, pero no se nada de ese cliente le preguntare.
El Cliente 2, tambien le pregunta al Cliente 1, como se llama?

El servidor no se da cuenta de que hablan entre los 2, cree que estan en silencio.

Entre el Cliente 1 y 2, estan preguntando como se llaman...
pero .... ninguno responde...
y ninguno de los 2 se conoceran....
Y saben que estan los 2, solo que ninguno de ellos se comunican entre si.


esto viene de este problema: viewtopic.php?p=44028#p44028
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME] Rosie ~ The Rascal

Postby erkosone » Thu Apr 05, 2012 9:37 pm

Haber, es bien sencillo mira:

Para que un cliente pueda hablar con otro cliente tienes 2 formas, por envíos al servidor con peticiones "cosa desaconsejada para tu tipo de juego.." o simplemente con un byte mas llamado por ejemplo: byte llamando_a_cliente_;

entonces, como hacer para que un cliente sepa que otro cliente le llama? así..

en cada cliente..

process controlador_eventos_entre_clientes_();
..
..
for( i=1; i<MaxConnections; i++ ) --> recorrer la lista de clientes conectados..
if(players[i].llamando_a_cliente_ == net.player_id) --> comprobar si otro cliente me llama a mi..
..
..
..

El tema protocolos a alto nivel es difícil Simulatorone, yo me atranco constantemente.. es algo que necesita ser preciso al 100%, sin posibilidad de error, y es algo a lo que no estamos acostumbrados XD.. a hacer algo "exacto".


Pues con algo así ya sabes cuando un cliente llama a otro cliente, solo es cuestión de pensarlo un poco y lo sacas, ahora le añades o reutilizas alguna variable tipo string para los mensajes y listos. ;)
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Rosie ~ The Rascal

Postby erkosone » Thu Apr 05, 2012 9:41 pm

Tienes que pensar de esta forna, no intentes pasarle un dato a otro cliente! solo grita su nombre y dile lo que quieres, como si fuera un perro!!

Si analizas bien lo de "dile lo que quieres" no me refiero a que le envies nada.. me refiero a que con una variable dices "oye pliente 1 escuchame!!" y con otra le dices "eres mas feo que un rábano!!", como ves, no has tocado los datos del cliente con el que quieres hablar, es el cliente mismo el que mira si alguien le dice algo, este es el funcionamiento mas básico de la comunicación a bajo nivel UDP broadcast, no conectas con nadie.. tu emites.. y el que lo oiga tiene que discriminar si es para el ese mensaje o no, y si es para el pues lo procesa.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Rosie ~ The Rascal

Postby SimulatorOne » Thu Apr 05, 2012 10:42 pm

es decir:

Cliente 1: Grita a si mismo, Cliente 2 como te llamas? (en su propia STRUCT registro net.id_player)

Cliente 2: pondra oido a todos los Clientes + Servidor, y se dara cuenta que el Cliente 1, le esta llamando y ademas le hace una peticion.
Cliente 2: Grita diciendo su nombre....
"Cliente 1, Me llamo Jorge"!

Cliente 1 esta atento poniendo odio, esta escuchando...
"Huy! el Cliente 2 me esta diciendome su nombre! biemmmm :D "

Cliente 1, le dice Graciaas y adios al Cliente 2. (es para confirmar de que tiene su nombre)
el Cliente 2: De nada, adios.

xD

Creo que lo voy pillaando laa idea XDDD

hay que pensar en cosas sencillas, cosas de pura logica y muy muy social xDDD

Pues yo uso a comaandos directamente STRING, tengo 2:
Comandos de Cliente y Comandos de Servidor.
Los comandos cliente son para si mismo, o entre clientes :)
El Servidor miraa si algun cliente tiene algun comando de tipo Servidor.
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME] Rosie ~ The Rascal

Postby erkosone » Fri Apr 06, 2012 12:13 am

Exacto, esa es la idea, por ponerte un ejemplo de protocolo entre clientes por udp puro y duro..

cliente 1 pone esto en su registro y lo pasa a los demás..
byte destino_ = 2;
string comando = "como te llamas?";

todos los clientes están haciendo esto continuamente:
for( i=1; i<MaxConnections; i++ )
if(players[i].destino_ == net.player_id)
players[net.player_id].destino_ = 99; --> 99 indica estado de "mensaje recibido y procesando".. el player 1 verá este estado 99 y sabrá que su petición ha llegado a su destino..
..
..
.. procesar mensaje..
end


en el cliente 1 tras comprobar que el cliente al que ha llamado ha puesto su destino_ = 99 sabe que el mensaje ha llegado a su destino y esperará a que el cliente 2 le envié algo como esto:

"En el cliente 2 tras recibir la petición y poner su destino a 99"..
destino_ = 1;
mensaje_ "me llamo pepe";

En el cliente 1 otra vez..
si ve que ahora el cliente 2 le está enviando algo, procesa el mensaje del cliente 2 y vuelve a poner su estado destino_ a cero y su mensaje a "2.OK"..

En el cliente 2 de nuevo..
cuando vea que el cliente 1 ha puesto su destino_ = 0 y el mensaje a "cliente.OK" en este caso "2.OK" pues se pone en su estado inicial..


y vuelta a empezar..


Hay que mirarlo muy bien esto.. por que mientras se está produciendo una conversación lo mas probable es que otro cliente pregunte algo.. y puede liarse gorda.. por eso es bueno crear una variable mas que guarde algo como "ocupado.." y cuando quede libre esta variable se pueda procesar otro mensaje..

el tema tiene miga XD.-.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Rosie ~ The Rascal

Postby SimulatorOne » Fri Apr 06, 2012 12:23 am

si lo entiendo totalmente,
por eso uso IF == 0 o "", antes de enviar nada por seguridad.
si no tiene ninguna operacion puede enviar un comando nuevo.

por eso seria bueno hacer un buffer de llamaadas.

y si uso un numero que identificaa QUIEN envia o recibe la peticion/comando.

La verdad tener el servidor me chiva de los sucesos y veo a tiempo real los comandos,
mola mucho :)

hay alguna cosa que necesito debugear, para ver realemente que valores trabajan.

Parece muy complejo, pero es divertido esto, pero taambien puede resultar frustrante.. pero aprendes mucho laa verdad.
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

PreviousNext

Return to Proyectos WIP

Who is online

Users browsing this forum: No registered users and 3 guests