¿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.

Frenzic. Un juego exclusivo para Macs.

Hace unos días ví a Jairo, de Iconeando, escribiendo que se estaba divirtiendo con un juego exclusivo para Macs llamado Frenzic. Viendo el video de cómo se juega parece un sumidero de tiempo bien placentero. Se trata de colocar fracciones de un círculo en otros círculos con un tiempo muy corto para cada pieza, para ir completándolos y así ganar puntos.

Ski Stunt Simulator. Lo excitante de ser un patinador de nieve, sin los golpes.

Ski Stunt Simulator es un juego que demuestra lo que se puede hacer cuando se integra la animación física. En Ski Stunt Simulator controlamos a un esquiador mediante el mouse. Bajando por una ladera adquiere velocidad y con sólo movimientos del mouse podemos hacerlo saltar y hacer diversas piruetas. El juego está dividido por niveles, y en cada uno hay que ejecutar una pirueta con éxito: saltar un precipicio, tocar unos árboles con los esquís, hacer un número específico de vueltas, etc.

Ski Stunts Simulator screenshot
¿Lo logrará nuestro patinador? ¿Saldrá sano y salvo?
Respuesta: no

En todo momento el juego simula los movimientos de un patinador, sin trucos. La física del juego es sólida: existe conservación de momento de rotación, el muñeco tiene animación tipo ragdoll y los patines salen volando si no aterrizas como debe ser. Prueben haciendo varios saltos mortales, primero agachando al patinador, y luego extendiendo el cuerpo. Notarán la diferencia de la velocidad de rotación.

El control necesita de una buena dosis de práctica para poder dominarse. Es muy fácil saltar con demasiadas o muy pocas vueltas. Yendo a detalles más técnicos, se implementa con cinemática inversa: a donde apunta el mouse el cuerpo va hacia allá.

Ski Stunt Simulator está disponible gratuitamente en su página, para Windows, con una clave que se introduce al inicio del juego. También disponible en Java una versión que no es interactiva. Sólo sirve para demostrar las capacidades del juego como una animación.

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.

Speed Cluster 2: Juego de cartas en Flash

Talfin.net presenta un juego japonés en Flash: Speed Cluster 2. Se trata de empilar las cartas que se tienen en la parte de abajo sobre las cartas que están bajando desde la parte superior, con la condición de que sean cartas inmediatamente superiores o inferiores. Por ejemplo, se puede poner un 5 sobre un 6, y luego otro 5. Buena recomendación para perder el tiempo este fin de semana 🙂 .

Ser conductor de autobús en Bus Driver no es fácil

Bus Driver es un juego que toma la visión totalmente contraria a los juegos de carros usuales. Mientras que el grueso de esta clase de juegos alienta a la velocidad y liberarnos de la realidad cruda, donde los choques hacen daños irreversibles, Bus Driver cae en la categoría de juego serio: uno toma el papel del conductor de un autobús, recogiendo y dejando pasajeros por una ciudad bastante poblada por rutas preestablecidas, con paradas y todo.

Bus Driver screenshot 2

Con Bus Driver debemos cumplir con las leyes en todo momento: el juego penaliza estrictamente cuando cambiamos de canal sin señalar el cruce con las luces, cuando saltamos una luz roja o cuando chocamos. El juego funciona en base a puntos otorgados cuando hacemos algo bien, y substraídos cuando hacemos algo malo. El bienestar de los pasajeros afecta el puntaje final, así que hay que tratarlos bien manejando adecuadamente. Una de las habilidades que hay que aprender es a frenar adecuadamente: el freno con el teclado aparentemente clava el pedal al fondo, y mantenerlo así demasiado tiempo asusta a los pasajeros, y quita 100 puntos por «Overbreaking«. La falta del feedback de la inercia complica en gran medida dominar esta habilidad.

