El Chigüire Literario Desarrollo de videojuegos con denominación de origen

SIGGRAPH 2007: Domingo de Sandbox y Mínimos Cuadrados

El retraso del avión no ha opacado ni opacará el resto del evento. Hoy ha sido un día movido conociendo el hostal y registrándome.

Welcome to SIGGRAPH 2007 sign Foto por Shokai

Segundo día del Sandbox

En el Sandbox las charlas de hoy fueron sobre cómo extender las interfaces de los juegos, con dos exposiciones cortas, una sobre el WiiMedia: métodos de análisis de movimiento y aplicaciones usando un control de juegos común y corriente, y otra sobre la mejor forma de colocar propaganda dentro de un ambiente 3D, a partir de datos recogidos de unos usuarios en unas pruebas.

Después del break hubo una serie de charlas bien interesantes sobre prototipos de juegos: la primera de Nokia dijo mucho más de lo que se sabe, pero el panel fue otra cosa. 4 expositores hablaron de formas de hacer prototipos, incluyendo una propuesta llamada Game Sketching, en donde en vez de utilizar código se utilizan varias personas en un ambiente virtual para representar la mecánica de un juego. El más divertido de todos fue el de Kyle Gray que habló de hacer prototipos en Flash. Mi especialidad :-) .

Curso de Mínimos Cuadrados

El curso de medio día al que atendí fue uno sobre mínimos cuadrados para computación gráfica. Los expositores comenzaron por el sencillo caso de dos dimensiones, pero poco a poco fueron poniéndose esotéricos, con términos cada vez más matemáticos. La perla la puso uno de los expositores: “El par de láminas siguientes son muy aburridas”. No estaba equivocado, pero ¿para qué condicionar a la gente de una vez?. Unos cuantos ojos cerrándose, incluyendo los míos propios, me convencieron de abandonar la sala cuando llegó el break del medio.

El resto del día me la pasé visitando otras galerías, la de arte y la de Tecnologías Emergentes ( o Emergent Technologies). Sobre eso les escribiré luego, porque merece un artículo aparte.

Sobre el Hostal

El Hostelling International San Diego es muy buen hostal, con la particularidad de que el ascensor está temporalmente dañado, pero eso era algo que me habían avisado hace varias semanas con un correo. Como era de esperarse, tiene Wi-fi en la sala de TV, y mi habitación quedó justo al lado de esa sala :-) . La cocina está bien equipada y ofrecen panquecas gratis de desayuno a las 8AM. Sólo hay que hacerse uno mismo las panquecas.

SIGGRAPH 2007: Fuera de línea el sábado

Lamentablemente por retrasos en el avión no estaré para el primer día del ACM SANDBOX. Mientras tanto, veré qué tan bonito es San José de Costa Rica :-) .

UPDATE: Debido a un retraso de dos horas en Caracas del avión, perdí la conexión aquí. Me han hospedado en un hotel cercano y hasta ahora todo ha estado bien. Pero siempre cuesta tener que aprender un mínimo de cosas sobre un país en menos de 6 horas.

UPDATE 2 (04/08/2007 11:22AM GMT+0): Al fin en San Diego. Sólo 23 horas de retraso.

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