6 de Julio, 2014

Zooooop!

Ayer publiqué Zooooop!, mi juego de Junio para one game a month.

Se trata de un juego tipo match-3 (la mecánica básica es agrupar tres piezas o más del mismo color), en el tenemos el clásico tablero continuo en el que podemos hacer click y desplazar una fila (o columna) para hacer los grupos, que una vez hechos desaparecen dejando huecos que se rellenan con piezas que caen desde la parte superior de la pantalla.

La pantalla de juego

Es un juego sencillo y no muy excitante, pero ha sido ideal para probar nuevas herramientas, en este caso SFML (el juego lo he hecho en C++).

Hacía años que no programaba nada en C++ y estoy intentando refrescar conocimientos y volver a aprender el lenguaje con todas las novedades que han ido apareciendo desde que hiciera un par de aplicaciones a finales de los 90.

Por una parte no me ha disgustado trabajar con el lenguaje (imagino que después de programar en Javascript, C++ no es tan malo :D), sobretodo tirando de STL (std::vector principalmente), y no me ha costado demasiado montar una estructura escenas/estados como la que suelo montar en Python. Por otra parte es cierto que el ciclo programa → compila → ejecuta es más lento, y algunos errores son más complicados de corregir (menos mal que tengo gdb).

En cuanto a SFML, estoy todavía bastante verde, pero más o menos lo que voy pillando me parece bastante bien diseñado. Proporciona un nivel de abstracción sobre OpenGL que me ha gustado mucho (por ejemplo, usar su clase View es más sencillo que trabajar directamente con glViewport). Para juegos eminentemente 2D me parece una buena elección; para temas 3D en los que desarrollemos nuestro propio motor, creo que también.

Empecé con el juego bastante tarde, con lo que habrán sido unos 10 días (y solo unos ratos en esos días, recordemos que esto no es a tiempo completo :P), y lo que más problemas me ha causado han sido las decisiones de desarrollo de la propia librería.

Por ejemplo: la versión que hay para bajar en la web como estable es la 2.1 (publicada hace cosa de un año), y tiene un par de bugs que han resultado muy graves en mi projecto (uno de ellos relacionado con la gestión del ratón en windows); con lo que he tenido que usar el código del repositorio y compilar mi propia versión.

SFML trabaja con cmake, y la verdad es que ha sido bastante lioso para hacer cross-compiling en Linux para Windows; especialmente porque he tenído que aprender muchas cosas en poco tiempo (difrentes versiones de compilador introducen diferencias en el ABI y las librerías no enlazan, MingGW tiene dos gestores diferentes para las excepciones y resulta que Fedora usa el otro, etc).

Al final he conseguido generar el binario perfecto para Windows, que ejecuta en Wine y en un Windows de verdad también ;). Porque resulta irónico que desarrollando en Linux sea más sencillo distribuir tu juego con SFML para Windows que para tu sistema de desarollo. ¿Por qué? Por las dependencias.

El juego para Windows son unos 1.1 MB comprimidos que incluyen el juego, datos y un par de DLL (que puedo distribuir, son Open Source), pero conseguir el mismo efecto en Linux es bastante más complicado si no quieres recurrir a empaquetar para cada distribución (eso si distribuyen SFML 2.1, que es bastante reciente). Así que para mi es bastante más fácil ahora mismo compilar binarios para Windows que empaquetar para Ubuntu desde Fedora :(.

Es curioso que siendo la distribución uno de los puntos más criticados de Python me resultó bastante fácil empaquetar Grid Runners para Linux, Windows y Mac (¡y no tengo un Mac!), que por ahora distribuir Zooooop!.

Tampoco es que sea un problema. Aparte de que nadie va a jugar al juego, según las estadísticas de mi página en GameJolt, Mac es una minoría, y Linux... casi inexistente :(.

Me ha gustado SFML, y creo que volveré a repetir en el futuro. Por una vez ha sido genial no tener problemas de rendimiento (¡qué rápido y suave va todo!), tras trabajar tan duro para ser lo suficientemente rápido en mis proyectos usando Python o Javascript.

Actualización: he publicado paquetes para Ubuntu 14.04 en la página del juego. Además he hecho un backport de SFML 2.1 a Precise, que se puede bajar desde este PPA (que mi madre todavía usa Precise :P).

Anotación por Juan J. Martínez, clasificada en: 1gam, programming, sfml, cpp.

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: