Lilibeth’s Parade: un postmortem y una guía para juegos físicos

El pasado Global Game Jam 2017 fue un buen jam para mí y para Yole, con quien participé. Los game jams son una ocasión propicia para ensayar nuevas ideas, esto es algo fundamental en el evento, y nosotros lo aplicamos sobre el concepto propio del videojuego.


Revelando el tema del GGJ 2017

El tema del GGJ 2017 fue Waves (ondas) pero decidimos tomar otro significado de la palabra, el verbo saludar (to wave). Así, nos inspiramos en el icónico saludo de la Reina Isabel de Inglaterra como mecánica principal de juego. Dos jugadores deben saludar en una forma específica, compitiendo entre ellos.


La Reina de Inglaterra saluda

Habíamos establecido previo al inicio del evento que íbamos a hacer un juego con Arduinos y un Raspberry Pi. Esto es un cambio sustancial con respecto a años anteriores. Ya con Yole había hecho un juego de mesa y un videojuego. Anteriormente, fui colaborador en su proyecto final como estudiante que combinó fotografía, escultura y tecnología, usando ambas tecnologías. Pero en esta ocasión la idea implicaba usar estos componentes a una escala que no habíamos intentado antes.

Ya llevábamos entonces la idea al evento: no solamente reemplazar la entrada, el control, sino también la salida, la pantalla. Teníamos la idea de hacer un juego “autocontenido”, algo que pudiésemos mostrar como un modelo de cartón con partes movibles, que no mostrase partes de computadora obvias. No lo pudimos lograr del todo: el juego aún requiere una computadora con mayor capacidad que el Raspberry Pi, pero la idea está ahí y se puede abordar para otro proyecto.

Al finalizar el evento presentamos “Lilibeth’s Parade”, un juego electrónico para dos jugadores. En un modelo de cartón de la torre del palacio de Westminster están dos carros, y cada jugador debe saludar como la Reina de Inglaterra para avanzar su carro, ganando el primero que llegue a la torre. A continuación un video del primer gameplay, y aquí el repositorio en GitHub del código tal cual lo entregamos.


Demostración de Lilibeth’s Parade

Nuestro juego causó mucha curiosidad al finalizar el jam. Fuimos prácticamente el único equipo que utilizó una combinación de computación y electrónica, y muchas de las preguntas iban orientadas hacia esa parte.

Creo que esta reacción valida nuestra idea de que hay oportunidades para hacer juegos que no impliquen interactuar con una pantalla o con un control usual de videojuegos (teclado, mouse o controlador).

Por esto, en el resto del artículo estaré explicando a manera introductoria cómo funciona “Lilibeth’s Parade” y el proceso de cómo llegamos hasta este concepto.

Computación física para todos

Algunos de ustedes estarán leyendo los términos Arduino o Raspberry Pi por primera vez, o probablemente no le vean sentido en un blog de desarrollo de videojuegos. A continuación daré una introducción a la computación física, y explicar un poco de dónde viene todo esto. Si estás familiarizado con el campo, puedes saltar a la siguiente sección.

La computación física es un campo en el que la computación y la electrónica se reencuentran. A través de tableros electrónicos programables se pueden hacer prototipos de circuitos electrónicos muy rápidamente. El tablero se conecta a la computadora a través de un cable USB y se programa con lenguaje C. Los programas se escriben, se compilan, y se descargan al tablero. Después de haber descargado el código, el tablero se puede desconectar de la computadora y sólo requiere electricidad para funcionar.

Estos tableros consumen muy poca energía comparado con una computadora, pudiendo funcionar por horas con una batería de 9 voltios. Son dispositivos relativamente sencillos y limitados, por lo que no corren un sistema operativo completo, pero esto los hace funcionar muchísimo más rápido que una computadora.

Los tableros disponen de conexiones para componentes electrónicos, llamados pines. Se pueden conectar componentes electrónicos a estos pines, y el tablero tiene la capacidad de “leer” y “escribir” voltajes a estos pines. Al leer un valor de un pin, se convierte un impulso eléctrico a un número que el código puede entender y procesar. Al escribir un valor se puede operar sobre un componente electrónico, por ejemplo, encender una luz, mover un motor. Los valores pueden ser literalmente ceros y unos (o bajo y alto voltaje), o puede ser un valor análogo.

La gran ventaja que tienen los tableros electrónicos es que existen muchos componentes electrónicos que se pueden conectar y usar instantáneamente. Los más complejos, como pantallas, servos, luces, traen librerías que permiten usarlos muy fácilmente; usualmente con una llamada para inicializar el componente, y otra llamada para llevarlo a algún estado. Otros componentes traducen alguna condición del ambiente en impulsos eléctricos, como sensores de luz, de distancia, temperatura, sonido, humedad, lo que amplía el campo de lo que puede hacer una computadora. Existen otros componentes que permiten al tablero comunicarse con otros dispositivos, a través de una red con cables o inalámbrica o a través de transmisión de radio.

La computación física así permite usar cómputos para una variedad de campos: desde las artes hasta cosas más prácticas, como botánica, o proyectos de automatización casera. Siendo este un sitio de videojuegos, nos orientaremos a cómo aplicar computación física para esto, pero que quede claro que existe muchísima gente trabajando en computación física que no está haciendo videojuegos (agarra la pista: mira lo que están haciendo en otros campos).

A continuación explicaremos tres componentes que utilizamos durante el jam, lo que dará la base para explicar el funcionamiento del juego al final del artículo.

Arduino

Una marca reconocida de tableros es Arduino, y es casi el nombre genérico que se ha adoptado en la comunidad para los tableros. Su diseño es open source, y otros fabricantes han desarrollado tableros “compatibles con Arduino”, lo que te permite conectarlo y usarlo con la computadora casi de la misma manera. Existen muchos modelos, cada uno con formas y disposiciones de pines diferentes para necesidades diferentes. Algunos de ellos, como el Gemma de Adafruit, tienen forma de botón y están hechos para coserse en la ropa con un hilo conductor, combinando moda y electrónica.

Los tableros Arduino se conectan con la computadora a través de un cable USB. En la computadora instalas el ambiente de desarrollo de Arduino que tiene la capacidad de compilar el código que escribas y descargarlo al tablero. El cable también permite comunicarse con la computadora a través de la emulación de un puerto serial. Esto es necesario para que el Arduino pueda comunicarse con la computadora, y viceversa, aunque algunos tableros no tienen esta capacidad. Así, puedes hacer circuitos que lean algún dato del ambiente y lo puedan pasar a la computadora para un proceso más complejo.

Los tableros Arduino también cuentan con una gama amplia de accesorios que se suelen llamar shields (escudos). Los shields ofrecen funcionalidades al tablero que se complementan con una librería de código para hacerlos funcionar. Ejemplos: una pantalla con touch screen, conexión por cable ethernet, wi-fi, u ondas de radio, higrómetros, termómetros, sensores de distancia, etc. Uno mismo puede elaborar circuitos para conectar estos componentes, sólo que el shield ofrece la ventaja de ser un producto compacto, muy fácil de conectar al tablero.


Ejemplo del shield de pantalla touch conectado a un Arduino Uno. El Arduino corre un programa que permite dibujar.

Raspberry Pi

El Raspberry Pi es uno de los proyectos de educación en computación más exitosos de los últimos años. Se describe a sí mismo como la computadora del tamaño de una tarjeta de crédito de 35 USD.

Existen varios modelos del Pi, pero en general posee un procesador ARM como el de los dispositivos smarthphone, una tarjeta gráfica que tiene capacidad de mostrar video de alta resolución a una velocidad razonable, un puerto HDMI, puerto para sonido, puerto de red, wifi, y puertos USB. Posee también conexiones para dispositivos propios del Pi, como una pantalla touch y una cámara, y posee también un puerto con pines para conectar componentes electrónicos, llamado puerto GPIO. Los pines funcionan a un voltaje diferente del Arduino, los pines del Pi corren a 3 voltios, y los del Arduino a 5 voltios, cosa que hay que tener en cuenta a la hora de conectar

El Raspberry Pi no tiene disco duro, emplea un puerto para tarjetas microSD para almacenamiento. El Pi tiene la capacidad de correr el sistema operativo Linux, y la distribución más usual es una variantes de Debian llamada Raspbian. Esta distribución contiene casi todo lo necesario para escribir, compilar y correr código en el Pi, con una variedad de lenguajes de programación: Python, C++ y otros más didácticos.


Un Raspberry Pi en funcionamiento, conectado a una TV.

Leap Motion

Aparto el Leap Motion de la categoría que hemos estado hablando, pero igual debo hacerle mención pues es un componente esencial de “Lilibeth’s Parade”. El Leap Motion es un dispositivo que es capaz de capturar y estructurar manos en tiempo real. El programador luego puede crear toda clase de gestos con una o dos manos, ya que lo que obtiene son vectores en el espacio. Por ejemplo, es posible saber la posición de los dedos con respecto a la mano, el vector normal de la palma, si es una mano derecha o una mano izquierda, entre otros datos. Para esto, el Leap Motion tiene dos cámaras infrarrojas de alcance limitado, y sintetizan una estructura 3D de la o las manos.

La gente que produce el Leap Motion ha especificado hasta ahora que el Raspberry Pi no tiene la suficiente potencia para correr su software, por lo que no es una plataforma oficialmente soportada.


Aplicación de ejemplo que muestra lo que ve el Leap Motion y una representación de la mano reconstruida

Cómo funciona Lilibeth’s Parade

Modelo

Lilibeth’s Parade emplea un modelo de cartón, con algunas partes hechas en madera balsa. El modelo se construyó a partir de una caja de cartón, la cual se modificó para hacer la base para la torre y el arco, que representa un puente hacia la torre. Los carros están hechos a partir de madera balsa, con una base que los conecta a los servos. Cuando los servos giran hacia cierto ángulo, la base mueve el carro hasta la posición deseada.


Time lapse de la construcción

La torre del palacio tiene huecos en su parte frontal, donde van montados los neopixels. Los neopixels son unos componentes LED hechos por Adafruit, muy convenientes para trabajar con el Arduino, que pueden mostrar una amplia gama de colores a partir del rojo, verde y azul. Estos se pueden conectar en serie, y cada uno posee cuatro pines, dos que le permiten conectarse a una fuente de electricidad, y los otros dos que reciben los datos para desplegar los colores. Se puede elaborar una cadena de neopixels, y al final se usa un solo pin del tablero para comunicarse con toda la cadena. Adafruit provee sin costo extra una librería que permite comunicarse con una cadena de neopixels a partir de llamadas simples.

La torre del palacio también tiene un hueco circular en el tope donde se monta la pantalla.

Estructura

La salida de Lilibeth’s Parade consiste en una PC conectada a dos tableros Arduino. Uno de los tablero tiene una pantalla conectada, y otro tablero establece la posición de los servos y el estado de las dos cadenas de neopixels. Ambos tableros reciben la información de la PC a la que están conectados. La PC también tiene conectado el Leap Motion. La PC corre un programa escrito en Processing que une todo esto. Consideramos utilizar un Raspberry Pi con una cámara, y un script escrito en Python, el cual mediante OpenCV tuviese la capacidad de reconocer una mano en tiempo real.

Processing es un lenguaje, una librería y un ambiente de código basados en Java, hecho con el fin específico de ofrecer un ambiente grato y didáctico para artistas. El programa se encarga también de leer el estado del Leap Motion, a través de una de las tantas librerías que hay para Processing que permiten usar dispositivos desde Processing.

Pantalla

Un tablero Arduino tiene un shield de pantalla, el cual muestra unas instrucciones a los jugadores. Este tablero contiene algunas imágenes, y el código es una máquina de estados que muestra estas imágenes dependiendo del estado del juego, el cual se comunica desde la PC con un número. Por ejemplo, un primer estado muestra dos manos claras, indicando que los jugadores deben poner su mano enfrente del juego para que la mano sea reconocida. Los siguientes dos estados muestran unas manos opacas, comunicándole al jugador que sus respectivas manos han sido reconocidas.

Algunos de estos estados tienen unas animaciones burdas hechas superponiendo imágenes en la pantalla. El Arduino tiene limitaciones con respecto a la velocidad como puede comunicar los cambios a la pantalla, y la velocidad para dibujar la imagen es de casi un segundo, por lo que no se puede hacer algo extremadamente sofisticado. La solución para esto fue emplear imágenes lo más pequeña posibles, para que se dibujasen rápidamente, y que se pudiese entender el significado de la animación al mismo tiempo.

Servos

Los servos son componentes muy sencillos. Pueden rotar a un ángulo específico ordenado por un tablero, y existe una librería que hace esto de manera simple. Al emplear servos, la dificultad consiste en poder traducir el ángulo al que se desea rotar el servo a la realidad, de manera que el modelo funcione bien. Calibrarlo, pues. Lleva tiempo poder calibrar el modelo de tal manera que la base de los carros no pegue con otras partes del modelo.


Servos al momento de la prueba

OpenCV

La entrada de Lilibeth’s Parade inicialmente consistió en un Raspberry Pi que tuviese instalado OpenCV, con un script de Python que controlase tanto esto como la comunicación con los Arduinos. OpenCV es una librería que ofrece un conjunto de rutinas conocidas para “mejorar” imágenes, ya sea tomadas de un archivo, de un video o de una cámara, facilitando la construcción de estructuras sobre las que se puede razonar en código. En el caso de este juego, nos propusimos hacer reconocimiento del color de la piel para detectar la forma de una mano.

La instalación de OpenCV en el Raspberry Pi requiere compilar código en C++, lo cual constituyó una gran inversión de tiempo para lo limitado del jam. El Raspberry Pi tiene la capacidad de compilar código, pero suele tomar mucho tiempo debido a la limitación de velocidad de procesamiento. El Raspberry Pi puede tomar horas en completar la compilación. Disponemos de un Raspberry Pi 3, el cual tiene 4 núcleos, los cuales se pueden utilizar simultáneamente. Esto lo intentamos, pero el Gigabyte de memoria RAM no fue suficiente, por lo que entró en swap, y además teniendo solo 8 GB en la memoria microSD que utilizamos toda la computadora se detuvo, por lo que tuvimos que reiniciar. Sin embargo, se logró compilar la librería y los bindings a Python.

Utilizamos la guía de Pyimagesearch para hacer la instalación, y fue sumamente efectiva, por lo que la recomiendo para cualquier proyecto que quieras hacer con OpenCV y Raspberry Pi.

Al final, la detección de piel depende mucho de las condiciones de iluminación del lugar, y era un cuanto inconstante con respecto al reconocimiento de la forma de la mano. Habiendo empleado casi 20 horas desde el inicio del evento, y sin haber trabajado hasta ese momento con el código del Arduino, concluimos que esta vía no nos iba a resultar en un juego a la hora de entregar.

Sin embargo, quedó como un ejercicio interesante, y una introducción al uso de OpenCV. El Raspberry Pi junto con la Raspberry Pi Camera posee suficiente desempeño para poder hacer reconocimiento visual en tiempo real. Con la posibilidad de poder obtener la imagen raw de la cámara, sin pasar por compresión JPEG, se tiene una velocidad de al menos 15FPS, lo que hace al reconocimiento factible.


OpenCV + Raspberry Pi + Raspberry Pi Camera

Leap Motion

El Leap Motion fue muy sencillo de configurar, y posee una variedad de software que permite explorar la percepción del dispositivo, y las estructuras de datos que forma a partir del reconocimiento de la mano. Processing facilita la instalación de una librería que sirve de binding al manejador del Leap Motion.

El programador lo que ve son vectores de la mano cuyo origen está en el centro del Leap Motion, por lo que se hace sencillo el razonamiento geométrico de lo que haya que hacer. En el caso específico del juego, detectamos el rango de rotación de la muñeca (máximo y mínimo), y la forma de avanzar en el juego es moviendo la mano de tal manera que la rotación pase por el medio de ese rango. Así que tiene sentido moverla lo menos posible, aunque el gesto de hacerlo es gracioso.

Uno de los particularidades de la librería es que deja al programador con la responsabilidad de identificar la mano que reconoce. Esto quiere decir, la librería ofrece información sobre lo que reconoce en cada frame del sketch de Processing, y sólo es válida para ese frame. Uno puede identificar una mano a través de los frames debido a que tiene un número identificador que es el mismo mientras el Leap Motion reconozca la mano. Cuando la mano sale de la vista del Leap Motion y entra nuevamente, en el frame aparece una mano con un identificador diferente.

No nos dio tiempo de estabilizar el reconocimiento de las manos, por lo que tuvimos que pedirles a los jugadores que no sacaran la mano una vez comenzaran a jugar. De continuar con el proyecto este debería ser una de las primeras tareas a completar.

Coda

“Lilibeth’s Parade” fue un proyecto surgido de la necesidad de hacer algo diferente a un videojuego tradicional, en un ambiente como el de un game jam que está tan orientado al desarrollo de videojuegos. Existen otros eventos llamados hackathones, que tienen una filosofía similar, pero la mayoría de estos eventos suelen ser de naturaleza competitiva. La filosofía de colaboración y experimentación del Global Game Jam es uno de los aspectos más importantes y mejor defendidos desde sus inicios, y bajo ese espíritu esta clase de ideas afloran. Para mi fue una excelente experiencia con computación física, y me anima a seguir explorando las posibilidades de este campo.

Armando un juego con fisica en Python, Pygame y Pymunk (I)

En El Chigüire Literario siempre he recomendado a aquellos que están haciendo un juego por primera vez en su vida que desarrollen un juego en 2D. La reacción suele ser adversa: desarrollar un juego en 2D es como volver al pasado, en una época en la que existen los juegos 3D y han adquirido un realismo notable. Supongo que a esta percepción le debemos sumar la visión del juego 2D como el juego vieja escuela (pensemos en MegaMan) donde la sensación de juego es como la de un arcade, en contraste con los juegos en 3D ricos en interacciones físicas que se asemejan a la realidad.

