Juego en red

Solicite, consulte o publique recursos de referencia para desarrolladores.

Juego en red

Notapor .teri » Dom Oct 01, 2006 5:11 pm

Creo que sería interesante un artículo sobre los juegos en red. No hay muchos tutoriales o artículos de este tipo y yo, muchos también, soy bastante inexperto en este tipo de cosas. A ver si alguien se anima ^^.
.teri
 
Mensajes: 38
Registrado: Dom Oct 01, 2006 4:41 pm

Saludos!

Notapor Fénix » Jue Feb 15, 2007 12:16 pm

Acabo de registrarme en el portal. Veo que esta mensaje es algo antiguo aunque me ha llamado la atención.

Hace poco hice un pequeño juego con SDL en red, utilizando SDL_net. Si alguien esta interesado podria comentar un poco como hice el juego, asi como colgar el codigo fuente.

Saludos!.
Avatar de Usuario
Fénix
 
Mensajes: 6
Registrado: Jue Feb 15, 2007 12:09 pm

Notapor cristian » Jue Feb 15, 2007 7:29 pm

Yo tambien acabo de registrarme y me interesa el asunto de redes en los juegos. Podrias publicar tu codigo fuente aca mismo y explicarlo :P
cristian
 
Mensajes: 3
Registrado: Jue Feb 15, 2007 7:25 pm

Notapor Fénix » Vie Feb 16, 2007 11:06 am

Está bien, en breve pubilcaré el codigo con algunas anotaciones ;).
De hecho ya lo tengo hecho, pero tengo que traducirlo al castellano, esta en catalán jeje.
Avatar de Usuario
Fénix
 
Mensajes: 6
Registrado: Jue Feb 15, 2007 12:09 pm

Notapor Lugus » Lun Feb 19, 2007 7:29 pm

Holas!!!
Acabo de registrarme, me parece interesante el tema, voy a estudiar animacion digital, pero es demasiado caro, mientras tanto kiero aprender todo lo posible, soy adicto a las mujeres y tb me gustan muxo los juegos de pc, sobre todo de estrategia. :D
Lugus
 
Mensajes: 1
Registrado: Lun Feb 19, 2007 7:10 pm

Notapor Fénix » Mié Feb 21, 2007 1:58 pm

Esto forma parte del articulo que hice para una ampliación de una asignatura...allà va:

El juego

Introducción

El juego pertenece a la familia de juegos arcade, como por ejemplo el mítico Space Invaders. En el juego movemos a nuestro jugador representado como un quadrado y disparamos a nuestro contrincante tratando de adivinar su posición.

La libreria ''FuncionsXarxa.h''

No entraré en detalles sobre la programación del videojuego a nivel de manipulación de sprites entre otras cosas. Solo me gustaria hacer referencia a una pequeña libreria que he hecho. En esta libreria hay una serie de funciones básicas para convertir el juego en un juego multijugador online.

Tampoco explicaré demasiado la estructura interna de estas funciones, ja que entre otras cosas hay llamadas a funciones propias de SDL_net.

La función establirServidor(IPaddress *ip)


Esta función se encarga, tal y como dice su nombre, de crear el servidor. De esta manera conseguimos que otro jugador nos pueda enviar datos. El puntero ip del tipo de datos IPaddress nos servirá para guardar información referente a nuestro servidor.

A continuación abrimos el socket del servidor, utilizando la dirección ip de la máquina asi como el puerto, para poder recibir peticiones de posibles usuarios.

La funcion enviarDades(char *host,char *dades)

La siguiente función envia la cadena de caracteres al host correspondiente. Para poder enviar datos primero tenemos que crear una puerta de comunicación (un socket). Entonces intentamos abrir ese socket en esa dirección, especificando el puerto donde este "escuchando" el servidor (es decir, el puerto donde se ha abierto el socket del servidor). Si es posible comenzamos a enviar la información a través de ese socket. Al finalizar el envio lo cerramos.

La función rebreDades(TCPsocket server,char *message)

Para recibir datos primero tenemos que comprovar que haya alguien que nos quiere enviar. Gracias al socket que hemos abierto en la función "establirServidor" podemos aceptar peticiones. Si decidimos aceptar una petición, tendremos que crear un nuevo sockets para poder recibir los datos. Finalmente estos datos se guardan en la variable message. Observemos como necesitamos dos sockets, uno para "escuchar" peticiones y otro para tratarlas.


Screenshots


Imagen

Codigo Fuente

Aqui teneis el código fuente ;), los comentarios asi como algunos nombres estan en catalán, medio mezclado en castellano jeje, alguna duda ya sabéis:

http://es.foratdecuc.net/david/panyuFont.zip

Ejecutables

Versión Windows: http://es.foratdecuc.net/david/panyuExe.zip

Nota: Si no tenéis con quien jugar podéis provar el juego vosotros mismos. Debereis indicar que quereis ser el jugador 2 y la dirección de vuestro rival es localhost.

Fuentes

http://www.libsdl.org <- Informació sobre la llibreria SDL
http://es.wikipedia.org/wiki/Socket <- Informació sobre sockets

W. Stallings (2004). Comunicaciones y redes de computadores, 7a Edición. Pearson Prentice Hall.

Bien, eso es todo. No he colgado la parte que explica el modelo de comunaciones TCP/IP asi como una explicación sobre sockets. Si alguien esta muy interesado siempre puede consultar los enlaces que he puesto o preguntar alguna cosa.

P.D. Perdonad los errores ortográficos, he traducido muy deprisa. Saludos!
Última edición por Fénix el Mié Feb 21, 2007 7:26 pm, editado 8 veces en total
Avatar de Usuario
Fénix
 
Mensajes: 6
Registrado: Jue Feb 15, 2007 12:09 pm

Notapor cristian » Mié Feb 21, 2007 2:34 pm

Esperamos pronto el codigo fuente :P

me pregunto, usaste el modelo TCP? porque no UDP para este tipo de juegos.
cristian
 
Mensajes: 3
Registrado: Jue Feb 15, 2007 7:25 pm

Notapor Fénix » Mié Feb 21, 2007 6:59 pm

Estoy intentado colgar el código en algun sitio XD. Ahora mismo no tengo ningún hosting pero no temais jeje.

En cuanto a UDP y TCP... la verdad es que aún no tengo mucho dominio sobre ese tema. Ahora mismo estoy cursando la segunda parte de redes de computadores y la verdad es que entiendo los dos protocolos y también es cierto que UDP es bastante usado (como por ejemplo en el Starcraft) para juegos, aunque UDP no garantiza la entrega de los datos ya que es un protocolo no orientado a connexión.

TCP te permite una conexión fiable y garantiza la entrega de los datos en el mismo orden en que se enviaron. Supongo que no es la mejor manera de hacer un juego online, pero bueno es un principio jeje ^^.
Avatar de Usuario
Fénix
 
Mensajes: 6
Registrado: Jue Feb 15, 2007 12:09 pm

Notapor rcaf » Jue Feb 22, 2007 2:26 am

Normalmente se utiliza el procolo UDP para juegos de acción, como los Shooter 3D (FPS, First Person Shooter): Quake, Unreal Tournament, etc.

Claramente UDP es un protocolo no orientado a la conexión, pero se puede implementar un sistema similar a TCP, la ventaja es que es mucho más rápido que TCP, así que cuando queramos hacer un juego donde queremos tener resultados rápidos de lo que pasa en el mundo, es mejor usar UDP, es posible que se pierdan datos, pero no es problema, se espera el siguiente paquete y así continuamos.

Lo importante al usar el protocolo UDP es crear un buen paquete de datos para transmitir la información del juego, esto es un punto clave.

Frecuentemente el protocolo TCP (orientado a la conexión) se utiliza cuando queremos una conexión segura y que no exista ningún tipo de pérdida de datos. Se utiliza en juegos como Starcraft, juegos de rol o estrategia, donde la velocidad no es un punto fuerte, pero si es critico el asunto de perder información durante el juego.

También es posible implementar un sistema híbrido que utilice tanto el protocolo TCP como UDP.

Es cierto que es mas fácil implementar un sistema TCP en nuestro juego, y para comenzar no está mal.
Roberto Albornoz Figueroa
Mi Blog
Wiki
Avatar de Usuario
rcaf
 
Mensajes: 71
Registrado: Jue Ago 10, 2006 4:35 am
Ubicación: Concepción, Octava Región. Chile

Tutorial de Sockets linux window$

Notapor hugetto » Vie Abr 13, 2007 8:39 pm

Aqui os dejo un pequeño pero muy bien explicado manual de comunicación de sockets en linux y window$

http://www.arrakis.es/~dmrq/beej/index.html

Espero que os sea de utilidad ;)
hugetto
 
Mensajes: 5
Registrado: Vie Abr 13, 2007 8:35 pm

Notapor lacabra25 » Sab Abr 12, 2008 9:36 pm

Una pequeña pregunta sobre TCP e UDP, no se podria aprovechar la velocidad de UDP sin necesidad de que en los momentos en que se pierden los datos, esos datos ya se den por perdidos definitivamente, me refiero a que se podria con UDP saber si los paquetes de datos han llegado o se deben volver a enviar por segunda vez (¿cuantas posibilidades hay de que se pierdan los mismos datos dos o tres veces seguidas?), seria como:

- enviar datos del juego
- esperar datos muy ligeros que confirmen la recepcion
- si no se recibe confirmacion mandar datos ligeros "preguntando" por la recepcion anterior
- Si no se recibe respuesta o la respuesta es que no se han recibido los datos anteriores se reenvian los datos nuevamente
- si se ha intentado reenviar los mismos datos 2, o3 (o las veces que uno quiera) se dan como perdidos los datos o la conexion como desconectada si no se recibe ninguna respuesta

¿algo asi o similar seria posible para, aunque los datos se perdiera, poder saber si se han perdido y reenviarlos si hace falta? ¿si algo asi fuese posible, consumiria demasiado tiempo de ejecucion y restaria velocidad a UDP o no lo aria?
Esta propuesta y pregunta es por curiosidad, seria interesante poder contar con velocidad y almenos saber si los datos han llegado bien.
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)


Volver a Artículos, traducciones y documentación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron