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

21 comentarios en «¿Cómo aprender un lenguaje de programación? Haciendo un juego»

  1. Muy buen artículo, hay mucha gente que piensa que hacer un juego sencillito es más fácil que hacer una herramienta y sin embargo el juego tiene unas exigencias que no tienen la mayoría de los programas.

    Yo personalmente estoy aprendiendo muchas cosas de Java con los jueguecillos que hago. Tanto de swing, awt, gráficos, sockets… Es una buena forma de aprender entreteniéndose, y no solo leyendo librotes infumables 😛

  2. Hola, está muy bien tu artículo. Puede ser una buena idea eso de aprender un lenguaje creando un videojuego. Nunca he hecho uno (no por falta de ganas), pero quien sabe, quizás me anime cuando me ponga a mirar C++ 🙂

    Un saludo.

  3. Muy bien comentado, Definitivamente es verdad que con los juegos es más fácil aprender un lenguaje. Otra idea buena es que despues de que tienes mas o menos idea de como funciona el lenguaje, puedes leer codigo de proyectos Open Source para ver como se fuman los porros. Te felicito por realizar juegos que por las foticos se ven que son de calidad :-).

    Espero que sigas aprendiendo lenguajes, es algo muy bueno cuando consigues un lenguaje que te cambia el switche completamente, esos son los que más valen la pena.

    Es dificil aprender un lenguaje cuando tienes las mañas de otro, cuando lo intento trato mas bien de olvidar lo que se de otros lenguajes por que se que hay una manera mas facil de hacerlo en ese lenguaje. ¿No te ha pasado?

    Como recomendación echale un vistazo a Haskell y Ruby… son lenguajes maravillosos, y excelente que entraste con Python, despues de que pruebas las drogas fuertes ya las que usabas no te dan el mismo feeling 😉 Saludos y sigue posteando. Al menos yo seguiré leyendo de ahora en adelante.

  4. Yo experimenté de esa forma con C++ y el irrlicht engine. Terminé un jueguecito de naves bastante decente. Pero fue hace mucho y como no me dedico a la programación, esos saberes fueron quedando en el olvido. Aunque siempre quedan en un plano subconciente para ser revividos llegado el caso.
    Saludos!

  5. Hola Ciro.

    Gracias por tu visita y comentario en La Ventana.

    Yo soy muy curiosa, sabes? Y quiero conocer qué ocurrió con el concurso de El Nacional.

    Claro está que no es precisamente por creer que mi bitácora pueda haber ganado algo, nada más lejos de la realidad que solo premia blogs personales, tragi-cómicos y/o políticos 😉

    Saludos.

    P.D.: Otra vez el Blogstock? Wow…ya pasó un año y nuevamente, no podré asistir este año.

  6. Desde luego es la forma más amena de aprender y, de hecho, muchos tutoriales se basan en la creación de un videojuego. Yo utilicé uno bastante interesante para aprender J2ME, con una versión del mítico 1942

  7. Hiola, soy un chico de 15 años que cuando este año acabe la E.S.O quiero estudiar programacion y me gustaria ir al curso sabiendo algo ya. Asin que qeria hacer un juego muy sencillo pero los unicos progrmas que encuentro son el maker xp (este facil,pero hay algunas cosas que no entiendo) y el dark basic o el c/c++(estos dos ultimos no los e probado) Me gustaria que me dijeran que programa me vendria mejor y como podria empezar ha hacer un juego sencillo como por ejemplo un tetris k me han dicho que haciendo el tetris aprendes mucho. Bueno gracias y espero sus comecntarios 😉

  8. Hola jose,

    Tu pregunta es muy buena, así que intentaré responder lo que pueda en este pequeño comentario, pero el tema merece mayor investigación. La verdad es que en tu posición lo mejor es explorar los programas que tienes y seguir los ejemplos. También creo que hacer un tetris te enseña mucho acerca de cómo funciona un juego. Lo más importante, creo yo, es poder hacer un juego de principio a fin, sin importar la herramienta que utilices. Una vez que ya tengas ese conocimiento utilizar otra herramienta o lenguaje de programación se te hará más sencillo.

    Sé que RPG Maker ha sido ampliamente utilizado y criticado, pero hasta allí. Siempre deberían haber algunos foros donde te puedan ofrecer ayuda si estás perdido (y en los foros te atienden mejor si llegas con una pregunta en específico). Tengo entendido que Dark Basic está orientado a los juegos que usan 3D, por lo que te recomendaría comenzar con algo plenamente 2D si quieres hacer un Tetris. Torque es un motor de juegos 2D con ya bastante tiempo de desarrollo, podrías echarle un vistazo. Si quieres hacer un juego con un lenguaje de programación comenzando desde cero, pues te lo recomendaría sólo si tienes curiosidad por la programación, pues siempre tienes que hacer unas cosas más que ya están dadas con otras herramientas.

    Espero haber podido responder tu pregunta.

  9. Hola….. alguien podria darme informacion sobre como puedo aprender (paginas web) los siguientes lenguajes por internet….

    C

    C++

    Pascal

    me urge por favor….

  10. hola a toda la mara
    tengo un rpoblema no puedo hacer un totito en lenguaje c pero solo tengo una semana si alguien puede ayudeme o manden me documentos en la cual me puede ayudar.
    mi correo es chico_g_5@~yahoo.es

    gracias buena honda a toda la mancha
    att:
    chico

  11. hola me llamo anthony acabo de salir del colegio y por ai me dijeron q con dark basic podia crear juegos
    lo descargue pero no entiendo nada no se de computacion alguien me puede enseñar estaria muy agradecido mi msm es santric_world@hotmail.com disculpen si soy una molestia
    pero yo tambien quiero aprender y se que en el futuro yo ayudare a alguien

  12. Hay muchas paginas dedicadas a la programacion en c++, vb,java, python, etc… con el tipico ejemplo del arkanoid o ping-pong, pero despues ya no vienen mas ejemplos o el codigo del programa esta hecho para la version del 2000 y tu tienes la del 2001 o te falta una libreria que instalar, etc… Un monton de complicaciones que te terminan quitando las ganas de seguir.

    Hay otra alternativas como el blitzbasic3d, con muchos ejemplos y manuales en español muy completos, pero que no dispone de un engine que nos permita obtener resultados a corto plazo y esta un poco desfasado (utiliza directx7, aunque para hacer un juego casero sobra).

    Hasta que llegamos a mundovilla.es, que enfoca el tema de la programacion de videojuegos desde un punto de vista de «ocio», no de estudio ni de profesion sino de pasar una rato ameno frente al ordenador y obtener algun resultado, mediante los GAME ENGINES mas conocidos (FPS Creator, 3DGameStudio, 3DWorldStudio,FreeWorld3D). Con el GAME ENGINE no abordaremos muchos aspectos del juego lo cual nos ahorrara mucho tiempo. Incluso podemos usar el codigo utilizado en otros proyectos del engine (los que vienen de ejemplo en la instalacion) en nuestro nuevo proyecto (por ejemplo la IA ‘inteligencia artificial’ de los personajes) con un simple copiar/pegar. El inconveniente de estos GAME ENGINES es que son aplicaciones comerciales (es decir no gratuitas) aunque existen versiones de prueba, o free muy recortadas en cuanto a prestaciones.

    Solo he encontrado un GAME ENGINE llamado NeoAxis Engine con una version «completa» y «gratuita» para su uso NO comercial que utiliza librerias GPL como:
    -OGRE 3D
    -OPEN DYNAMICS ENGINE
    -Ageia PHYSX
    -FMOD
    Algunas no son GPL pero se autoriza su uso NO comercial.

    Este engine utiliza directx 9.0c y la tecnologia .net con C#(No es necesario instalar Visual C#, pero si el .net Framework 2.0), tiene editor de mapas (tipo WED de 3DGameStudio) y un editor de recursos (tipo MED del 3DGameStudio).
    El procedimiento es similar a otros game engines, creamos nuestros escenarios y colocamos los personajes y objetos mediante el editor de mapas, y le damos vida mediante codigo en C# que ya tenemos hecho de otro proyecto o que hacemos/modificamos nosotros. Considero que aprender C# es mas recomendable que aprender un -script language- que te vale solo para un programa. Ya que se hace el esfuerzo de aprender un lenguaje creo que merece la pena aprender C# y encima sobre lo que nos interesa, los videojuegos. (aunque para hacer nuestro juego no es necesario ser un programador C#, un copiar/pegar y un poco de maña sobra) Mas informacion: neoaxisgroup.com/description.htm

    Yo tengo instalada la version «completa» para uso NO comercial y he probado el proyecto DEMO donde viene todo lo que puede hacer este engine (FPS, RTS, TPS,…) yo creo que de todo.
    La descarga esta al FINAL de esta pagina: neoaxisgroup.com/download.htm

    IMPORTANTE REQUISITOS tener instalado para que funcione: Microsoft .Net Framework 2.0, Microsoft Runtime DirectX9c, y los ultimos drivers de vuestra tarjeta grafica (los enlaces a estos recursos estan al principio de la misma pagina de descarga del engine). Luego ejecutamos el instalador del engine, abrimos el ‘Map Editor’ y podemos comenzar a crear nuestro videojuego siguiendo el manual que incluye (no hay que enlazar librerias ni nada raro). Como tengo actualizado el sistema constantemente no hizo falta instalar nada, aparte del engine claro.

    Os animo a todos a que lo descargueis y lo probeis. Espero que pronto haya una comunidad hispana con recursos y tutoriales del NeoAxis Engine.

  13. aunque no lo crean tengo 13 años me gusta mucho los juegos sobre todo los online y quiero crear juegos 3D creo que si le pongo empeño ah esto creo que si llegare a crear un juego desente ^^ mi papa es consultor sap y tambien sabe algo de programacion el me puede ayudar ^^ bueno un saludo

  14. bueno acabo de ver el comentario y es cierto ..crear un juego deja amplios conocimientos sobre el lenguaje.A decir verdad ,nunca entendi nada de programacion y mucho menos sobre este lenguaje ke parece sacado de la cabeza de terminator.pero aprendi bastante .y he logrado crear mi primer juego el cual empece de cero y hoy en dia puedo crear cosas mas exigentes…solo espero poder crear algun dia un juego como los mmorpg…pero para empezar a crear un juego aqui pueden ver de ke se trata…no necesitas tener conocimientos solo algo de ganas y listo ..!!!

    http://www.brothersoft.com/game-editor-download-1

  15. Ciro:
    De verdad que me entusiasmé mucho leyendo tu artículo.
    Yo trabajo con chiquilines con ciertas discapacidades por problemas de desarrollo, pero gran capacidad e concenrtación en lo que les gusta (Síndrome de Asperger). Me encontré esta página, buscando cómo entusiasmar a un adolescente en aprender más de sus intereses.
    Sus intereses en realidad tienen una mezcla de PC con mecánica y son restringidos.. Entonces decidí que era bueno buscar juegos de armado de máquinas, pero a su vez encontrar juegos de programación o robótica. De esta manera, también ampliar sus intereses, y que él evalúe que otras cosas pueden gustarle.
    El único tema es que yo no sé nada de programación, aunque siempre me gustó.
    Te escribié para agradecer pero a la vez para pedirte algún consejo de cómo arrancar. Me gustaría crear algo con él. trabajar juntos. Qué te parece?

    Muchas gracias!

Deja un comentario