Haciendo CuteGodChigüire: Dibujando el mapa completo y desarrollando el algoritmo de sombreado

Este artículo es la parte 2 de 4 de la serie Haciendo CuteGodChiguire: desarrollando un prototipo

Estos artículos son parte de la serie:

Entre el lunes y hoy CuteGodChigüire ha crecido una barbaridad en código. De ser un programa que muestra un solo bloque, ahora es un programa que muestra un terreno completo, con posibilidades de scroll (en posibilidades solamente, porque el programa todavía no es interactivo) y un sistema de sombreado del terreno. A continuación un screenshot del estado actual del programa, y luego una explicación de qué se implementó.

CuteGodChiguire: Revisión 1

Para los que se están enterando hasta ahora de este blog, Haciendo CuteGodChigüire es una serie que registra el progreso de un reto propuesto por Danc, de Lost Garden, para hacer el prototipo de un juego tipo God utilizando una serie de imágenes que él proporciona. Un ejemplo de juego tipo God es Populous, donde controlas directamente las condiciones de un mundo para que sus habitantes vivan bien. En este caso Danc proporcionó también un diseño de juego que él considera divertido implementar. Como pueden ver en el screenshot, actualmente ya es posible mostrar un terreno en su totalidad. Al final del artículo pueden bajar el código fuente, escrito en Python con la librería PyGame, con el que podrán ver que cada vez que se ejecuta el juego se genera un terreno nuevo.

Este post está escrito para aquellos que quieran saber más de cómo se va programando un prototipo. Casi podríamos llamarlo un Reality Show, pero aquí no se bota a nadie. Tampoco canto ni bailo. Sólo programo. El post podría tener un porcentaje bastante alto de información técnica.

Scrolling

Para ir acomodando el scrolling que se va a hacer el terreno, preparé una nueva clase llamada WorldScrollView. WorldScrollView contiene una superficie sobre la cual se va a dibujar el mundo (representado por la clase World). Al controlar el tamaño de esta superficie podemos dibujar el terreno con la seguridad de no dibujar sobre otras zonas de la pantalla que vamos a utilizar (como la lista de oraciones). A esta clase también se le agregó una variable para poder mover el terreno, y así lograr el scroll que permita ver más terreno.

Algoritmo de sombreado

Lo primero que alguien en el reto notó cuando hizo una primera implementación del terreno es que es muy difícil apreciar las diferencias de alturas entre espacio y espacio. Esto se debe a la particular perspectiva escogida por Danc para realizar los juegos. Alguien incluso propuso que esta perspectiva estaba inherentemente errada. La solución propuesta entonces fue sacar sombreados para los bloques, los cuales se aplican en base a una serie de reglas relativamente simples. Digo relativo porque depende mucho de cómo se programen. La implementación en ActionScript que en Lost Garden alguien muy generosamente puso trata el sombreado con una función que tiene más de 70 líneas. En mi muy mal escrito Python logré hacer esto mismo con 4 funciones que totalizan 35 líneas.

La diferencia está en que yo apliqué programación funcional para detectar las sombras. Este será el tipo de programación que en general aplicaré para las cosas que tenga que hacer sobre todo el terreno, pues esta técnica es ideal para cuando hay que aplicar una misma serie de operaciones para una lista. No es casualidad, pues, que en la clase World el terreno esté hecho con una lista unidimensional.

Para mayor información refiérete a las funciones updateShadows, getTileHeight, getCorner, y detectShadows. Lo que hago es para cada espacio averiguar su altura y la altura de todos los espacios adyacentes, y luego en una lista voy insertando la lista de sombras que aplicaré para el bloque.

Conclusión

Ahorita queda por hacer la interacción por el mouse, que será lo que haré a continuación. La idea es poder comenzar a mover bloques de un lado a otro, para luego poder hacer la detección de las oraciones.

Archivos

Navegar la seriePost anterior en la seriePróximo post en la serie

2 comentarios en «Haciendo CuteGodChigüire: Dibujando el mapa completo y desarrollando el algoritmo de sombreado»

Responder a CiroCancelar respuesta