domingo, 24 de mayo de 2015

Aprendiendo a crear videojuegos

Cuando hace unos años tuve la oportunidad de dar un deseado salto a la docencia lo hice con la firme convicción de que uno de los retos de cualquier profesor es motivar a sus alumnos, así que decidí buscar, crear y usar los materiales mas motivadores para empezar mi andadura con una pequeña ventaja. Siempre he pensado que cualquier actividad relacionada con los videojuegos puede ser muy motivadora (crecer en los 80 sin duda deja huella) y para unos adolescentes de 15 años crecer, trabajar, organizar y coordinarse llevando a cabo un proyecto para crear un videojuego puede ser la diferencia entre una tediosa clase y una participación real y creativa.
Hace tan solo unos meses tuve la inmensa satisfacción de leer el blog de Miguel Ángel García. Miguel Ángel ya ha llevado a la practica diversos trabajos con sus alumnos relacionados con la creación de videojuegos. Siguiendo un poco su fantástico trabajo, finalmente me animé a poner en marcha una pequeña experiencia. Lejos de querer emular su colosal trabajo preparé, utilizando Game Maker Studio, un reducido juego de plataformas a modo de plantilla para que los alumnos, en grupos de entre 2 y 5 miembros, trabajara con él.
Cada grupo debe constituirse en un pequeño estudio "indie" decidiendo y documentando este paso. Una vez realizados los tramites iniciales pasan a centrar su trabajo en el producto: el videojuego.
La tarea previa para que cada miembro del grupo se ponga a trabajar es decidir una temática y una historia en la que basarse para recrear la  ambientación de cada juego.
La plantilla se basa en una serie de sprites, backgrounds, tiles, música y sonidos que deben ser modificados y ampliados según esa ambientación. El punto final lo pone el derroche de creatividad necesario para diseñar los increíbles niveles de que constará el juego.
A pesar de que las sesiones iniciales podrían haber supuesto un desánimo para ellos, fueron superadas sin ningún problema y ya se encuentran todos trabajando en sus proyectos : planetas volcánicos, historias de campesinos, magos contra el mal, huevos aventureros, piratas sanguinarios, héroes de ciudad, ...

domingo, 23 de octubre de 2011

El conjunto de Mandelbrot

Selecciona un área con el ratón para ampliarla (click & drag).


Corria el año 1985 cuando cayo en mis manos un ejemplar de Scientific American de ese mismo año. En el, un excelente artículo de A.K. Dewdney me introducia por primera vez en el mundo de los fractales y en especial al conjunto de Mandelbrot. A pesar a la ingente candidad de horas que tuve ‘hechando humo’ a mi pobre Commodore 64 apenas pude visualizar unas toscas imágenes de algún rincon de ese precioso fractal . Este recibe el nombre de Benoit Mandelbrot, matemático que trabajo en los laboratorios de IBM. En realidad se considera el padre de los fractales a Gaston Julia, pero fue Mandelbrot quien puedo hacerlos famosos y accesibles gracias a la aparición de los ordenadores. Podemos decir que un fractal es un objeto semigeométrico cuya estructura básica se repite a diferentes escalas aunque no de manera exacta, sino irregular o fragmentada.

El conjunto de Mandelbrot es un subconjunto de los números complejos que cumple una determinada propiedad. Podemos situar los números complejos en un plano. El plano complejo esta formado por pares de números, el primero real y el segundo imaginario. En la imagen podemos ver un esquema con el resumen de las operaciones entre número complejos que utilizaremos.

Sabemos que un número pertenece al conjunto si el límite de aplicar repetidamente una determinada función sobre el no tiende al infinito. En realidad lo que vamos a hacer es aplicar la función un número finito de veces y ver que 2 situaciones podemos encontrarnos. En el momento que la distancia al centro del plano complejo del resultado sea igual o mayor que 2 podemos concluir que ese punto no pertenece al conjunto, pues ese es el punto de inflexión a partir del cual crecerá hacia el infinito. Si una vez alcanzado el límite de iteraciones su distancia al centro no excede de 2, podemos considerar que pertenece al conjunto.

La función utilizada para determinar si un número pertenece al conjunto es la de la imagen. Inicialmente consideramos z igual a 0 y c, es el número complejo del que estamos calculando su pertenencia al conjunto. Para comprobar la distancia del resultado al centro del plano obviaremos la raiz cuadrada y compararemos con 4, asi nos ahorramos un operación.

Como obtenemos esos magníficos dibujos ? Basta con calcular esta función para cada uno de los puntos en nuestra imagen. A la salida del bucle por alguno de los 2 motivos indicados arriba, coloreamos el punto correspondiente en la imagen según el el número de iteraciones necesarias para salir del bucle y su correspondencia con el color definido.

Os dejo una versión distinta del algoritmo realizada en LISP (Mandelbrot-LISP), aunque sin todas las funcionalidades de la versión flash. Hay que definir el area fijando las variables y la salida es por pantalla en modo caracter.


domingo, 9 de octubre de 2011

Introducción

Compartir los algoritmos y curiosidades informáticas por los que he sentido un interés especial o han ocupado un lugar destacado en mi carrera es el objetivo del presente blog. Algunos de estos trabajos se remontan al inicio de mis primeros programas con el Commodore 64. Trabajos que a pesar del tiempo transcurrido continúan estando tan vigentes y actuales como lo está el fractal del conjunto de Mandelbrot, objeto de mi primer post. He tomado la decisión de utilizar algunos lenguajes de programación en los que ofrecer alguna versión,siempre que me sea posible, de los algoritmos comentados. De entre todos los que he conocido y utilizado mi decisión se ha decantado por el LISP, a mi entender uno de los lenguajes más potentes y que es más asequible desde el punto de vista docente y el AS3 (flash) para crear alguna versión online de los programas. De entre todas las versiones de Common Lisp finalmente he escogido la versión Express de Allegro Lisp. Mi selección se ha basado principalmente porque ofrece un potente entorno de programación que no precisa de conocimientos tan expertos en informática para su puesta en marcha como otras versiones que he analizado.