25 de Marzo, 2013

(yet again) Falling Blocks

Este fin de semana he estado evaluando pyglet, pensando en usar esa librería en la inminente PyWeek. Aunque es cierto que ya le había echado un rato, creo que la descarté porque me encontré con demasiadas pegas demasiado pronto (especialmente con el sonido en Linux).

Al final fue un poco frustrante y me distraje con SDL, dejando de lado pyglet sin haber llegado ver si los problemas que me encontré fueron mala suerte o simplemente que el proyecto está menos maduro que PyGame.

La consecuencia de este fin de semana de hacking ha sido: (yet again) Falling Blocks (algo así como una vez más, bloques que caen, o ¿necesita el mundo otro juego tipo Tetris? :D). Para ser justos más que un Tetris se trata de un tributo a Columns, que mi primo tenía en su Sega Game Gear y al que eché bastantes partidas hace años.

El juego en acción
Intenté hacer gemas como en Columns, pero nada ;)

Es cierto que este tipo de juegos son fáciles de programar o, lo que es incluso más importante, se puede conseguir un aspecto aceptable incluso si tus capacidades artísticas son limitadas ;).

Ahora que he tenido un poco más de contacto con pyglet me ha gustado bastante, aunque sigue mostrando asperezas comparado con PyGame. El acceso a OpenGL en todo momento es una pasada, pero por ejemplo tener que activar el blending de OpenGL para que las transparencias de los sprites funcionen... es el tipo de detalles que te puedes encontrar y que te van a tener atascado un buen rato hasta que des con el detalle en la documentación (que debería haber leído completa, es cierto :P).

El sonido sigue siendo teniendo sus cosas, aunque con OpenAL y la próxima versión de AVbin la cosa mejora bastante (al parecer en pruebas anteriores estaba usando pulse como driver por defecto y no parece funcionar muy bien). Estoy trabajando con la versión 1.2 de pyglet, que es todavía alpha, y no he encontrado más que un par de cosillas que he podido arreglar (sobretodo en temas portabilidad cuando he intentado empaquetar el juego para Windows; ¡importante para la PyWeek!). Además esta versión incluye soporte para joysticks, que funciona de maravilla (el juego se puede controlar con un gamepad USB que tengo por aquí).

Creo que PyGame puede ser más accesible si sigues sus reglas y no vas a tocar nada de OpenGL, mientras que pyglet resulta más flexible y menos autoritario. En cuanto a portabilidad, PyGame es solo un poco mejor que pyglet (y las pegas van por el audio otra vez, recuerdo que muchas entradas de la PyWeek usaron mp3 en PyGame y la versión empaquetada en Fedora no incluye soporte para ese formato por tema patentes :S).

Así que creo que voy a usar pyglet. Aún tengo tiempo para leer la documentación y hacer algún experimento antes de que empiece la competición ;).

Actualización: he grabado una partida completa (no mi mejor partida :P, pero al menos deja ver cómo funciona el juego).

Anotación por Juan J. Martínez, clasificada en: python, programming, pyweek, pyglet.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: