Razón Artificial

La ciencia y el arte de crear videojuegos

Guía aprender programar videojuegos con C++

Escrito por adrigm el 24 de febrero de 2012 en Desarrollo Videojuegos, Programación | 24 Comentarios.

Si me preguntaran sobre cual es el mejor lenguaje para programar videojuegos, diría que depende. Depende del próposito, plataforma, tipo de juego y un sin fin de detalles más. Pero si me dijeran que dijera el más general, el más usado, el más potente y en el que estén hechos la mayoría de las superproducciones de las grandes compañías diría C++ sin pensármelo dos veces. C++ es el lenguaje por excelencia en el mundo de los videojuegos debido a que combina el bajo nivel y la eficiencia que da C con la programación orientada a objetos que es casi imprescindible en la programación de videojuegos.

El problema es que para los recién llegados al mundo de la programación empiezan a investigar y mucha gente les mete miedo diciendo que C++ es muy complejo y que no es un buen lenguaje para comenzar, esto es una verdad a medias, es cierto que hay lenguajes de más alto nivel que simplifican ciertas cosas a cambio de sacrificar control y eficiencia, pero por lo menos en mi caso eso es mucho peor para aprender. Me explico, cuando uno está aprendiendo tienen que entender el porqué de las cosas, cual es la finalidad de esto o lo otro, porque mejor usar este tipo de dato o este otro. Eso con lenguajes de alto nivel se pierde, te abstraen tanto del hardware y el bajo nivel que no comprendes porque se usan ciertas cosas. Se aprende “porque sí” y no se está aprendiendo realmente como funcionan las cosas. Con C++ tienes que comprender que es lo que está haciendo el ordenador y porque las cosas se hacen así. Yo sinceramente aprendo mejor las cosas cuando entiendo el porqué que cuando de me dicen: “simplemente es así”. Así que animo a todos los nuevos programadores a no tener miedo y a empezar a programar con C++ y a entender las cosas. Muchas veces nos dicen que son complejas, pero no es cierto al fin y al cabo la programación es sencilla, se complica cuando se empieza a abstraer y abstraer, pero de eso ya habrá tiempo.

Otro de los grandes escollos una vez se decide empezar con C++ es el temido “¿Por dónde empezar” muchos potenciales programadores se desaniman al poco tiempo porque no encuentran algo que les enseñe desde cero o se desmotivan viendo que tienen simples programas de consola, ¡Ellos quería programar videojuegos, no letras blancas sobre un fondo negro! Sobre esto último no puedo ayudar mucho, es la única forma de empezar, es muy difícil aprender conceptos básicos con aplicaciones gráficas. Sobre lo primero voy a intentar ayudar sobre el cámino que yo seguiría.

En la red hay mucha documentación para aprender a programar videojuegos, la mayoría como sabrás, en inglés (es lo que hay) de todas maneras en esta comunidad tratamos de generar y recomendar contenido en español y voy a intentar que así sea en esta pequeña guía de como aprender a programar videojuegos con C++.

1. Aprende C++

Parece obvio, pero a veces no lo es tanto. Para empezar basta con usar un editor de texto con el que generar los ficheros fuentes y un complidador, yo recomiendo el compilador gnu gcc (g++ para C++) y el IDE Codelite. Pero eso es cuestión de cada uno, hay muchos IDE y compiladores C++.

Una ves tengas eso necesitas un manual/curso/tutorial de C++ que te enseñe desde el principio. Puedes comprar un libro (hay muchos y muy buenos) buscar alguno en ingés en google (también los hay muy buenos), pero como dijimos antes vamos a tratar de darte una opción en español. Yo te recomiendo el curso de ConClase es muy popular y de los mas visitados en la red, un curso completo de C++ en español y gratuito.

A la vez que aprendes C++ te recomiendo que busques y leas mucho acerca de Algoritmos, métodos de programación y estructuras de datos. Lee y lee mucho pues es la única forma de aprender.

