Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - Altair

#16
Si, lo de leer continuamente la tabla de salida es algo que tambien pienso que puede hacer caer el rendimiento. Creo que no es lo mismo desde el punto de vista de programacion una partida en red local que otra por internet, dado que el entorno es diferente.

He pensado en formas de optimizar eso, y se he han ocurrido dos cosas:

Primera, las lecturas de la tabla de salida se hacen solamente una vez cada segundo, eso deberia ser una ayuda para sobrecargar menos la comunicacion y el sistema, creo.

Segunda, cada cliente tiene su propia tabla de salida. Esto hace que el servidor escriba mas registros, uno por cada tabla de cliente, pero a cambio la lectura de la tabla de salida por parte de cada cliente creo que es mas eficaz al buscarse solamente los registos del segundo correspondiente y no tener que incluir el nombre del cliente.

Al combinar ambas cosas creo que podria ser un avance.

Por otra parte estoy buscando por Google el codigo fuente de algun juego multiplayer 2D para tener una idea mas clara de por donde tirar, pero de momento todo lo que estoy viendo por sourceforge son o masivos o 3D
#17
Si, como canal de comunicacion. No se si es una buena forma pero parece funcionar, tengo que probarlo. Por ejemplo, supongamos una partida de matamarcianos de 3 jugadores.

Cada cliente toma "decisiones locales", como por ejemplo que una nave no puede disparar si no tiene municion y la envia al servidor. Es decir, al servidor solo se envian datos que se sabe que son correctos. ¿Como se enteran los otros 2 jugadores?.

El servidor MySQL tiene, basicamente, tres tipos de tablas. La de entrada de datos, en la que solamente pueden escribir (no confundir con actualizar); la de salida de datos, en la que solamente pueden leer. Los clientes escriben los datos en la de entrada casi continuamente, pues toda actualizacion de los datos de un cliente tiene que ser comunicada al servidor y, segun lo que sea, a los otros clientes. Los datos de la entrada se procesan y se escribe la respuesta en la tabla de salida. Los clientes leen la tabla de salida continuamente, puesto que no saben cuando va a haber un mensaje para ellos.

Estas dos tablas se estan actualizando continuamente, asi que cada X tiempo se tienen que borrar registros que ya no son utiles. Por ejemplo, si la partida ya dura 5 minutos, los registros de los 4 primeros minutos no son necesarios y deben ser borrados, lo cual aumenta la velocidad de las consultas en esas tablas. A tener en cuenta que se borran siempre registros que pertenecen al pasado.

Los mensajes tienen una estructura de este tipo: ORIGEN - DESTINO - MENSAJE - MARCA

ORIGEN es el nombre del jugador, fecha y hora. DESTINO el jugador al que enviamos. MENSAJE el texto al cliente. MARCA es el estado del mensaje, se usa para eliminar registros procesados.

Para evitar problemas de consistencia con los datos, como por ejemplo dos ordenes actualizando al mismo tiempo una variable con datos diferentes, las ordenes de la entrada se procesan una a una.

Basicamente es eso, creo que puede funcionar.
#18
Buenas,

estoy avanzando con mi proyecto y he llegado a un punto que creo que deberia meterle la opcion multiplayer, he pensado tanto red local como por Internet. Estoy pensando en usar MySQL tanto para la comunicacion como almacenar datos de lo que sea (perfiles de jugadores, rankings, etc)

Entiendo que depende bastante del tipo de juego, no es lo mismo un matamarcianos que un plataformas que un juego tipo Quake pero creo que poderse, se podria hacer con C/C++ y MySQL. El como se gestionen los datos y demas cosas internas es otro tema.

¿Estoy mas o menos en lo cierto?.

Gracias.
#19
Programación en red / Juego 2D cliente servidor
18 de Noviembre de 2012, 10:41:29 AM
Buenas,

estoy mirando alguna libreria para hacer un juego en red. Es un juego 2D sencillo, lo tengo todo en papel mas o menos claro, estoy usando Linux, C/C++, SDL para graficos y demas y MySQL en el servidor para almacenar los datos.

En la comunicacion entre el cliente y el servidor, como uso SDL he mirado SDL_net. Estoy trasteando con TCP con este ejemplo http://content.gpwiki.org/index.php/SDL:Tutorial:Using_SDL_net y me funciona mas omenos, puedo enviar texto. Digo mas o menos porque si el texto tiene espacios en blanco, en el servidor aparece solo hasta el espacio. Si envio "uno dos" el servidor recibe "uno" y el resto "(espacio en blanco) dos" se pierde. Si envio "uno_dos", el servidor lo recibe bien.

Otro tema es que estoy probando pero no me deja conectar mas de un cliente, parece que la funcion SDLNet_TCP_Recv tiene que estar dentro de un bucle, lo cual hace que solo pueda atender un socket.