La buena noticia es que esto no se limita solamente al 3D. Se han hecho excelentes librerías para tener simulaciones físicas para el caso 2D que se sientan reales. Una de estas librerías es la ya famosa Box2D, por Eric Catto, utilizada principalmente en el juego Angry Brids. Otra librería muy completa, que es la que reseñaremos en este post, es Chipmunk. Chipmunk es una librería de física de cuerpos rígidos en 2D escrita en C. Para algunos universitarios la mención de “física de cuerpos rígidos” puede causarles dolor en su cuerpo (valga el mal juego de palabras 😛 ), pero para fines de este tutorial, lo único que tenemos que comprender son los conceptos que introduce la librería y cómo se deben utilizar para nuestros fines. Al estar escrita la librería en C, significa que hay una gran diversidad de bindings a otros lenguajes de programación, por lo que podemos usar esta librería escribiendo código en el lenguaje de nuestra preferencia.

Como en este sitio nos gusta Python y PyGame, aprovecharemos Pymunk, el binding para Python que tiene Chipmunk. Es tan fácil de instalar como PyGame, por lo que en pocos instantes vas a tener el poder de crear juegos con interacciones físicas realísticas y sin tener que aprender un montón de conceptos antes de comenzar.

Continúa leyendo Armando un juego con fisica en Python, Pygame y Pymunk (I)

Así que quieres hacer un juego (I): ¿Por dónde comenzar?

Este artículo es la parte 1 de 1 de la serie Así que quieres hacer un juego

He iniciado esta serie de posts para guiarte en el inicio del aprendizaje del desarrollo de videojuegos. En este primer post hablaré sobre algunos aspectos generales del proceso de aprendizaje, y en siguientes posts iremos cubriendo aspectos más concretos.

¿Interesado?

Primero que nada, si estás leyendo este post porque llegaste a él a través de algún buscador, felicidades. El desarrollo de videojuegos hasta ahora sigue siendo un campo que se aprende principalmente mediante el auto-aprendizaje, por lo que considero que tienes la curiosidad suficiente para averiguar por ti mismo de qué va esto y ahora tienes por delante un largo camino que recorrer. Si llegaste por recomendación de alguien, o por mi  curso de desarrollo de videojuegos, espero igualmente que tengas la suficiente curiosidad como para seguir adelante.

¿Por qué insisto en la curiosidad? Me he dado cuenta a lo largo de este tiempo que esta es la cualidad necesaria para aprender a cómo desarrollar juegos, y en general, para aprender cualquier cosa. La curiosidad no te la puede dar nadie, es algo que tiene que originarse en ti y ser el motor de tus acciones. A medida que crecemos, a diferencia de lo que mucha gente cree, la curiosidad no se pierde. Al contrario, a medida que crecemos esa curiosidad se concentra en un punto y se profundiza.

Como ingeniero de computación graduado te digo: no te engañes con que la carrera universitaria te va a dar las herramientas para hacer juegos. En el pensum vas a ver muchas cosas que no tienen la más remota relación con este campo, pero que igualmente te van a servir en otros aspectos. Quizás la mejor ventaja que te da una carrera relacionada con computación es mucho tiempo frente a la computadora, por lo tanto tiempo para aprender a programar, y muchas amistades.

Aún así, programar no es lo único necesario para hacer juegos; de hecho, hay muchísimas cosas que otras personas hacen durante el desarrollo de juegos que no es programación, y de ello hablaré más adelante. Creo que otras áreas del conocimiento tienen muchísimo que aportar al campo de los juegos. La inspiración para el desarrollo puede provenir desde cualquier lado, ya que todas las áreas del conocimiento pueden aportar para la elaboración de un juego. El desarrollo de videojuegos es todavía un campo con muchas incógnitas, así que hay mucho por descubrir.

Aja, entonces ¿cómo comienzo?

Cuando hablo de comenzar a desarrollar un videojuego, por lo general me limito a hablar de desarrollar para la PC o la Mac, dado el caso. Probablemente tu interés por desarrollar videojuegos proviene de jugar juegos de consola, pero el desarrollo para juegos de consola por lo general requiere un permiso de los fabricantes para desarrollar, lo que se conoce como una licencia, que puede costar algunos miles de dólares. Quizás hasta ahora la consola más económica para desarrollar sea la Xbox 360, pero requiere un pago de 100 USD anuales para poder probar los juegos en una consola. Mientras tanto, la PC servirá muy bien.

Un videojuego como tal no es más que un programa de computadora que implementa reglas, visuales y sonidos para uno o varios jugadores. Por otro lado, un programa de computadora contiene instrucciones (generalmente llamadas en conjunto código) que la computadora puede entender. A través de este código se pueden procesar datos (copiarlos o hacer operaciones aritméticas), mostrar cosas en pantalla, reproducir sonidos o música, y leer las acciones del usuario, ya sea a través de un teclado, del mouse, el Wiimote, de un joystick o de un mando.

