¿Cómo aprender un lenguaje de programación? Haciendo un juego

Aprender un nuevo lenguaje de programación es una tarea que constantemente se hace durante la carrera de un programador profesional. Y a pesar de que esto es así, esta tarea nunca es repetitiva. Todos los lenguajes tienen pequeñas diferencias entre sí que pueden representar un reto para el programador, o volverlo loco. Y es que la mayoría de las situaciones en las que uno aprende un lenguaje se deben a una obligación, ya sea académica o laboral, y en etapas donde la urgencia es grande y las posibilidades de tomárselo con calma son pocas.

Sin embargo, les tengo una estrategia para aprender un lenguaje de programación: hacer un juego. Sólo es necesario un poco de tiempo extra. Un juego tiene algunas complicaciones extra que las aplicaciones comunes no tienen, por lo que esta es una estrategia similar a la que haría un deportista: entrenar más allá de lo necesario para poder enfrentar otros retos sin tanto esfuerzo. Y lo que propongo es más divertido que hacer pesas.

Les voy a presentar 3 casos donde he aplicado esta metodología, con un buen grado de éxito y muchísima diversión. Esto, por supuesto, es mi caso particular, es decir, los resultados pueden variar. Comencemos.

Cómo aprendí Java

Cuando terminé mi primer curso universitario directamente relacionado con programación, donde tuve que aprender a utilizar Java, me quedé con las ganas de saber más sobre este lenguaje. Siempre había tenido interés por «hacer juegos», un área que para mí en ese momento era todavía muy difusa. El hecho es que este interés me llevó a hacer mi primer juego hecho «con seriedad». El resultado fue un juego de UNO muy sencillo al que le fui agregando algunas cosas, y terminó con algunas reglas que aplicaba cuando hacía partidas con los amigos.

UNO for Java screenshot
Parte de un screenshot del juego.

Cuando terminé de hacer este juego, había aprendido muchísimo sobre la librería Swing de interfaces gráficas, y comencé a experimentar de primera mano sobre lo que hay que hacer para implementar un juego: estructuras de datos y algoritmos.

Cómo aprendí C

Tiempo después, por una serie de eventos desafortunados, me encontré en una situación en la que no podía ver clases, así que disponía de mucho tiempo libre. A mis manos llegó un excelente tutorial de cómo hacer raycasting, la técnica que utiliza Wolfenstein 3D para hacer sus gráficos. Debido a que pronto en otro curso iba a utilizar el lenguaje C, pues decidí aprenderlo haciendo este tutorial, y escogí la librería Allegro para las rutinas gráficas.

El proceso fue divertidísimo, y el resultado fue haber aprendido a programar en C, sin pensar en orientación a objetos. Concluí que Allegro es una buena librería para implementar juegos. Cuando comencé el curso donde requería usar este lenguaje, ya tenía un dominio relativamente decente de los apuntadores y otras cosas que lo enredan a uno cuando está aprendiéndolo.

Raycaster screenshot
Screenshot del raycast cuando lo estaba trabajando.

Cómo aprendí Python

El cómo estoy aprendiendo Python lo han presenciado ustedes a través de CuteGodChigüire, el juego tipo God que he estado haciendo y del que he hecho una crónica de desarrollo. A diferencia de los otros dos, ustedes tienen la ventraja de que pueden leer cómo se ha implementado el juego paso a paso.

Las Complicaciones

Como dije en un principio, los juegos presentan complicaciones que otras aplicaciones no tienen. Cuando no se sabe cómo implementarlo, un juego puede parecer algo impenetrable. Lo cierto es que un juego comienza como algo sencillo: un conjunto de estructuras de datos y un algoritmo que las actualiza constantemente, un algoritmo que implica un ciclo infinito que chequea al final si la meta del juego se cumplió. Agregar reglas de juego e implementar efectos como animaciones, transiciones y otras cosas van complicando la tarea. Lo bueno de esta metodología es que uno puede parar en el momento que uno siente que ya está en capacidad de poder escribir en el lenguaje.

La otra complicación puede ser ubicar una librería gráfica que facilite la tarea de programación. En la época que aprendí Java no habían muchas opciones de librerías, pero hoy en día sí las hay. En C/C++ están SDL o Allegro, y existen una variedad de bindings de estas librerías a otros lenguajes, por lo que hay excusa para aprender estos lenguajes también.

En este momento les dejo estas preguntas: ¿vale la pena hacer un juego para aprender un lenguaje de programación?, ¿lo has hecho y te ha beneficiado?, ¿ves otras complicaciones que no he cubierto aquí?, ¿estoy diciendo una loquera?. Dejo este espacio abierto para comentar esta propuesta.

Caracas ya tiene un chapter en el International Game Developers Association

IGDA Caracas

Casi una casualidad, podría decir. En estos días de nuevos ingresos y anuncios de nuevos ingresos, buscando casualmente por Google consigo el foro de la IGDA para el Chapter Caracas. Aunque actualmente somos pocos los que hemos escrito allí, el formar parte de una asociación de renombre como la IGDA puede ser un gran paso para conseguir y consolidar a desarrolladores de juegos locales. Actualmente tres empresas están participando en el arranque del chapter:

La IGDA, siglas de la International Game Developers Association, es una de las asociaciones más grandes de desarrolladores de juegos de Estados Unidos. Ellos son los organizadores del Game Developers Conference, una conferencia que se lleva a cabo anualmente en California, y según algunas fuentes, la sucesora del E3, el Electronic Entertainment Expo, después de que éste fuese fuertemente reestructurado el año pasado.

En lo personal, ya me presenté en el foro, y estaré pensando en unirme a esta asociación. Animo a aquellos que no conozcan esta asociación se paseen por el foro, se presenten y visiten la página del Chapter Caracas de la IGDA.

Planet Stratos: Un agregador de blogs de desarrolladores de videojuegos en español

No quería tampoco pasar por alto que este blog ya está formando parte de Planet Stratos, un agregador de blogs de desarrolladores de videojuegos residentes en España o hispanohablantes. Planet Stratos forma parte de Stratos, un sitio español bien completo de desarrollo de videojuegos. Contiene ofertas de trabajo, enlaces a tutoriales, noticias y foros. Visiten el sitio para poder leer a otros desarrolladores y sus proyectos.

Game File Format Central: Formatos de archivos para tu juego

¿Buscas el formato de un archivo de juegos para tu librería de programación? Sea el formato JPG para imágenes, o sea el formato WAD de niveles para Doom, el Game File Format Central tiene esos y muchos otros más. Game File Format Central es un wiki donde reside la información de estos formatos, con su orden de byte (el endian) y los datos que contienen. Una página que vale la pena tener marcada para una consulta rápida.

Via Gamedev.net.

Accediendo a los subpixels con Pygame mediante SubPixelSurface

Una de las limitaciones que posee Pygame, una librería para desarrollar juegos con Python, a la hora de dibujar sprites en pantalla es que sólo es posible hacerlo en coordenadas enteras. Esto, para algunos sprites pequeños, ej. partículas, es un salto demasiado grande y se ve feo en la pantalla. Will McGugan, de Where there is a Will, escribió un pequeño paquete que toma una superficie (un Surface) de Python y lo transforma en una superficie capaz de dibujar objetos con coordenadas fraccionales, justo como lo harías con OpenGL u otra librería 3D. Al hacer este procedimiento con el código de Will, el objeto mismo hace el cálculo de los subpíxeles, y combinado con la animación que le des al objeto el resultado es un movimiento muy suave, como lo demuestra un GIF de ejemplo a continuación:

Will McGugan SubPixelSurface DemonstrationWill McGugan SubPixelSurface DemonstrationWill McGugan SubPixelSurface DemonstrationWill McGugan SubPixelSurface DemonstrationWill McGugan SubPixelSurface Demonstration

Las pelotas de encima están dibujadas mediante sub-pixeles, y las pelotas de abajo con coordenadas enteras. La diferencia en la suavidad de movimiento es notable. Requiere el módulo Numpy para poder funcionar. También tiene la desventaja que el precálculo hecho a cada superficie requiere una buena cantidad de memoria, específicamente 9 veces más que una superficie normal para el nivel por defecto de precisión, por lo que es manejable para superficies relativamente pequeñas.

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. Sigue leyendo Creando juegos de aventura con Adventure Game Studio (IV)

Game Over: La usabilidad de los videojuegos es importante

Game Over alien Game Over! es, antes que nada, un chiste interno para los desarrolladores de juegos. Game Over! es, según los creadores, el primer (y ojalá único) juego no usable del mundo. Game Over! enseña, a través de sus 21 niveles, principios básicos de usabilidad que son constantemente violados por los desarrolladores tales como:

  • Proveer tutoriales para los usuarios.
  • No depender exclusivamente del color para proporcionar información. (Existe el brillo, por ejemplo)
  • Proveer controles de volumen para voz, sonido y música.
  • Proveer controles de dificultad.

Otros principios más son mostrados en los niveles, con un humor bastante cruel, y todo con variaciones de un Space Invaders. Si te interesa la programación de juegos, no dejes de bajar Game Over! y darle un vistazo. Es nuestro deber proporcionarle a los jugadores una buen experiencia mientras estén jugando con nuestros programas.

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.