Una web que debería tener a mano todo programador de C++ es la siguiente, contiene toda la referencia de las bibliotecas estándar de C++, es bueno tenerla a mano siempre.

2. La STL

Una vez te defiendas con C++ a un nivel básico te darás cuenta que hacer ciertas cosas es algo tedioso, existe una colección de Bibliotecas que son un Standard de C++ y que la mayoría de los compiladores actuales trae llamada STL, La STL es casi fundamental para no volverte loco cuando los programas se vuelven complejos y necesitas tipos de datos avanzados. Descubrirás que contiene plantillas que facilitan el uso de tipos de datos avanzados como cadenas, vectores, diccionarios y un largo etcétera de utilidades.

A continuación dejo algunos documentos muy útiles para aprender a usar la STL.

3. Vamos a por los juegos

Aunque espero que durante las etapas anteriores hayas tenido imaginación y empezaras a crear tus propios juegos en modo consola tales como ahorcados, adivina el número, hundir la flota, etc. Ha llegado la parte de empezar con aplicaciones gráficas. Aquí uno debe elegir que camino tomar. Para los videojuegos el camino sería aprender a usar una biblioteca 2D. Muchos se desilusionan en este punto nueva mente porque ellos quieren hacer super juegos 3D que compitan con el último juego de moda, pero primero se debe aprender a caminar para después correr. Aprender como se trabaja en un proyecto de videojuego y con bibliotecas externas, aprender a usar imágenes y conceptos de programación gráfica.

Existen varias bibliotecas gráficas con las que empezar, pero mi recomendación es SDL, tiene bastante reputación en el mundo de los videojuegos 2D, es simple y existe mucha documentación. En este apartado es cuando es más difícil encontrar documentación en español, pero existe un gran trabajo en español en forma de wiki perfecto para comenzar en este maravilloso mundo.

Esto estupendo tutorial no se limita a mostrat y explicar las características de SDL, sino que trata de explicar el buen uso de la misma y finalmente tiene el desarrollo de un videojuego paso a paso. Totalmente recomendada para iniciarse con gráficos.

4. Sigue aprendiendo

A estas alturas ya habrás aprendido una base y sabrás que camino debes seguir, que cosas debes aprender y como tienes que moverte. En todo momento tienes que estar leyendo, documentándote y aprendiendo es la única forma de poder entrar en este mundo del desarrollo de videojuegos que está avanzando cada día. Para eso te recomiendo un par de webs sobre programación de videojuegos, desgraciadamente, la mayoría en inglés.

  • http://gpwiki.org/ – Impresindible tenerla en favoritos para todo programador de videojuegos. La wiki por excelencia del desarrollo de videojuegos.
  • http://www.gamedev.net/ – Otra muy importante, comunidad muy activa, te enterarás de las últimas novedades y en los foros siempre hay alguien dispuesto ayudar, siempre que sepas inglés.
  • http://www.gamasutra.com/ – A tener muy encuenta, ofertas de trabajo, grandes artículos… Añadela a tu lista de webs a  mirar cada día.
  • http://www.stratos-ad.com/ – La comunidad más grande de desarrollo en español. Puedes encontrar muy buenas cosas en los foros.
  • http://www.google.com/ – No no es coña, está es la más importante de todas. Lo de arriba es una guía para comenzar, pero te surgirán miles de dudas a cada paso que des. Google es tu amigo, lo sabe casi todo y lo resuelve casi todo si sabes buscar bien. Aprende si no sabes a usar todos los trucos de google. Un programador y más uno de videojuegos debe ser autodidacta y aprender a buscarse la vida en este competitivo y apasionante mundo.

Espero que te sirva de algo esta pequeña guía si quieres adentrarte en el mundo de la programación de videojuegos y no sabias como hacerlo.

