Juegos Antiguos
Gusano e (2001)
Este fue el primer juego que terminé. Había terminado el primer año del ciclo de DAI, aprendiendo suficiente C y conio.h como para poder hacer el mítico juego de la serpiente. A diferencia del original, el control sólo tiene dos teclas, porque nunca fui demasiado fan del control con cuatro direcciones. Me era más intuitivo jugar girando la serpiente hacia la derecha o la izquierda.
En cuanto a la "historia", teníamos una especie de culto a Chanquete y Piraña, los personajes de Verano Azul, en la clase en la que estaba por aquella época, de ahí los comentarios bizarros y sin sentido que va lanzando el juego.
- Lenguaje: C
- Versión MS-DOS (con Código Fuente)

Buscaminas (2002)
En el segundo año del ciclo de DAI, aprendí Visual Basic 6. Como ya sabía programar, aproveché para volver a leer un libro pequeño de Anaya sobre VB6 que tenía, cuya primera lectura no había sido capaz aprovechar bien. En una semana aprendí el lenguaje y me puse a hacer un par de juegos: una versión del pong y este. Aunque causó cierta impresión en la clase, cuando lo enseñé, no fue tanta como la que tuvo el juego de la serpiente, porque andaban mis compañeros picados compitiendo por tener la mayor puntuación posible.
Al año siguiente decidí retocar el juego para añadir gráficos, en vez de usar botones de comando para las casillas, para que se viera más bonito. No obstante, seguía padeciendo algunas limitaciones, por usar Visual Basic, en cuanto al número máximo de controles que podía usar. Por ello no pude ponerle niveles de dificultad, como tiene el original.
- Lenguaje:
- Versión Win32 (con Código Fuente) [VB6]

Hundir la Flota (2002)
Estaba yo ya en la universidad, aprendiendo Pascal obligado, cuando el profesor nos dijo que si hacíamos el juego del Hundir la Flota nos daría el aprobado inmediato. Fuimos pocos los que le entregamos el juego completado, uno de ellos mi compañero Helius, y ninguno vio el susodicho aprobado. Fue el clásico ejemplo del profesor que te miente para luego justificarte que gracias a ese esfuerzo es por lo que finalmente apruebas el examen. Igualmente, gracias a este juego aprendí a darle uso a las máquinas de estado para hacer la IA del ordenador.
- Lenguaje:
- Versión MS-DOS (con Código Fuente) [Pascal]

Pong (2003)
Aunque está fechado como del 2003, este juego lo empecé entre el año 2000 y el 2001. El motivo, por el que decidí ponerlo como del 2003, se debe a los últimos cambios que le hice al juego, además de ponerle la licencia GPL para distribuirlo por internet. Este fue el primer Pong, de los cuatro que hice, y el primero con "inteligencia artificial", por llamarlo de alguna forma.
Después de terminarlo, pensé en portarlo a C++, utilizando las MFC con el "Visual" C++, para hacerlo en un lenguaje "bueno". Debido a mi juventud, tenía la necia idea de que había lenguajes buenos y malos. Con el tiempo aprendí que dependiendo de lo que se quiera, pueden venir mejor unos lenguajes que otros. El caso fue que al empezar a leer el libro que compré sobre las MFC, vi que programar con esta biblioteca resultaba una experiencia más árida de lo que estaba dispuesto a tolerar, por lo que descarté el proyecto.
- Lenguaje: VB6
- Versión Win32 (con Código Fuente)

Tres en Raya (2003)
Siguiendo con mi etapa entusiasta de VB6, estaba ya en la universidad cuando decidí hacer el juego del Tic-Tac-Toe. Mi idea era completar una lista, de alrededor de 28 juegos básicos, para aprender a programar juegos. No llegué a completar dicha lista, pero este sí que fue uno de los que hice. Con este juego aprendí algunas nociones básicas de lo que era un sistema de reglas, para aplicarlo al comportamiento de la IA del juego, que era una tecnología usada en juegos de estrategia en tiempo real.
- Lenguaje: VB6
- Versión Win32 (con Código Fuente)

Siete y Media (2003)
Estando en racha, después de hacer el Tic-Tac-Toe, me puse a hacer este juego de cartas. Como mis dotes de grafista eran inexistentes por entonces, me limité a una representación un tanto "básica". No obstante, más allá de la falta de gusto artístico, seguía siendo un juego más que pude tachar de mi lista de juegos para aprender.
- Lenguaje: VB6
- Versión Win32 (con Código Fuente)

Blackjack (2003)
Esto sería un poco tramposo, pero al tener hecho el anterior, me hice otro juego de cartas muy similar, ya que los cambios al código fuente eran unas pocas líneas nada más. Lo que no alcanzo a recordar es si fue primero el juego de la Siete y Media o el Blackjack. De todos modos, fuera como fuere, la conversión de un juego al otro fue un buen ejemplo de la filosofía de reutilizar componentes de software al máximo posible, ¿verdad?
- Lenguaje: VB6
- Versión Win32 (con Código Fuente)

Pong (2004)
Se puede decir que el Pong es un clásico en el mundo de los videojuegos y hasta cierto punto el "Hola mundo" de esta rama de la programación. Entonces, ¿qué hace especial a esta versión si tenía una previa ya hecha? Bien, básicamente este juego está escrito 100% en ensamblador del Intel 80x86 de 16 bits.
Hay que reconocer que programar en ensamblador no es algo placentero que digamos. Pero como tenía que aprobar una asignatura sobre microprocesadores, en la que había que aprender ensamblador del Intel, me propuse como meta hacer un juego para comprobar de forma efectiva que había alcanzado dicho aprendizaje. Desde luego fue toda una experiencia hacer este juego.
- Lenguaje: Ensamblador 8086
- Versión MS-DOS (con Código Fuente)

Puzle (2004)
Después de hacer el Pong en ensamblador, se me ocurrió trastear con el Modo 13h y hacer la LessLib. Para probar mis nuevos conocimientos, hice este sencillo juego del N-puzle, donde tenemos un hueco libre y podemos mover las piezas colindantes para recomponer la imagen original.
Aprendí cosas interesantes como que Turbo Pascal no te deja pedir tamaños de memoria que no sean múltiplo de 8. Esta era otra razón más, para llevarme las manos a la cabeza, cada vez que alguna figura de "autoridad" me insistía que Pascal era mejor lenguaje que C/C++, argumentando que no te dejaba hacer cosas "malas". Personalmente, era una filosofía que nunca compartí.
- Lenguaje: Pascal
- Versión MS-DOS (con Código Fuente)

Pong (2006)
Durante el verano de aquel año me puse a aprender Java un poco más en serio. Pero no me limité a la versión estándar de Java, sino que también aprendí a programar en la plataforma J2ME. ¿Y qué mejor forma hay para comprobar que has aprendido una nueva tecnología? Efectivamente, me puse a hacer un juego y este fue por tercera vez el Pong.
Aprendí que programar juegos en Java era desaconsejable y hacerlo para J2ME del todo horripilante. El motivo, de esto último, era que las máquinas virtuales de Java para móviles de aquel momento eran muy deficientes, lo que motivaba que uno intentara no programar con objetos en un lenguaje que es orientado a objetos. Al no tener el control total en la gestión de la memoria, en plataformas tan limitadas, resultaba fácil no darse cuenta de los news "involuntarios" que uno estaba haciendo, provocando llamadas continuas al recolector de basura.
- Lenguaje: J2ME
- Versión Móvil (con Código Fuente)

Tetraminoes (2009)
Este fue uno de esos retos que tuve pendiente durante mucho tiempo, crear un clon del mítico Tetris de Alexey Pajitnov, el famoso programador ruso de videojuegos. Pero la razón final por la que lo hice, fue prometerle a mi pareja de entonces hacer un Tetris para su móvil que no diera grima.
Una vez me puse manos a la obra, hice primero la versión applet para navegadores web. Por entonces era una de las formas de meter contenido dinámico en las páginas web, como Flash. El tiempo hizo que HTML5 llegara y nos librara de los applets de Java y de Flash, por ello ya no funciona el applet en los navegadores modernos.
Unos días más tarde, modificando la versión inicial, conseguí portar el juego a móviles con soporte para MIDP 2.0. El cambio consistió en pasar la programación orientada a objetos a programación estructurada, algo nada recomendable en condiciones normales. También tuve que modificar el control de ambas versiones, al no tener éxito el control inicial que propuse. Este proyecto me hizo ver lo mucho que dependía de la orientación a objetos a la hora de programar juegos y decidí no volver a tocar la plataforma J2ME.
- Lenguaje: Java y J2ME
- Versión Applet (con Código Fuente)
- Versión Móvil (con Código Fuente)

Alien Party (2005)
Este juego lo hice para dar una charla, en unas Jornadas del Software Libre de la UPSAM, como introducción a la programación de juegos bajo Linux con la SDL.
La historia completa fue que el verano anterior hice un curso de programación de videojuegos, en la Complutense, y aprendí algunas ideas fundamentales sobre la arquitectura básica de todo videojuego. Entonces decidí hacer un taller de programación, para transmitir dicho conocimiento, y para ello hice un clon algo básico del Space Invaders.
El juego no llevó mucho tiempo hacerlo. Los gráficos literalmente los tuve que hacer con el paint y hubo cosas que me hubiera gustado añadir que se quedaron en el tintero. Por ejemplo, me hubiera gustado añadir un poco más de variedad de enemigos, más armas, una mayor diferencia entre cada fase y algunos extras como la nave que pasaba a toda prisa del Space Invaders original.
El juego fue programado en C usando la SDL con el Visual Studio 6.0 sobre Windows XP. Para hacer las pruebas de linux usé Ubuntu, con el gcc y el make para compilar dicha versión. La charla no estuvo mal, aunque no sé si alguien logró aprender algo al final. Al año siguiente, en 2005, tuve la oportunidad de repetir la charla en la UCM con la asociación GUEIM.
Finalmente, en 2008, aprovechando que tenía un Mac, pude realizar el port a MacOSX. Tan solo hizo falta añadir un par de fichero, compilarlo y jugar. Por ello la SDL está tan bien valorada, por su probada portabilidad.
- Lenguaje: C (SDL)
- Versión Win32
- Versión MacOSX Leopard
- Versión Linux
- Código Fuente (MSVC++ 6)
- Código Fuente (Xcode)
- Dependencias para compilar:
- SDL 1.2.12 (Win32)
- SDL 1.2.12 (MacOSX)

Ajedrez (2005)
Este fue uno de los juegos, en mis años de carrera universitaria, que más orgulloso me sentí de terminar. Consiste en un ajedrez dotado de inteligencia artificial para poder jugar contra él. Si bien es cierto que resulta algo rudimentario, frente a todos los juegos de ajedrez gratuitos que existen por internet, teniendo en cuenta la experiencia que tenía acumulada en su momento, fue todo un logro el nivel que alcancé con este juego.
Algo importante que aprendí, con este juego, fue que no estaba preparado para lidiar con las limitaciones del MS-DOS. No alcanzo a imaginar qué optimizaciones épicas tuvieron que hacer los grandes maestros que crearon el Battle Chess por ejemplo.
El juego se quedó en la versión Alfa 0.6, es decir, sin "terminar". El primer motivo, de esta situación, es que nunca fui muy fan de Pascal (ni familiares como ADA). El segundo fue que, para mejorar la IA del juego, requería una cantidad de tiempo exponencial para el nivel de mejora que deseaba implementar, teniendo en cuenta las limitaciones del MS-DOS.
Años más tarde, con el GAGC, portaría este juego a C++ para Windows. Sin embargo, a pesar de tener menos limitaciones que el MS-DOS, no mejoré el algoritmo de IA de la máquina. Como estaba portando trece juegos en total, no quería dedicarle más tiempo a mejorar cada juego, porque hubiera implicado emplear más tiempo del que tenía planeado.
- Lenguaje: Pascal
- Versión MS-DOS
- Código Fuente

Reversi (2005)
Posiblemente estés pensando que este juego es calcado al ajedrez que hice. Sí, es verdad, porque reutilicé el código de la interfaz para desarrollarlo. A pesar de mi aversión con Pascal, este juego fue una práctica del laboratorio de programación de primero en la carrera. La práctica no pedía implementar el Modo 13h o el ratón, pero cuando me la mandaron tenía ya hecha la interfaz del ajedrez y no me supuso problema alguno adaptar lo que ya tenía hecho. Además, lo bueno fue que este juego me sirvió como banco de pruebas para corregir el algoritmo de búsqueda de la IA (un mini-max con podas alfa-beta), pues el tutorial que miré tenía errores en su implementación.
También estoy bastante orgulloso de este juego porque, al contrario que el de ajedrez, este sí está terminado. Esto se debe a que la IA para el reversi es más sencilla que la del ajedrez. Por ello, este juego a diferencia de los anteriores, podría decirse que fue mi mejor juego 2D hasta la fecha por tener un buen acabado y estar suficientemente pulido.
- Lenguaje: Pascal
- Versión MS-DOS
- Código Fuente

Damas (2007)
Estaba yo aprendiendo programación funcional con Haskell, cuando se me ocurrió hacer el juego de las damas como proyecto final de la asignatura. Se planteó hacerlo en 2D con el módulo de OpenGL de la distribución de Haskell, pero al final se descartó por algunas complicaciones y me limité a que funcionara mediante consola de texto. Es cierto que no es muy vistoso, pero me gustó mucho la experiencia de programar este juego en Haskell.
- Lenguaje: Haskell
- Versión Final
Paxnaman (2009)
Este juego es un clon del clásico Pac-man de Namco. La historia, de por qué quise hacer un remake de este juego, se remonta al 2007. En una reunión del club de .NET se me ocurrió que podría ser interesante hacerlo con XNA y dar charlas sobre ello. Por desgracia, los estudios copaban todo mi tiempo, así que no fue hasta el verano del 2009 que me puse a hacer el juego.
Como programador amateur de videojuegos había hecho bastantes proyectos antes de este. Sin embargo, siempre tuve una espinita clavada con mis anteriores trabajos. La falta de sonido y de animaciones me abrumaba, ya que nunca fui grafista y tampoco el tema del sonido era mi especialidad. Por ello mis anteriores juegos fueron muy simples en esos aspectos. Ninguno tenía sonido ni animaciones. Ante esa situación, una parte mía no se sentía especialmente satisfecha con lo realizado hasta el momento.
Empecé desarrollando el juego un poco a lo loco, sin apenas reparar en analizar el tema. Eso pronto supuso un serio problema y paré durante unos días para estudiar el original de las recreativas, intentando descubrir cuales eran las reglas del mismo. Con lo que pude sacar de jugar unas cuantas veces, fui programando primero los menús y luego la base de la lógica del juego. Como estuve sin internet, durante buena parte del desarrollo, no tenía acceso a información útil y fui avanzando con lo poco que tenía. Un día que pude acceder a internet, me encontré con este artículo sobre el juego. Descubrí que había enfocado mal muchas cosas y que para corregirlo hacía falta cambiar buena parte de lo implementado. Como era demasiado trabajo y, para lo que yo quería conseguir, daba igual si hacía un clon 100% fiel al original, lo dejé estar.
Descartando ser 100% fieles y dejar algunas cosas simplificadas, logré montar toda la lógica, dejando para lo último la IA de los fantasmas. Tampoco me llevó mucho tiempo hacerla, gracias a la página que comenté antes, donde viene bien explicado cuales son los objetivos que los fantasmas intentan alcanzar. Sin embargo, no logré que fuera igual, ya que el algoritmo para buscar caminos no es exactamente el mismo, ni siquiera la elección al azar de una dirección.
Al final, lo que parecía un desarrollo que no llegaba a su fin, terminó en su primera versión alfa tras unos 30 días de desarrollo. El resultado final era bastante bueno, comparado con los 18 meses que se tardó en hacer el juego original. Y por fin tuve un juego desarrollado por mí, del que sentirme orgulloso y satisfecho en cada apartado del mismo.
- Lenguaje: C# (XNA)
- Versión Win32
- Código Fuente
- Dependencias para compilar:
NOTA: Con Windows XP necesitas mínimo el Service Pack 2.

Ayuda
Para jugar las teclas que debes usar son:- ESC: Salir del juego.
- C: Introducir una moneda.
- 1: Empezar partida para 1 jugador.
- 2: Empezar partida para 2 jugadores.
- Arriba: Mover hacia arriba.
- Abajo: Mover hacia abajo.
- Derecha: Mover hacia la derecha.
- Izquierda: Mover hacia la izquierda.
Snake (2010)
Por último, volví a hacer el juego de la serpiente, en lugar de hacer el Pong por enésima vez. Esto se debió a que aprendí a programar para Flash, lo que me llevó a dedicarme profesionalmente a ello, por desgracia. Así que en vez de volver a hacer el Pong, opté por portar mi primer juego a Flash. Este juego marcó el final de mi época de programador de juegos mientras estudiaba la carrera.
- Lenguaje: ActionScript 3 (Flash)
- Versión Flash (con Código Fuente)