Yo participo mediante un mini-juego llamado asteroids,
donde se utilizan partículas en las explosiones y las
trayectorias de disparos:
captura de pantalla:
http://www.losersjuegos.com.ar/incoming/descargas/particulas/asteroids.png
el programa ha sido desarrollado en python con pygame en 3
días. Les dejo un vinculo temporal para descargarlo:
http://www.losersjuegos.com.ar/incoming/descargas/particulas/asteroids.tar.gz
Buena suerte, y espero con entusiasmo sus propuestas.
Hasta luego.
--
Hugo Ruscitti
www.losersjuegos.com.ar
Viendo el screenshot se ve bastante bueno el mini-juego.
Hugo, podrías crear un binario para windows, para ver en acción mas
rápidamente el juego.
En cuanto a mi propuesta que consiste en un campo de estrellas, de
nieve, y lluvia, aun no lo tengo listo debido a que he estado un poco
ocupado trabajando y hoy entre a clases nuevamente, y he tenido poco o
casi nada de tiempo para programar.
Lo más probable es que lo publique durante la semana.
Estoy utilizando C++ con SDL.
Por ahora tengo listo el campo de estrellas, en el transcurso de este
semana terminaré los otros dos efectos.
Estoy trabajando todo el código orientado a objetos, de hecho tengo
una clase CVideo, donde encapsulo todas las funciones mas usadas para
el manejo de gráficos, como por ejemplo inicialización de la
biblioteca, del modo de video, bliting, carga de imagenes, dibujar
pixeles, lineas, etc.
Otra clase CInput que maneja los eventos básicos de una ventana, de
teclado y mouse.
Una clase CRandom que maneja números aleatorios ya sean enteros o
reales.
Una clase abstracta llamada CParticleSystem que es la base para crear
efectos sencillos de partículas, más una estructura particle_t, que
corresponde a la partícula en si con las típicas propiedades de
posición, velocidad, color, etc.
La clase CStars que hereda de CParticleSystem, implementa un sencillo
campo de estrellas con la posibilidad de darle como parámetro la
dirección, hacia arriba, abajo, izquierda o derecha.
Por último otra clase abstracta llamada CGame, la cual tiene el
prototipo básico para manejar un juego. Así que cuando creemos un
nuevo proyecto de juego, crearemos una clase nueva y heredaremos de
CGame. Y deberemos sobreescribir las funciones virtuales que estaban
definidas en la clase abstracta CGame.
Todo lo anterior está listo, pero quiero pulirlo un poco más antes de
publicarlo, y claro agregar los otros dos efectos que me faltan, que
son el de nieve y lluvia (de hecho los tengo hechos en Allegro, solo
debo portarlos a SDL).
En general la biblioteca incluirá todas las clases anteriormente
nombradas, más otras para manejo de Sprites (CActor), Frames (CFrame),
esta última almacena cada uno de los gráficos que formarán una
animación, manejo de texto con SDL_ttf (CText), sonido y música
utilizando SDL_mixer o FMOD (CSound, CMusic), también estarán las
clases CTimer y CFPS.
Tanto el sistema de audio y texto tendrán una clase manager para
inicializar y cerrar el sistema, CAudioSys y CFontSys respectivamente.
Además existirá una clase denominada CSurface que manejará
superficies, una abstracción a más alto nivel de la estructura
SDL_Surface, que permitirá crear superficies vacías, alpha blending,
entre otras cosas.
Además algunas clases harán uso de la clase CSingleton, con el fin de
que se asegure que exista solo una instancia de la clase, para evitar
algunos problemas. Las clases que usarán el patrón Singleton serán las
que manejan un sistema o módulo en particular (los managers).
Las clases que acabo de mencionar están listas, pero como decía
anteriormente debo pulir el código aun más, y documentarlo mejor. La
documentación estará hecha con Doxygen.
Posteriormente agregaré la posibilidad de elegir entre usar SDL o
OpenGL como Render 2D.
Así que espero pronto publicar los efectos junto a una extracto de lo
que será la biblioteca que estoy desarrollando, la cual es una
evolución de algo que hice hace varios años atrás, para ser más exacto
en el 2001.
Tengo pensado agregar otras clases simples para el manejo de tiles y
mapas, CTile, CMap, etc.
Lo más probable que la biblioteca vaya evolucionando, de hecho la uso
para crear mis propios demos y videojuegos.
Como siempre el factor tiempo es un factor en contra, pero de a poco
iré trabajando en esto, que es una trabajo que realizo solo en mis
ratos libres.
La finalidad de la biblioteca, no es crear "LA" biblioteca o framework
para juegos 2D, tan solo es una forma de agrupar las tareas más
usadas, lo cual se ve beneficiado usando Clases y una estructura
ordenada, con el fin de que cuando queramos crear un nuevo proyecto,
no tengamos que reinventar la rueda, y solo usar las clases que nos
provee la biblioteca. Con lo cual ahorramos bastante tiempo y nos
centramos solo en la lógica del juego a crear.
De hecho la idea es hacerlo lo mas genérico posible, ya que si alguien
lo desea, utilizando la misma estructura y solo cambiando las clases
precisas podemos cambiar la biblioteca base, podría ser el caso de
usar Allegro.
Si quisiéramos usar Allegro solo deberíamos cambiar el código de
algunos métodos de algunas clases, como CVideo, CSound y CMusic, etc.
Lo importante es que la lógica del juego se mantenga intacta, y solo
modifiquemos las funciones dependientes de una biblioteca determinada.
Me falto comentar que ademas estoy haciendo uso de STL para todo el
manejo de estructuras de datos, es una biblioteca bastante potente y
el código queda bastante limpio y ordenado, y fácil de entender.
Bueno en eso me encuentro trabajando ahora, y espero tenerlo pronto
listo.
Saludos!
Sí, sería bueno, pero no podré hacerlo porque no cuento con un sistema
Windows ni en casa ni en el trabajo. Me resultaría demasiado difícil
crear
binarios.
Quienes quieran contribuir en esta tarea son bienvenidos, para
crear una versión ".exe" de asteroids creo que se puede utilizar
un módulo llamado py2exe ...
Saludos.
He creado un binario de asteroids para windows, solo hubo detalle que
tuve que cambiar, ya que la fuente por defecto no era reconocida.
En el archivo panel.py en la línea que crea una fuente:
font = pygame.font.Font(None, 22)
la cambie por:
font = pygame.font.Font("freesansbold.ttf", 14)
y agregue al directorio el archivo freesansbold.ttf (que es la fuente
que utiliza por defecto pygame) y de esta forma funciona
perfectamente.
Del siguiente enlace pueden descargar la versión para windows
(Generado y Testeado en Windows XP)
http://www2.netexplora.com/rcaf/binarios/asteroids_win.zip (2.29 Mb)
Saludos!
Muchas gracias RCAF, ya estoy descargando el programa.
Saludos.
--
Hugo Ruscitti
www.losersjuegos.com.ar