24 Comentarios en "Guía aprender programar videojuegos con C++"

  1. […] This post was mentioned on Twitter by pablo ar, Razon Artificial. Razon Artificial said: Guía para aprender a programar videojuegos con C++. http://bit.ly/gg9tXJ […]

  2. CBeneyto dice:

    Me ofende que no este entre las webs http://www.creagamers.es!
    xD jajajajajaja

    Pronto… compañero… prontoo… muahahaha

  3. devil dice:

    Adrigm quisiera saber si te vas a pasar a c++ y no vas a desarrollar nada en c# y xna.

    • adrigm dice:

      Devil en este mundillo hay que aprender de todo y saber de todo. No te fies de lo que yo haga usa lo que más te guste.

      No he seguido con el tutorial de XNA por no tenerlo disponible ahora mismo (Windows y XNA) Espero terminarlo pronto.

  4. Carlos Ramos dice:

    Gracias por la recopilación de sitios en español :).

  5. Ariel dice:

    Adri, muy buenos consejos, te quiero pedir otro, estuve siguiendo la guia que dejaste de SDL, la habia encontrado anteriormente por casualidad y me encuentro perdido en la parte de colisiones, puntualmente cuando hay que “redibujar” una figura limitando su espacio con varios rectangulos. Quería saber si conoces algun libro de SDL que explique bien como funciona esto y otra cosa que encuentro complicada es el mapeo, es decir pegar los tiles y construir el mapa, por ahi recomendaban el Mappy pero tambien tuve problemas, por esto es que si sabes alguna página, libro, o lo que sea que me puedas recomendar, te agradecería mucho. Saludos

  6. Xavyer dice:

    Hola mi nombre es Xavier tengo 35 años, hace años en mi época de escuela mi ilusión era aprender sobre la programación de videojuegos, sin embargo en ese entonces no había información disponible, recuerdo cuando el jefe de carrera me dijo “por desgracia aquí no hay nada que te pueda servir para lo que tu quieres”, aunque en ese momento respecto a mis compañeros de clase podría decir que era bueno programando en C++, la vida me fue llevando por otros rumbos, hoy en día mi vida profesional gira alrededor de la ingeniería industrial, hace unos días recordé el interés que alguna vez tuve sobre este tema y me dije … por que no volver a tomar eso que dejé, hoy estoy decidido a retomarlo, se que será difícil, pero me ha renacido ese interés, confío en que no sea muy tarde, y pues bueno creo que estoy en el mejor punto para empezar..

  7. Hey AdriGM muchas gracias por el aporte no tengo nada para darte, pero si un enorme GRACIAS y mis deseos de aprender programar, y si lo logro estarás en mi mente como tutor virtual, y sin mucho pedir desearía como desarrollar el juego online y reglas de conexión TCPIP y demas, muchas gracias estaré siguiendo tu blog!

  8. lisandro dice:

    chabon me fuiste como el abrazo de un angel en un mundo de obscuridad ,
    fue como que me dieras una patada para inpulsarme a aprender de programacion en C
    gracias

  9. miguel dice:

    que interesante todo lo que publicaste tengo algunas inquietudes de la programacion y no se si me podrias ayudar te agradeceria mucho

  10. Excelente apreciación del desarrollo de juegos. Básicamente todos sufrimos cada vez que anteponemos la palabra “complejo” a las cosas…. XD
    Siempre me a pasado. Pero este post, realmente me convence que es necesario dar pasos seguros, que pasos agigantados y terminar desesperado.
    Te felicito y espero que sigas publicando mas contenido como este, para seguir orientando a los aspirantes como yo…. XD

  11. lavoxsorge@hotmail.com dice:

    muchas gracias.

    No sabia por donde empezar y es una guia razonable y con muy buena información.

  12. gerson dice:

    excelente guia! no tenia idea de como iniciar gracias!

  13. David dice:

    Antes que nada, gracias por tu gran blog. Siempre me ha parecido que tus artículos son de gran calidad, de lo mejor de la web en español (a pesar de la baja frecuencia).
    Hace un tiempo leí este post, y después de mucho tiempo queriendo hacer juegos, me lancé a ello.
    Sabía que sería un camino difícil, pero todavía no he abandonado. Seguí todo el curso de C con clase, buenísimo, y después consideré que no era necesario aprender la STL. Gran error, pero bueno, me salte ese paso y fui a por el siguiente: SDL.
    Y creo que ese es el gran error de este artículo. Considero que SFML es superior a SDL, pero incluso dejando eso de lado, siendo principiantes, lo más importante es la documentación. Y la documentación de SDL es horrorosa, mientras que la de SFML te hace las cosas mucho más fáciles. De hecho incluso tienen tutoriales para “instalar” SFML en Code::Blocks y Visual Studio, que aunque parezca una tontería, es una gran ayuda.
    Espero que tomes el comentario en cuenta, y después de esto: a por la STL!

  14. iAndresC dice:

    Muchas gracias por hacer este tema y esta pagina especificamente, es muy útil toda esta información que nos brindas; yo la verdad acabo de empezar mis estudios universitarios y siempre me ha interesado esto de la programación, sobretodo en el campo de los videojuegos ya me gustan mucho, pero no me había animado a estudiarlo por simple pereza; pero ahora quiero aprender y empezar a dar mis primeros pasos en este mundillo de la programación de videojuegos. Voy a comenzar a estudiar algunas de las cosas que mencionas y a meterme de lleno en la programacion en C++ por ahora.

    Saludos desde Colombia, y de nuevo gracias por el aporte; de verdad se agradece ya que como dices es difícil encontrar buenas fuentes de información (que por lo menos sean fiables) en español.

  15. Quiero hacer una consulta soy dueño de una academia de formación para niños y me gustaria poder incluir juegos sencillos a nivel gráfico, lo importante es la actividad no el juego en si mismo, que me permitan que trabajen en casa. Mi duda es si esto es muy complejo de hacer y con que programa podría empezar.

  16. ariel dice:

    excelente guía !!

  17. José Pablo dice:

    Hola, muy interesante toda la información, pero este enlace que dejaste no funciona: http://softwarelibre.uca.es/wikijuegos/

  18. Raquel dice:

    Buenas, muchas gracias por la guía.
    Me gustaría preguntarte hasta que nivel de algoritmia se puede necesitar, pues no se si me valdría más la pena darle primero un repaso o empezar directamente con los videojuegos. He hechos los esquemas básicos (divide and conquer, backtraking greedy… ) y los básicos de grafos. ¿Hace falta que me mire más o con esto me podría defender?

  19. matias paredes dice:

    Desde hace años que estoy queriendo hacer un juego, pero no me animaba. Ahora me voy a dedicar completamente en este proyecto. Como bien dices, es mejor comenzar con el 2D, así que seguiré ese consejo. Solo puedo decir: GRACIAS
    PD: Si todo sale bien, para marzo del año que viene podría empezar a desarrollar Magic World

  20. Ayudando-Ayudame dice:

    Hola Bueno BUsco personas que sepan sobre seguridad y programacion de web una ayuda creare un juego y bueno busco una buena seguridad y alguien que sepa programar bien alguien sabe que es Gunz es un juego muy divertido si alguien sabes sobre esto o que me ayude en la proteccion y programacion de la web o sepa trabajar con una source por favor Escribanme a mi Facebook Hector Ch

  21. Ayudando-Ayudame dice:

    Hola Bueno BUsco personas que sepan sobre seguridad y programacion de web una ayuda creare un juego y bueno busco una buena seguridad y alguien que sepa programar bien alguien sabe que es Gunz es un juego muy divertido si alguien sabes sobre esto o que me ayude en la proteccion y programacion de la web o sepa trabajar con una source por favor Escribanme a mi Facebook Hector Ch :()

Deja un comentario