He leido en una web, que estoy intentando localizar desde hace un rato, que SDL_net es mas bien una libreria sencilla para aclarar conceptos y cosas basicas, pero nada mas. Recomendaban otras dos o tres librerias, segun ellos mucho mas avanzadas.

Otra opcion que he pensado, no se si es muy valida pero en fin, es que los clientes metan su solicitud en una tabla de entrada y que el servidor continuamente lea esa tabla y procese las ordenes una a una. Con esto se conseguiria algo del tipo una accion cada vez, y para tener un orden, se pone un identificador del tipo nombre_cliente y la fecha y hora completa al milisegundo del servidor. Hay en mysql algo asi, no recuerdo exactamene el nombre. Lo que pasa, y no se si puede ser un problema, es que creo que con esto la CPU y el disco duro estan siempre en marcha porque se esta leyendo la tabla continuamente, no se si esto puede ser un problema.

En fin, no me enrollo mas, no se si estoy por el camino que toca o que, pero un poco eso es lo que estoy barajando. Igual, para los que conoceis mas estos temas, estoy poniendo una tonteria  ^_^' pero ahi lo dejo.
#20
Segun creo entender, es como un servicio. Creo que es como cuando va a un comercio y te compras una distribucion GNU/Linux, que te dan la caja, los DVDs y un manual impreso. Estas pagando que alguien ha hecho todo eso.
#21
Buenas,

estoy mirando unas cosas y me ha salido esta duda: haces un programa con licencia LGPL (lo que sea). Las condiciones de la licencia indican que tienes que poner a disposicion de los demas el codigo fuente del programa. Vale.

La pregunta es: ¿seria valido que para tener el codigo fuente tengas que comprar el CD?.

Un ejemplo: haces un programa, pones en la web el binario e indicas que programas se necesitan para ejecutarlo. El que quiera el codigo fuente que pague 3 euros + gastos de envio y se manda un CD con el codigo fuente por correo.

Esto viene a raiz de algun que otro texto que he leido por internet.
#22
Principiantes / Re: Dudas sobre que biblioteca elegir
10 de Abril de 2012, 10:24:00 AM
Yo te recomendaria Nautilus Game Library que puedes encontrar en http://sourceforge.net/projects/nautilusgl/files/v0.4/

Efectivamente usa SDL y C++, pero por su diseño hacia el usuario, parece C y no C++
#23
Muy buenas,

he visto mucha información al respecto sobre crear empresas en el extranjero. Tras leer informacion por Internet he decidido poner aqui unos enlaces que parecen explicar bastantes temas legales. Mi idea es que la gente que conoce más profundamente estos temas de su opinión.

¿Es posible crear una empresa en un país extranjero?. La web de la comision europea dice que SI. Hago copy & paste: "El principio de libertad de establecimiento, consagrado en el artículo 49 del Tratado de Funcionamiento de la Unión Europea, permite a los emprendedores crear empresas en cualquier país miembro de la UE."
Fuente http://ec.europa.eu/youreurope/business/starting-business/setting-up/index_es.htm

En esa web dan los detalles legales tanto para crear una empresa como para adquirir una.

Posteriormente, estos dos enlaces:
http://desencadenado.com/2012/01/crear-una-empresa-en-3-horas-por-71-euros.html
http://desencadenado.com/2012/02/que-implica-abrir-una-empresa-en-londres.html

Espero que sea información útil.
#24
Proyectos / Re: Publicado Nautilus Game Library
03 de Marzo de 2012, 10:58:42 AM
Buenas,

voy a seguir la sugerencia que me han dado de tratar de mantener en un único hilo este tema, un poco por lo de tenerlo todo más ordenado y esas cosas.

He terminado hace poco la versión 0.4 de Nautilus y estoy bastante satisfecho con como ha quedado. Las novedades de esta versión son el pathfinding, reproducir películas y la posibilidad de juegos cliente-servidor.

Creo que stratos es un buen lugar para una especie de "testeo intensivo" porque muchos usuarios de aquí usaron en su dia div2/fenix. Muchas cosas son muy parecidas. Creo que muchos juegos que se hicieron para div2 y/o fenix podrían adaptarse fácilmente.

Esta es una lista de las funciones disponibles en esta versión:

NOTA: si no tienen el prefijo "ngl_" son funciones miembro, detalles en el manual.

FUNCIONES DE PANTALLA
ngl_set_mode

FUNCIONES DE INTERACCION
ngl_collision
ngl_get_angle
ngl_get_dist

FUNCIONES MATEMATICAS
ngl_rand_seed
ngl_rand

FUNCIONES GRAFICAS
ngl_paint
ngl_paint_region
ngl_paint_entity
ngl_alpha
ngl_mask
ngl_rotate
ngl_set_fps
ngl_get_fps
ngl_put_pixel
ngl_get_pixel_r
ngl_get_pixel_g
ngl_get_pixel_b
ngl_geom_hline
ngl_geom_vline
ngl_geom_line
ngl_geom_line_aa
ngl_geom_line_thick
ngl_geom_rectangle
ngl_geom_rectangle_rounded
ngl_geom_box
ngl_geom_roundedbox
ngl_geom_circle
ngl_geom_circle_aa
ngl_geom_circle_filled
ngl_geom_arc
ngl_geom_ellipse
ngl_geom_ellipse_aa
ngl_geom_pie
ngl_geom_pie_filled
ngl_fill

FUNCIONES DE PLANOS
add
del
get_number
paint
paint_one
paint_group

FUNCIONES DE MUSICA Y SONIDO
ngl_sound_init
ngl_sound_close
load
unload
volume
volume_up
volume_down
play
play_num
resume
rewind

FUNCIONES DE ENTRADA
ngl_key
ngl_mouse_get_x
ngl_mouse_get_y
ngl_mouse_get_button_state

FUNCIONES DE SCROLL
load
unload
set_x1
set_x2
set_y
paint
move
init
limit
speed
direction
set_y1
set_y2
set_x

FUNCIONES DE TEXTO
ngl_init_ttf
ngl_ttf_quit
ngl_load_font
ngl_unload_font
ngl_font_set_color
ngl_font_text_solid_basic
ngl_font_text_solid_utf
ngl_font_text_shaded_basic
ngl_font_text_shaded_utf

FUNCIONES DE ANIMACIONES
ngl_play_movie

FUNCIONES DE CRONOMETROS
start
stop
get_ticks
pause
unpause
is_started
is_pause

FUNCIONES DE PATHFINDING
ngl_blocks
ngl_path_find
reset
number
get_x
get_y

FUNCIONES DE RED
ngl_net_open_server
ngl_net_open_net_server
ngl_net_close_server
ngl_net_accept_client
ngl_net_open_localhost
ngl_net_open_network
ngl_net_close_client
ngl_net_read
ngl_net_write

Por último deciros que voy a tratar de financiar este proyecto mediante crowdfunding, he elejido lanzanos.com como podría ser cualquier otra, no tengo preferencias. De todas formas la cantidad necesaria es asequible, detallada en http://www.lanzanos.com/caja/proyecto/2291/

Si no conocéis esta forma de financiación, aquí la explican http://www.lanzanos.com/como/funciona/
#25
Proyectos / Re: Dos capturas de Nautilus Game Library 0.4
22 de Febrero de 2012, 01:19:07 PM
Habia pensado en algunas cosas como las que dices, pero gracias :)
#26
Proyectos / Re: Dos capturas de Nautilus Game Library 0.4
22 de Febrero de 2012, 10:07:17 AM
Nautilus Game Library (NGL) es una libreria pensada para realizar juegos 2D de forma sencilla bajo Linux. En futuras versiones se incorporara 3D usando openGL.

Usa C/C++ y esta diseñada para que sea sencilla de usar.

Funciones de interaccion entre objetos (llamados "entidades" en NGL), funciones matematicas, funciones graficas, funciones para musica y sonido, funciones de entrada, funciones de scroll, funciones de texto y funciones de regiones.

La version 0.3 esta online en http://ngl.ayudaprogramacion.net/

Licencia LGPL, trae el codigo fuente, el manual y  ejemplos listos para compilar.
#27
Proyectos / Dos capturas de Nautilus Game Library 0.4
22 de Febrero de 2012, 09:27:20 AM
http://tinypic.com/r/nyyznn/5

http://tinypic.com/r/mjmutl/5

Demo de pathfinding y demo de reproduccion de peliculas.
#28
Proyectos / Publicado Nautilus Game Library 0.3
23 de Enero de 2012, 09:53:37 AM
Novedades:

- Nueva funcion de interaccion entre entidades: ngl_advance
- Scroll horizontal y vertical, en ambas direcciones (arriba, abajo, izquierda, derecha)

La descarga incluye:
- Codigo fuente de NGL
- Tutoriales
- Demos con ejemplos listos para compilar, con imagenes de los resultados

http://ngl.ayudaprogramacion.net/
#29
Proyectos / Usar los ejemplos de div2
09 de Noviembre de 2011, 11:12:22 AM
Muy buenas,

estoy planteandome usar los ejemplos que trae div2 para hacer unas demos con la libreria. La pregunta que tengo es si es legal. Seria coger todo (graficos, sonido y codigo fuente) y "traducirlo" a mi proyecto.
#30
Me parece perfecto, antes de lanzarse a algunas cosas suele ir bien darse un "baño de realidad" para evitar males mayores.

Creo que una buena opcion podria ser asociaciones de inversores, un poco para evitar lo que decia Ager :"Lo primero es que hay que distinguir "inversor" de "persona con dinero que va a saraos para parecer importante pero no invierte nunca en nada""

¿La opcion de acudir a inversores extranjeros es viable?, en caso afirmativo.. ¿como suele ser el tema?.





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.