Nuestro desarrollador invitado Ludipe continúa su relato sobre el desarrollo de Simplicity, un sencillo juego de puzles que se cruzó en su camino vía el reto Ludum Dare October Challenge, que anima a llevar un juego a un mercado y ganar 1 dólar en el plazo de un mes. Basado en la mecánica de pulsar botones para hacer cambiar su color y el de sus alrededores, y con la condición de victoria de colorearlos todos de verde, Simplicity presenta niveles de como máximo 25 botones, de forma que hay un total de 2^25 = 33,554,432 posibles estrategias por nivel… Ludipe como buen matemático, se había quedado pegado al MatLab, comprobando posibilidades y soluciones para su programa todavía en desarrollo. Las decisiones y el proceso que siguió son el tema de hoy.
«2^25». Entiendo que la cifra puede asustar un poco, pero hice la prueba y con un script en Matlab podía comprobarlas todas por fuerza bruta para hallar la que era solución, y todo eso en un tiempo más que aceptable. La segunda forma en la que probé la existencia de solución es bastante más larga y técnica, hace uso de teoría de grupos y álgebra lineal. Mientras iba haciendo esto trabajaba de manera paralela en el juego donde, por lo general, seguía sentándome delante de cada nivel el tiempo necesario hasta que conseguía completarlo. También empecé a buscar un compositor, pensaba hacer el juego por mi cuenta pero quería hacer cierto énfasis en la música y yo no estaba preparado para la tarea. Empecé a hablar con un par de personas que al final me dejaron tirado y fue un amigo el que terminó haciéndose cargo.
Los días pasaban, yo iba compaginando hacer niveles con otros detalles en los que uno nunca piensa cuando sueña con hacer un juego —cómo qué clase de interfaz va a tener, qué detalles vas a añadir para darle cierto feedback al usuario por sus acciones, cómo vas a explicar las reglas que rigen el juego, etc—. Recuerdo replantear el menú principal muchas veces, y al final me decanté por seguir con la estética minimalista e intentar que en el juego hubiera cuanto menos texto mejor. Un asunto que me trajo mucho de cabeza era la interacción con el juego, ¿se deberían meter sonidos cada vez que el usuario tocase la pantalla? Es algo muy habitual para que el jugador sienta que está interaccionando, pero en mi caso me parecía que interfería demasiado con la música y que no era necesario.
Los últimos días de octubre fueron de muchísimo estrés, sin embargo llegaba el momento de ultimar los detalles. Simplicity es un juego basado en HTML5, vamos, lo subes a un servidor (Dropbox incluido) y cualquier usuario puede jugar desde el navegador. Para subirlo al mercado de aplicaciones de Android necesitamos un archivo de instalación nativo (.apk). Hay algunos servicios gratuitos que te permiten generar un instalador a partir de un juego en HTML5. Yo elegí usar la tecnología CocoonJS de Ludei. Me parece una opción genial, puedes desarrollar un juego para que la gente juegue desde el navegador y luego es relativamente sencillo pasarlo a Android, no es como otras veces que tienes que estar buscando librerías del framework que usas para hacer un port. Y lo más importante, funciona bien. Yo no he tenido ningún problema de rendimiento y no he observado nada raro a la hora de reproducir música o mostrar gráficos (esto no quiere decir que sea perfecta, que seguro que sus bugs tiene). Al iniciar tu juego el logotipo de Ludei aparece unos segundos en pantalla, creo que es un precio muy pequeño si lo comparas con lo que te ofrecen ellos.
Una vez que usas el compilador obtienes dos archivos .apk, uno para que el desarrollador haga sus pruebas y otro para subirlo a Google Play. Si intentas publicar el segundo sólo obtendrás un error, esto se debe a que hay que firmar cada aplicación, vamos, ponerle un sello para que quede registrado quien la ha desarrollado. Este proceso se hace mediante la línea de comandos de Windows, Java y el SDK de Android. Insertas los datos de tu cuenta de desarrollador de Google y obtienes una clave que hay que guardar como oro en paño, por si quieres actualizar tu aplicación en algún momento.
Con todo listo toca subir el instalador y rellenar unos cuantos formularios: descripción (en los idiomas que te interese), precio, tipo de contenido, imágenes, vídeos, etc. Está todo muy bien presentado y no creo que nadie tenga ningún problema. Cuando Google revisa los datos la aplicación se publica y …¡tachán! tu aplicación está disponible para todos. ¡Ojo! Una anotación para los novatos como yo, se tardan un par de horas (depende del momento) en que las actualizaciones, ya sean de la descripción o de la aplicación en sí, aparezcan en Google Play; ergo hay que revisar todo dos veces antes de enviarlo.
A continuación, ya con tu juego funcionando en Android, tienes que usar las herramientas para desarrolladores de Google para asociar el fichero de instalación al correspondiente autor, lo cual es totalmente necesario para aparecer en la Play Store. Tienes que descargar el SDK e introducir un par de comandos en la terminal, que por lo general no debería costar mucho; yo tuve el típico problema de: «si resulta que tienes la versión X de java y el SDK de Android está actualizado… ERROR.» Todo se resuelve si instalas una versión más antigua, eso sí. Me llevó un rato y unas cuantas búsquedas en Google pero conseguí resolverlo.
Hubo dos decisiones importantes que tuve que tomar prácticamente en las últimas horas y de correprisas, una fue el título del juego (que deja mucho que desear). La otra fue cómo sacar dinero (recuerdo que una de las condiciones del reto era ganar al menos 1$). Siempre he estado en contra de los anuncios y tampoco me gusta lo de descargarte una aplicación gratuita y que luego te quieran vender algo, así que la única opción que quedaba era hacerla de pago. La puse a 69 céntimos de euro, que a mí me parece un precio razonable, pero ya sabemos cómo funciona eso de pagar por algo en España, que no nos entusiasma. No os engañéis, hasta a la mayoría de vuestros amigos les costará soltar 69 céntimos.
Publiqué el juego al límite del plazo establecido y al día siguiente me desperté como si fuera navidad, sólo que en lugar de ir corriendo a ver si los regalos estaban bajo el árbol yo encendí mi tablet nada más levantarme para comprobar que la aplicación aparecía en la Play Store.
Simplicity tiene unos cuantos bugs y algunas cosas bastante básicas aún por incorporar, como que avance automáticamente de nivel cuando completas uno. Me queda actualizar el juego con estas mejoras, si mi horario me lo permite será esta semana; pero dentro dentro de lo que cabe estoy contento con el resultado final. Cuando he terminado otros proyectos no he soportado verlos hasta que ha pasado un tiempo, sólo veo defectos por todos lados y los aborrezco. Con Simplicity hay veces que lo abro para comprobar algún bug y termino jugando y pasándolo bien casi sin darme cuenta.
Sin duda ha sido una gran experiencia que me ha permitido mejorar mucho como desarrollador y en cierto modo a nivel personal también. Quiero animar a todo aquel que lea esto a participar en la próxima Ludum Dare, trabajar duro y dar lo mejor de sí mismo. Completar este tipo de retos personales es algo que cuesta explicar con palabras. Simplicity me llevó un mes entero, empleando como mínimo una hora al día (los días que estaba más agobiado) y ha recaudado unos 20€. Una cantidad minúscula, pero soy de los que hace estas cosas totalmente por gusto, de hecho la aplicación actualmente es gratuita y sin ningún tipo de publicidad.
Más sobre Luis Díaz en Twitter, o prueben Simplicity.