En mi opinión, quizás sea que este juego entra en conflicto con el imaginario que tengo que lo que es ser conductor de autobús en Caracas, algo que bien podría ser el basamento para un juego muy diferente. En particular, seguir las reglas puede entretener un rato, pero hasta allí: jugamos juegos para escaparnos de la realidad, y este juego impone reglas bastante estrictas que podrían aburrir al que sólo busca un poco de entretenimiento. De todas maneras, siempre es divertido buscarle los límites al juego, y ese screenshot demuestra que los accidentes bien pueden ser divertidos:

Bus Driver screenshot
Bus Driver me dice «¡Tarea cumplida!». Hasta llegué con buen tiempo.

El demo de Bus Driver otorga una hora de juego, y el juego completo tiene un costo de 29.99 USD. El demo dura suficiente tiempo como para ver que el juego presenta condiciones meteorológicas que complican nuestra tarea de ser felices autobuseros. En la página oficial verás más screenshots si la premisa del juego te convence.

El Chigüire Literario está en Blogojuegos

BlogoJuegos logo

Este blog siempre ha tenido como objetivo, además de compartir con ustedes mi afición y mi conocimiento, buscar lazos con otros desarrolladores hispanohablantes, sin importar de dónde provengan. Aunque mi ideal es conseguir a interesados venezolanos, me alegra muchísimo también conectar con colegas de otros lugares.

Tal es el caso de Blogojuegos, un colectivo de blogs españoles en su mayoría unidos por el gusto de los videojuegos. Su asociación tiene como fin lograr buscar un poco más de seriedad ante la industria española, mucho más sólida y saludable que la que puede existir en este país. A mi parecer esta asociación les está rindiendo frutos: las empresas les envían las notas de prensa, y inclusive se reunieron con el equipo madrileño de Electronic Arts para conocerse. Nada mal para una comunidad con 2 meses de creada.

Hasta ahora la mayoría de los blogs que lo conforman entran en el campo de la crítica de videojuegos de la escena mainstream, abarcando PCs, Macs y consolas. Siendo yo además el primer blog «extranjero» que ingresa a sus filas, espero poder aportar un poco sobre la visión indie mundial de los juegos. Esta es una escena que está todavía adquiriendo fuerza, por lo que hay mucho que contar, descubrir y disfrutar; pues ya no estamos limitados a escuchar solamente de Norteamérica o de Japón. Ahora cualquier persona con suficiente interés y motivación puede crear un juego.

«El videojuego es la nueva literatura«, una frase que lleva adornando este blog desde hace más de un año, no es una frase casual. Mientras unos debaten si los videojuegos son una forma de arte, otros sacan juegos que ni siquiera tienen la intención de entretener, sino todo lo contrario: horrorizarte, chocarte, sorprenderte, incluso hacerte sentir mal. Poco a poco estamos madurando, y creo que eso otorgará oportunidades para todos: oportunidades para conocer nuevas visiones de lo que es un juego, y oportunidades para desarrollar esas visiones con una barrera de entrada muy baja.

Concluyendo, y volviendo un poco al tema, es un gusto estar con vosotros, y espero conocer un poco más de su situación así como ustedes sepan un poco de lo que pasa acá. A ustedes, los lectores, los invito a visitar los blogs de la barra lateral, donde dice «Blogs de Blogojuegos», para que conocer otras voces hispanohablantes de los juegos.

PD: No tengo que decirlo dos veces. Si eres venezolano y estás desarrollando juegos, por favor, contáctame.

PD2: Si no lo eres, pero hablas español, también.

Con esto de Barreto y el incidente en el estadio tengo una idea para un juego

¿Qué tal un juego tipo Street Fighter? — Uno juega con el personaje del profesor Marcos Carrillo en pelea contra Barreto. Uno pierde si Barreto logra tumbar la gorra del profesor. Si uno logra tumbar a Barreto vienen los guardaespaldas, le caen a golpes al profesor y uno pierde también. Es tan solo una idea que tengo.