Estos artículos son parte de la serie:
- Haciendo CuteGodChigüire: Comenzando el proyecto y aprendiendo Python
- Haciendo CuteGodChigüire: Dibujando el mapa completo y desarrollando el algoritmo de sombreado
- Haciendo CuteGodChigüire: Implementado el selector del terreno
- Haciendo CuteGodChigüire: Interpolaciones de variables
Haciendo CuteGodChigüire es una nueva serie en este blog cuyo objetivo es hacer una crónica del desarrollo del prototipo de CuteGod, un reto propuesto por el blog Lost Garden. La idea, por una parte, es hacer un diario de desarrollo del juego. No se trata de hacer un tutorial, puesto que en este momento yo soy el que aprende y quiero dejar notas de lo que estoy haciendo. Por otra parte, creo que publicando partes de esto me puedo obligar a mí mismo a terminarlo, o al menos dejarlo decentemente implementado.
En la primera revisión me decidí por un lenguaje (Python), una librería de juegos (PyGame), y logré mostrar un PNG con canal alpha en la pantalla.
Comenzando el proyecto y aprendiendo Python
Desde hace algún tiempo tenía la curiosidad de utilizar Python para algo serio. No ha sido la primera vez que tengo contacto con este lenguaje, pero hasta ahora había hecho cosas muy simples y muy específicas. ¿Por qué Python a pesar de que algunas personas insisten que use Ruby? No lo sé, capricho quizás. En algún momento dije que era agnóstico de los lenguajes, así que Ruby en algún momento tendrá su oportunidad. Evangelizadores del mundo, ¡tranquilizaos!
Una vez escogido un lenguaje lo segundo era escoger una librería. Aunque ya conozco Allegro, decidí mejor irme por PyGame por la curiosidad que me dio leer de la relación de PyGame con la OLPC, y porque la librería sobre la que está basada, Simple Direct Layer, tiene mucha fama, siendo la librería sobre la cual la extinta Loki hizo el port de varios juegos.
Los tutoriales de la página de PyGame me están ayudando a aprender la utilización de la librería. Los tutoriales incluyen unos ejemplos muy buenos que ilustran los puntos básicos de la librería. PyGame ofrece rutinas de bajo nivel para la elaboración de juegos, justo como Allegro. El binding de Python permite obtener lo máximo posible de SDL combinado con el poder de expresión de un lenguaje de alto nivel, por lo que casi todas las funciones retornan algún objeto que puede ser aprovechado por otra función. El colector de basura de Python además permite escribir ciertas funciones sin preocupación de hacer alguna fuga de memoria por algún lado.
¿Qúe ha habido de bueno?
Los conceptos básicos de PyGame se pueden entender muy fácilmente. La cantidad de líneas requeridas para hacer algo realmente se reducen con respecto a C, por lo que hacer un prototipo en un tiempo razonablemente corto sería una posibilidad. Hasta ahora sobre lo que he leído más ha sido en materia de gráficos. PyGame ofrece superficies (Surface) donde se pueden dibujar imágenes. Para PyGame, la ventana es una superficie más, y la carga de imágenes retorna una superficie, que puede ser dibujada en la ventana. Pueden revisar lo que he hecho hasta ahora bajando el archivo que está al final de este artículo. Podrán ver bastante código de más, pero eso se debe a que ya estoy haciendo las partes que permitirán a CuteGodChigüire ser un juego de veras, y no un ejemplo sencillo de cómo dibujar un PNG.
¿Cuales han sido las complicaciones hasta ahora?
Python no es un lenguaje que maneje expertamente. El intérprete incluido en IDLE (la ventana de comandos gráfica de Python para Windows) para algunos errores no ofrece mucha información. Ejecutando uno de los archivos de ejemplo, stars.py
, me daba un error de indentación, que tuve que resolver abriendo un editor de archivos que efectivamente me mostrara qué es tabulador y qué es espacio. El editor de Python ciertamente puede recibir un poco de amor en próximas versiones. Además, el intérprete no perdona los paréntesis no balanceados: no dice la línea donde posiblemente puede estar el error, lo que obliga a buscar línea por línea y, en casos extremos, tomar lápiz y papel y ponerse a contar paréntesis.
Por otra parte, los ejemplos actuales de Python no toman en consideración que algunos gráficos ya pueden llevar canal alpha para hacer transparencia por pixel, como es el caso del paquete de gráficos de Danc. Es necesario emplear algunas funciones distintas para terminar de cargar las imágenes, pues el código de estos tutoriales (en particular, load_image()
en mi código) termina dibujando la imagen con un hermoso fondo negro debajo.
CuteGod.py
En mi código ya definí una jerarquía de clases que comienza a representar lo básico de las reglas de CuteGod (refiérase a la propuesta de Lost Garden para mayor información). Tile representa un bloque de tierra que puede ser movido. El mundo de CuteGodChigüire está representado por el objeto World, y contiene un arreglo unidimensional, de tamaño anchura * profundidad, donde cada posición tiene un arreglo que contiene de 0 a altura objetos de tipo Tile. World contiene además una variable que indica la orientación de la cámara, pues será necesario rotar el mundo para observar terrenos que estén ocultos por otros. Escribí también un generador de terrenos para evitar posteriormente tener que crear mundos a mano.
El programa en sí dibuja solamente el tile que está en la posición (0, 0, 0) del mundo. La posición en la que lo dibuja es arbitrario, y por ahora sólo representa mi mayor triunfo sobre PyGame, que es dibujar un sprite con canal alpha.
Eso es todo lo que tengo que reportar por ahora. En posteriores artículos seguiré expandiendo el juego.
Archivos
- CuteGodChiguire: Revision 0: Un simple sprite [ZIP, 12KB] Licenciado bajo la WTFPL.
error de indentación… puahhjjj…
jejeje… en serio, python es bastante maduro, eso es una gran ventaja, hay cientos de librerías muy útiles, como pygames por supesto…
si hasta se parece a ruby jajajaja
saludos!