Dicho esto, un videojuego tiene dos grandes ingredientes: uno es el código, y el otro son los recursos. El código, como ya lo dijimos, controla la computadora y lee las acciones del jugador, pero también es el encargado de implementar y hacer valer las reglas del juego. Cuando escuches a algún empleado en la industria de los videojuegos hablar de diseño de videojuegos, muy probablemente esté refiriéndose a esta importante parte, y la que uno generalmente comienza a darse cuenta de esta importancia solamente cuando has completado tu primer juego. Los que construyen este código por lo general se les llaman programadores, aunque esto es una simplificación.

Por otro lado, vamos a decir que los recursos son todos esos elementos que no son hechos por los programadores. Específicamente: imágenes del juego, sonidos, datos de los niveles, texto de los diálogos de los personajes, todo esto suele ser hecho por ilustradores, artistas gráficos, ingenieros de sonido, y también los diseñadores de los que hablamos anteriormente meten mano también. Quizás esta confusión entre diseño gráfico y diseño de juegos es lo que hace que el significado de la palabra diseño se haya diluido tanto. Para fines de este tutorial, asumamos que cuando hablamos de diseño hablamos del diseño de un sistema de reglas.

¿A dónde voy?

Ante esta perspectiva ya deberías tener un esquema más claro de lo que quieres hacer, o al menos serás capaz de hacer las preguntas correctas: ¿quiero ser programador?, ¿quiero ser artista gráfico o de sonido?, ¿quiero ser diseñador?. Al principio si cuentas solamente contigo para aprender, tendrás que aprender un poco de todo, y si no tienes talento para programar, pues buscar a alguien que sepa hacerlo y además quiera aprender a hacer videojuegos puede tornarse complicado. Lo importante es que existe este conjunto de habilidades que bien pueden repartirse dentro de un equipo.

Como lo dije al inicio de este artículo, mucho del campo de los videojuegos es algo que tiene que ser aprendido por medios propios: implementando y terminando juegos, buscando e investigando. Sobretodo en la parte de programación, es importante tener un espíritu autodidacta. En la imagen anterior doy algunos títulos de libros disponibles gratuitamente en internet para aprender Python, que es uno de los lenguajes que yo uso para enseñar a hacer juegos. Aparte de ello, doy 3 sitios muy importantes para aprender: Gamedev.net, uno de los sitios más populares para consultar sobre cómo hacer juegos, TIGSource.com, una comunidad muy variada de desarrolladores entusiastas de videojuegos, conseguirás muchas buenas ideas por allí, y Pygame.org, que te debería interesar si piensas usar Python.

¿Ser autodidacta? ¿Y si quiero aprender a programar con un curso?

En general, cualquier lenguaje de programación va a servir para hacer juegos. Cursos de programación existen, y algunos de ellos tienen gran prestigio, pero yo tengo una tradición autodidacta, y creo que lo mejor que puedes hacer es ponerte manos a la obra y aprender a manejar algún IDE, ya que los juegos suelen complicarse bastante a nivel de programación y uno te ayudará a mantener la pista de todos los archivos de tu proyecto.

  • Uno muy popular y gratuito es Dev-C++ junto con el compilador MinGW, y puedes instalar la librería Allegro o la librería SDL para comenzar a hacer tus juegos en C o en C++.
  • Otro popular, pero pago, es Visual Studio de Microsoft. Sin embargo, hay ediciones gratuitas para C++ y para C#/XNA. Busca por Visual Studio Express. Desarrollar para PC con C#/XNA es gratuito. No he programado nada en C# pero sé que tiene una estructura muy similar a Java, que es el lenguaje que probablemente vayas a ver en la universidad. C# es un buen lenguaje para crear juegos, y XNA te facilitará las rutinas para dibujar en pantalla y hacer sonidos y demás, aunque quizás vayas a encontrar con que las herramientas son un poco complicadas.
  • Podrías comenzar por Python y la librería PyGame, y aprender Python, que es un excelente lenguaje de programación.
  • ActionScript 3 es también una alternativa que se puede hacer gratuitamente, ya sea utilizando FlashDevelop, para el que tengo una guía por acá, o utilizando Flash Builder, para el que hay opciones gratuitas para estudiantes y desempleados. Esto es, se pueden crear juegos para Flash Player sin tener que usar Adobe Flash, la conocida herramienta de Adobe para crear juegos y animaciones para jugar en la red.

Lo importante de este mensaje es que sepas que ningún curso te va a dar todo lo necesario para que programes juegos. Quizás facilite las herramientas iniciales, pero la programación es algo que no se enseña: se aprender dándose golpes uno y por ensayo y error. Una vez más, Gamedev.net es una tremenda puerta de entrada desde hace muchísimo tiempo, y tiene una sección especial para principiantes para ir aprendiendo los tópicos poco a poco.

