19 de marzo, 2015
Jugando a programar

En 2013 recibí un paquete que aguardaba con ilusión. Una caja negra y alargada en cuya parte superior se leía OUYA. La famosa consola Android abierta a cualquier desarrollador que tanto daba que hablar y tantas discusiones trajo. Parece que ya nadie se acuerda de ella pasados poco más de dos años. Entre las opciones del menú principal de esta consola se puede leer la palabra «MAKE» y cualquiera pensaría que detrás de ella se esconden toneladas de información útil sobre cómo desarrollar juegos. No exactamente.

Cuando pulsé la opción «MAKE», la OUYA me condujo a la página web de su portal de desarrolladores, en el que no había mucha información útil para principiantes. Algo que me desagradó, ya que parecía una idea brillante, pero muy mal ejecutada. Cualquier niño o niña que quisiera aprender a hacer juegos sin duda pulsaría ahí. Pero no servirá de mucho. Se encontrarían con un muro impenetrable, el mismo que me encontré yo hace muchos años: Querer hacer algo y no saber ni por dónde empezar. Lo cierto es que la consola ha mejorado bastante durante todo este tiempo, y tras volverla a encender, he descubierto para mi sorpresa que, tras «MAKE», ahora se pueden encontrar varios video tutoriales sobre cómo instalar Android SDK, Unity 3D y publicar juegos, además de un port para OUYA del entorno de desarrollo AIDE (Android IDE) que permite programar y desarrollar juegos desde la propia consola. Sin embargo me da la impresión de que sigue haciéndose demasiado cuesta arriba, aún falta suavizar esa curva de aprendizaje para los más pequeños.

Dificultades para aprender a desarrollar videojuegos

Por supuesto mi pasión por el desarrollo de videojuegos viene de mucho más atrás. Recuerdo que cuando tenía unos 12 años mi padre me compró un libro sobre Visual Basic. Fue uno de los mejores regalos que he recibido nunca: porque lo necesitaba como el respirar y ni siquiera lo sabía. Hasta ese momento me daba cabezazos con el Visual Studio, no tenía ni pajolera idea de lo que estaba haciendo, lo único que hacía era crear ventanas y arrastrar botones de un lado a otro. Todo lo aprendí a base de ensayo y error, porque pese a complejo que pueda resultar un entorno de programación como Visual Studio, resulta que muchas de las opciones son bastante intuitivas. Sin embargo me faltaba lo más importante, esas pantallas no hacían nada. Sólo estaban. Me faltaba la programación para añadirle el corazón al robot de hojalata y que cobrara vida.

Había trasteado con el lenguaje BASIC en el Atari ST de mi padre desde muy pequeño. Es un lenguaje muy simple, muy básico, y gracias a ello no fue muy difícil entender cómo se ejecutaba una instrucción detrás de otra, como recoger teclas pulsadas, y decidir que hacer en función de ellas con la instrucción más importante de todas: IF – THEN. La elección de Visual Basic como plataforma creadora cuando llegó la era del PC y el Windows 95 fue obvia. Pero Visual Basic era distinto, mucho más complejo, más grande. Había objetos, formularios, propiedades, eventos… Ni idea de qué era todo eso. Por aquel entonces todas las respuestas aún no estaban en Internet como ahora, es más, Internet era una cosa abstracta y peligrosa reservada a los mayores. Así que ese libro, tosco y grande como ninguno que había leído antes (y nunca he sido muy de leer), resultaba ser la única forma de comenzar a rellenar los huecos, a relacionar unos conceptos con otros. Por supuesto, me costaba mucho comprender todo, el texto daba por sentado demasiado. Sin embargo, poco a poco conseguí entender qué era una subrutina, como aprovechar las ventajas de los bucles y los arrays, y aprendí a escribir el código más ineficiente y descuidado que se puede imaginar. Era un crío, y mi meta nunca fue programar, era hacer juegos. Pero pronto fui capaz de generar mis propios programas ejecutables en Windows y, sí, mis primeros videojuegos.

Como muchos ya sabéis, sin necesidad de leer mis batallitas, era muy complicado y hacía falta mucha fuerza de voluntad para aprender a programar y a hacer juegos en aquella época dorada que fueron los 90. Juegos como Warcraft: Orcs & Humans (Blizzard Entertainment, 1994) o Doom (id Software, 1993) además estaban a años luz de lo que cualquier hijo de vecino podía hacer con su ordenadorcito casero. Pero ahora estamos en el siglo veintitantos, tenemos toda la información del mundo accesible desde dispositivos que caben en la palma de la mano, disponemos de motores gráficos gratuitos que facilitan todas las tareas complicadas, hoy en día es muy fácil aprender a hacer juegos, ¿no? Desgraciadamente no, al menos no como desearía.

Bien es cierto que hay movimiento a favor de enseñar a niños a programar, a introducirles en el mundo del desarrollo de la forma más suave posible. Y de eso es de lo que he venido hoy a hablar en realidad, porque parte de ese afán se ve desempeñado mediante los propios videojuegos, a menudo utilizados como vehículo para la enseñanza.

Juegos como instrumento educativo

