@ agnasg

agnasg


¿Cómo se hizo tilemovers?

15-01-2021 3:04 PM

¿Por qué hacerlo fácil si lo podemos hacer difícil?
— típico programador sabelotodo

Sinópsis

tilemovers es un juego de sliding tiles (¡baldosas deslizantes!) donde el objetivo es mover un tile de la posición inicial a la final. Este tipo de juegos es como los “3 Chiflados”: el 50% de la gente los ama, y el 50% de la gente los odia. Para colmo, le he agregado 3 niveles: “Normal”, “Nightmare” y “Apocalypse”. Es decir, fácil, difícil y superdifícil. Pero para el que conoce este tipo de juegos debería ser divertido.

La diferencia con los otros 1000’s juegos similares es que los tiles vienen en 4 tamaños: 1×1, 1×2, 1×3 y el endiablado 2×2. La página oficial para descargar el juego es https://agnasg.itch.io/tilemovers, también hay un video (no apto para cardiacos) https://www.youtube.com/watch?v=wbcf3ICA2es.

El devlog en español está aquí https://www.micronosis.com/category/tilemovers/ y en inglés en tigsource https://forums.tigsource.com/index.php?topic=71419.0. Lo pueden jugar en windows (https://agnasg.itch.io/tilemovers) o en Android (https://play.google.com/store/apps/details…).

Módulos

tilemoves se puede descomponer en 4 módulos:

  • El sistema gráfico implementado en SDL2
  • La lógica del juego que implementa los movimientos de los tiles, sus tipos y los comandos que los gobiernan.
  • El módulo de bases de datos que usa una bd SQLite para almacenar y cargar la información del juego.
  • Un editor que permite crear los puzzles y los almacena en la base de datos.

En este post vamos a hablar de este último módulo, el editor de puzzles. Cuando entendí la necesidad de tener una herramienta para agregar, quitar, cambiar el tipo de tile, y guardar los cambios, me propuse los siguientes objetivos:

  • Facil de usar, es decir agregar y borrar los tiles debe ser rápido y fácil.
  • Fácil de cambiar el tipo de tile (estático, rápido, angel y humano)
  • Integrado al juego para repetir el ciclo de probar, cambiar, probar rápidamente.
  • Debe ser fácil de implementar

Para cumplir con todos estos requerimientos es invevitable que el panel de control quede congestionado sobretodo porque mi objetivo es que funcionara integrado al juego. Estuve viendo algunas ideas de cómo hacer el gui, incluyendo paneles como este:

DeadImgui Example

Para lo cual tendría que utilizar una tercera librería (ya el juego está usando SDL2 y SQLite) y eso no es bueno, al menos para este proyecto. Estoy pensando en planificar el estudio para analizar el posible uso de DearImgui para los gui de los siguientes juegos incluyendo el próximo juego (memory + arcade + platform, todavía sin nombre) y para khpx, pero no para tilemovers porque eso iba a agregarle más tiempo al ya abultado proyecto.

Por eso simplifiqué todo y me quedé con un panel incrustado con todos los botones:

La primera línea son operaciones con los tiles: intercambiar posición, cambiar su estatus, agregar nuevo tile, eliminar tile. Luego botones para guardar cambios, guardar como un nuevo puzzle, opciones para generar un puzzle en forma aleatoria (cuando estaba sin mucha inspiración). También opción para cambiar de nivel cuando su nivel de dificultad no era apropiado para su nivel actual. Finalmente botones para asignar el tipo de tile: faster (se mueve en todas direcciones), static (no se mueve), angel (se mueve verticalmente, human (se mueve horizontalmente).

Las operaciones de agregar y borrar tile se ven mejor en video:

Conclusión

No llevé contabilidad de cuánto tiempo le dediqué al editor específicamente, pero a grosso modo fue cercano a un mes (lo cual podríamos traducir en 24-30 horas, que es lo que yo le dedicaba mensualmente a este proyecto). En comparación al total de tiempo empleado podría decir que el editor ocupó un 20% del tiempo del proyecto. Creo que es el tiempo mejor empleado en todo el proyecto.