Para resumirla: comienza sencillo. Probablemente tengas en mente hacer un juego como los que has jugado, pero hacer un juego es una tarea sumamente dificil (pero sumamente satisfactoria o si no no habría nadie haciéndolo). Para hacer juegos como los que has jugado vas a necesitar comenzar por proyectos sencillos, un tetris, un pacman, etc. Y luego que hagas esos juegos vas a tener las herramientas necesarias para ir haciendo otros juegos más complicados.

¡Pero yo no quiero programar!

Me parece muy bien, los desarrolladores necesitamos gente que tenga cierta sensibilidad artística, que facilite llevar esos pensamientos que tenemos en la cabeza a algo tangible en un papel, ya sean reglas, ilustraciones u otras cosas. Sobre este tema me quedo corto, porque el origen del tema está entremezclado con el aprendizaje del desarrollo. Es decir, que te vendría bien también aprender un poco a nivel de código cómo funcionan los juegos. Esto será un tema que iré desarrollando en los artículos de esta misma serie. Por ahora te recomiendo también leer los artículos para principiantes de Gamedev.net.

Traducidos los cuatro primeros artículos de Game Design Concepts

Hoy terminé de traducir el cuarto artículo del blog de Game Design Concepts, de 20 que conforman el curso. Hasta ahora los artículos son:

Todas estas traducciones se irán publicando en el sitio en español del wiki de Game Design Concepts. Aunque el curso ya terminó, seguirá estando disponible indefinidamente para la lectura de todo aquél que quiera comenzar. Es un excelente recurso para aquellos que quieran aprender diseño de juegos.

Desde aquí también hago un llamado para aquellos que quieran hacer traducción de los artículos, pues son bien largos y actualmente yo soy el único que está traduciendo. Si estás interesado, contáctame a mi correo electrónico (ciro.duran en gmail.com). Es un trabajo puramente voluntario y hecho por amor al arte.

Boletines de GameDevLessons traducidos al español

proyecto-iris

Andrés de Pedro ha estado al frente de la traducción de los boletines de GameDevLessons, escritos originalmente por Chris DeLeon y que reseñé hace un tiempo. Los está publicando en su sitio personal Proyecto Iris, en la sección de GameDevLessons. Actualmente tiene dos boletines publicados (la carta 1 y 2), y el tercero lo publicará el 1ro de septiembre. Ánimo, y espero que surjan más escritores y traductores en español, todavía faltan muchos recursos en español para aprender a hacer juegos.

Encontronazos con ActionScript 3: Gráficos desde el código

Este artículo es la parte 4 de 6 de la serie Encontronazos con ActionScript 3

En este post de la serie Encontronazos con Actionscript 3 vamos a extender el sencillo Hola Mundo que hicimos en el artículo pasado para incluir gráficos. Los gráficos que vamos a hacer serán creados desde el código, por lo que serán muy sencillos.

Creo que es importante aprender cómo hacer esto para tener un arte del programador muy básico pero inmediato. Por ejemplo, es efectivo tener un rectángulo que represente un personaje mientras estamos programando, y luego reemplazar el cuadrado por el arte final. En otros casos puede ser necesario

Actionscript 3 trae herramientas de dibujo un tanto distintas a las de su versión anterior, pero su esencia no ha cambiado. Como vimos en otro artículo, todos los objetos que se pueden dibujar en pantalla son DisplayObjects. En consecuencia, todos los DisplayObjects poseen un objeto llamado graphics (de tipo Graphics), el cual contiene todas las llamadas de código que necesitaremos para dibujar. (Foto por tanakawho) Continúa leyendo Encontronazos con ActionScript 3: Gráficos desde el código

Creando juegos de aventura con Adventure Game Studio (IV)

Este artículo es la parte 4 de 6 de la serie Creando juegos de aventura con Adventure Game Studio

AGS Blue Cup Logo Adventure Game Studio es un programa creado por Chris Jones para que amateurs de la creación de videojuegos puedan hacer sus juegos de aventura al estilo de los juegos que hacía Sierra y/o LucasArts a mediados de los 90. En particular, AGS permite concentrar a la persona o al equipo en la creación de contenido del juego y facilitar la programación de los guiones que conformarán la historia. AGS se ha convertido a lo largo de estos años en un programa muy poderoso, con una gran gama de características, un lenguaje de scripting muy flexible, y una excelente comunidad dispuesta a ayudar y con gente bien simpática. La cuarta parte de esta serie pone en práctica el flujo de trabajo en la producción de un juego de aventura.