Ya hemos hablado alguna vez de esto en indie-o-rama, y hemos citado a grandes diseñadores comentándolo. En general, se podría decir que hay tres formas principales de aprender. La primera es que alguien nos lo cuente: un profesor, un libro… ambos utilizan comunicación verbal para intentar que el interlocutor entienda cómo un sistema funciona. Esto es la forma clásica de enseñanza que se viene repitiendo desde que el ser humano comenzó a hablar, pero cuando el tema a tratar es muy complejo, puede ser difícil tanto para el que escucha, como para el que lo explica.

Otra manera es la visual. Ver ocurrir algo puede demostrar una secuencia de eventos: exponiendo sus causas y consecuencias. El cine y la televisión hacen uso de esta cualidad, pueden comunicar a la perfección acciones relacionadas y combinarse con la forma verbal para aumentar su efectividad.

La tercera forma es la más potente: la práctica y experimentación. De poco sirve que nos digan cómo hacer una suma si no practicamos suficiente para que se quede grabado en el cerebro. El ser humano necesita reconectar y fortalecer esas conexiones neuronales para agilizar la respuesta ante ciertas situaciones. Y aquí es donde los juegos son excepcionales. Los juegos proporcionan experimentación en un entorno seguro, permiten al jugador practicar con un sistema y descubrir sus límites, comprendiendo cómo sus elementos se interrelacionan. Es por eso que los animales juegan. Se persiguen y se atacan, practican la caza jugando. Los videojuegos, además de experimentación, pueden incluir métodos visuales y verbales. Son el instrumento de enseñanza definitivo. Todos los videojuegos enseñan algo, aunque en muchos casos puede ponerse en duda la utilidad de lo que enseñan, para avanzar en un juego siempre hay que aprender sus reglas y practicar con ellas hasta dominarlas. ¿Incluso el Pong? Sí, incluso el Pong.

Así que, ¿cómo se puede enseñar a programar juegos con un juego?

Juegos de programación

La principal habilidad de un programador es la del análisis: Descomponer un problema grande en problemas más pequeños que poder atajar uno a uno. Es una habilidad que se desarrolla durante toda la vida y se complementa con cualquier conocimiento que se tenga sobre la naturaleza del problema en cuestión. Y afortunadamente, todo videojuego la enseña en mayor o menor medida. En casi cualquier juego que se precie hay un objetivo que para llegar a él, el jugador tendrá que dar pequeños pasos. Averiguar cuales son esos pasos y desarrollar la destreza para realizarlos con éxito es la labor del jugador, y es lo que los hace divertidos. Juegos de estrategia, rol o simulación son muy buenos a la hora de poner al jugador a analizar sus sistemas incluso inconscientemente.

Pero también hay que saber cómo se estructura y funciona un programa. Cómo se diseña su funcionamiento línea a línea para obtener el resultado requerido. Para enseñar todo esto con un juego hay que tener las ideas muy claras. No es el caso de Code Combat, que se pierde en un abrumador metajuego repleto de características innecesarias y como distintos personajes, inventarios, etc. para enmascarar lo que viene a ser un simple juego de puzles bastante insípido. Y además, como es un juego para aprender a programar, ¡las instrucciones que ejecuta el personaje hay que escribirlas! Ni se acerca a la programación como es debido, ni es suficientemente interesante.

Algo similar a lo que le ocurre a Code Hero. Se trata de un FPS aún en desarrollo que nació de KickStarter con el objeto de enseñar a desarrollar juegos, mediante la llamada «Code Gun», que permite inyectar código en los objetos del juego. Tras haberse quedado sin fondos, probablemente debido a un exceso de ambición por parte de los desarrolladores, el proyecto sigue adelante mediante aportaciones voluntarias y cuenta con una Beta que se puede descargar desde su web. A pesar de su potencial, la versión actual dista mucho de estar lista siquiera para presentarse. Ahora mismo sólo cuenta con un extenso y aburrido tutorial de dos niveles en el que se enseña al jugador a modificar la posición y tamaño de objetos mediante un modo de edición y a ejecutar simples instrucciones sobre la consola como el clásico «Hello World». Es interesante que gracias al modo edición, se puede hacer trampa y saltarse alguno de los cansinos tutoriales simplemente moviendo bloques de escenario, característica probablemente no prevista, aunque muy útil. Sin embargo, el juego todavía carece de objetivos claros y le falta chispa: Un interminable tutorial no es la forma correcta de enseñar mediante juegos.

Otro ejemplo interesante es CodinGame, que propone una serie interminable de juegos y puzles que resolver programando, permitiendo al jugador escoger entre una gran variedad de lenguajes de programación. Si bien está orientado a usuarios con cierta experiencia en programación y muchos de los retos son bastante acertados en su concepción, quizá falla en la ejecución al necesitar de la entrada/salida estándar de estos lenguajes para realizar cualquier acción, un simple hack que arruina un muy bonito planteamiento para una interesante plataforma.