En esta parte vamos a establecer la historia de un juego de aventura, comenzaremos a crear los gráficos necesarios para el juego de aventura y comenzaremos a crear los sprites y animaciones necesarios para los personajes. En la siguiente parte crearemos las habitaciones y explicaremos los conceptos dentro de éstas. Esta parte promete ser larga, así que lo mejor será comenzar. Continúa leyendo Creando juegos de aventura con Adventure Game Studio (IV)

Gráficos gratuitos y bonitos. Especiales para prototipos de juegos

Siguiendo la nota de prototipos de esta semana tenemos vía Kotaku (nuevamente) un paquete de 30 imágenes en PNG listas para ser utilizadas específicamente en prototipos, titulado los Milagrosamente Flexibles Tiles para Prototipos de Juegos de Danc (o Danc’s Miraculously Flexible Game Prototyping Tiles, en inglés). Las imágenes están realizadas con generalidad en mente, para que sirvan tanto como para juegos basados en tiles o juegos de plataforma, y con una buena resolución moderna de 101×171 pixeles.

Danc’s Miraculously Flexible Game Prototyping Tiles Mockup

Según Danc, creador de estos gráficos, el objetivo de este paquete es reducir el tiempo que pierde un programador haciendo dibujos realmente patéticos (lo que yo suelo llamar aquí “Arte del programador”), y al mismo tiempo poder presentar un prototipo con dibujos atractivos (algo que puede afectar positivamente el alma 🙂 ). El autor también alienta a los programadores a que si necesitan sacar más de este paquete, a modificar las fuentes (en PNG) de las imágenes para formar otros.

Zelda RPG Prototype: Lost Garden

En la misma página, podemos ubicar un par de paquetes gratuitos más para usarlos en prototipos. Este es un paquete de gráficos para RPGs, y un paquete de gráficos para shooters verticales. No empobrecen ni enriquecen a nadie, pero definitivamente son un tremendo esfuerzo para tener prototipos con arte más decente. Totalmente recomendado el blog de este artista.

Creando juegos de aventura para PSP: Adventure Maker para PSP y Windows

Adventure Maker logo Sé por la prensa usual de videojuegos que el Playstation Portátil (o PSP) tiene un gran mercado potencial para juegos homebrew, que son los juegos hechos por amateurs para consolas. Este potencial se debe a que la consola al parecer puede correr aplicaciones no aprobadas por Sony (Fuente: Wikipedia) y, por supuesto, gente dispuesta a experimentar con juegos propios en sus respectivas consolas.

El caso es que es la primera aplicación que me encuentro, llamada Adventure Maker, con la que se pueden hacer juegos de aventura, quizás con una complejidad un poco menor comparado con aquellos hechos con otros programas, pero que no creo que la haga “menos adecuada” para gente que comienza o que quiere desarrollar algo rápido. Veinte puntos para esta gente porque ofrece una versión gratuita para evaluar el programa, donde se pueden utilizar hasta 150 “pantallas”. Ofrecen también una versión paga con opción para distribuir comercialmente los juegos producidos.

Este servidor se lo está bajando ya para ver qué tal. Si te pica la curiosidad lo puedes bajar también. Saca juegos tanto como para PSP como para Windows.

Haciendo prototipos por diversión y por dinero

Power of Two Games Para esta semana habrá bastante contenido relacionado con desarrollo de juegos. Comenzamos con Noel Llopis y Charles Nicholson, dos desarrolladores de Power of Two Games, que describen en un artículo bien jugoso cómo desarrollar un juego a partir de un prototipo.

Ya hemos evaluado juegos en este blog que no son más que prototipos (ej. los que salieron del Experimental Gameplay Project), por lo que ya sabemos que un prototipo es un modelo al desnudo del juego que se quiere hacer, desarrollado de manera extremadamente rápida, y desprovisto totalmente de pulituras, gráficos bonitos, o siquiera menú de navegación. Los prototipos permiten saber a los creadores de un juego si el concepto que están haciendo es divertido, una característica tan básica de los videojuegos que a veces lo pasamos por alto.

Lo particular de estos dos personajes es que no usan lenguajes de alto nivel, como Python, y como tantos desarrolladores últimamente han estado recomendando ampliamente. La gente de Power of Two Games utiliza C++ y Allegro. Me causa curiosidad que consideren Allegro como una librería “old school“, una expresión con la que quieren decir que la mayoría de los juegos creados con esta librería son más bien parecidos a los que existían en los mediados de los 90, y no tienen la sofisticación de los de ahora.

Lamentablemente el artículo está en inglés, pero si pueden leerlo, háganlo. Es material bien didáctico y ofrece un punto de vista sobre la forma de desarrollar un juego (y un espaldarazo a Allegro 🙂 ).

Noticia vía Kotaku.