En un estilo similar de desafíos para programadores también podemos encontrar Elevator Saga. Se trata de un entretenido y recomendable juego cuyo objetivo es programar un sistema de ascensores para transportar el mayor número de pasajeros en el menor tiempo posible. Sencillo y bien diseñado, demuestra lo necesario que es leer y entender la documentación antes de nada. Al igual que en CodinGame, no es el leguaje de programación lo que se enseña, puesto que se asume un conocimiento previo (en este caso de JavaScript, nadie es perfecto), sino que se anima a crear código con un propósito en mente, optimizar, encontrar fallos y mejorar un programa ya existente, mediante retos de dificultad creciente.

Los ejemplos anteriores utilizan código para formar los puzles y requieren cierta comprensión en la materia. Así que, tal vez para enseñar programación a aquellos que carecen de experiencia previa haya que desembarazarse de todo código y lenguaje, y comenzar por utilizar un sistema de programación visual como Scratch. Mediante un interfaz gráfico en el que las instrucciones se acoplan unas a otras como si fueran piezas de Lego, permite crear bloques de código sencillos, atender a eventos en los distintos objetos, y generar programas sin la necesidad de aprender un lenguaje de programación ni lidiar con los complejos entornos de desarrollo profesional. El juego Code Spells, éxito de KickStarter aún en desarrollo, utiliza Blockly, un sistema de programación visual muy similar ideado a partir de Scratch, que permite alternar entre programación visual y código en JavaScript. Este juego proporcionará un entorno amigable donde practicar y jugar con la programación, en el que el jugador podrá programar nuevos hechizos para alterar el entorno, resolver puzles y luchar contra enemigos.

Utilizando Blockly también encontramos la plataforma online Code Studio, que plantea una serie de retos sencillos de programación para los más pequeños tales como crear el juego «Flappy Bird», o el juego de la película Frozen: Programa con Ana y Elsa, en el que se utilizan instrucciones para que Elsa dibuje líneas en el hielo mientras camina, lo que, en definitiva, resulta ser un acercamiento involuntario a los dibujos fractales y a la generación de contenido procedural.

El éxito de los sistemas de programación visual a la hora de demostrar el funcionamiento básico de la programación a los no iniciados, está fuera de dudas. Después de todo, los programadores echan mano a diagramas, dibujos y pseudocódigo cuando se ha diseñar el funcionamiento de un programa. Es el primer paso.

Por supuesto no todo es código en la programación. Hay que saber bien cómo diseñar un programa, cómo realizar los objetos que darán forma a la aplicación. Hack ‘n’ Slash (Double Fine Productions, 2014) es un buen ejemplo de juego con el que se puede aprender bastante acerca de la programación sin necesidad de escribir (ni colocar) una sola instrucción. En este juego, el protagonista tiene a su disposición un arma que permite conectarse a multitud de objetos y personajes, incluido el propio protagonista, para variar sus propiedades, su comportamiento y resolver puzles. Aunque pueda resultar confuso y abrumador en algunos momentos, permite aprender el funcionamiento básico de multitud de elementos de un videojuego, mediante la simple inspección y experimentación con el contenido ya existente del juego.

En ese mismo sentido se puede aprender muchísimo de cualquier juego que tenga un editor de niveles o herramientas para generar contenido, ya que ocultando lo más tosco del desarrollo de videojuegos, permiten echar un ojo debajo del capó para entender cómo se realizan muchos de los elementos del juego. Y yendo un paso más allá, encontramos juegos como WarioWare D.I.Y. (Nintendo, 2010), uno de mis favoritos. El propio juego es un motor de mini-juegos, que permite crear gráficos y animaciones, música, y programar de forma muy sencilla el comportamiento de los elementos de juego, conectando de una forma divertida y entretenida muchas de las piezas que se necesitan para entender la programación y el desarrollo de juegos.

Tras mucho buscar y probar no he encontrado el juego para enseñar a hacer juegos definitivo, ni siquiera he encontrado un entorno suficientemente bueno, de acuerdo a mis expectativas, para que niños puedan aprender e interesarse por la programación y el desarrollo de juegos. Por lo general, los juegos de programación son demasiado duros para los más principiantes, y demasiado sencillos para los programadores expertos. Tal vez algo como Blockly pudiera ser el punto de partida escondido tras esa opción «MAKE» que toda consola, ordenador, o dispositivo debería incluir de fábrica. O quizá englobar varios niveles de aproximación, empezando con algo como WarioWare D.I.Y, para pasar a un sistema de programación visual y finalmente a código. Quizá algún día se pueda satisfacer la curiosidad de los pequeños, sin la necesidad de un aburrido libraco de mil y pico páginas o un tutorial de cinco horas. Desde luego, la tecnología está ahí, sólo hay que dar el paso correcto y acertar con el diseño. Estamos muy cerca. No obstante, estoy seguro de que me he dejado por el camino muchísimos ejemplos interesantes, ¿alguna sugerencia?

Acerca de Enrique Hervás


Humano Nivel 32. Diseñador y Programador de videojuegos Nivel 6. De esos a los que sus padres prohibieron jugar a "las maquinitas" por estar demasiado enganchados. No sabían lo que les esperaba. Actualmente trabajo como Game Designer en Exient, e intento no olvidarme de mi pasado indie de Game Jams y jueguitos con Join2 Games

3 comentarios