Sistemas vs. Videojuegos

Todo desarrollador o analista de sistemas es consciente de la gran cantidad de conocimientos que se deben adquirir para estar en el rubro. Claro que todos podemos soñar en ser profesionales, pero la realidad es que no sabemos qué tan duro es hasta que no crecemos día a día como tales.

sistemas vs video OK

Cumplidos mis primeros 6 meses en Baufest, en ocasiones pienso en mis primeras experiencias con la tecnología. Entré en el mundo de los videojuegos en el año 2006, cuando comencé estudiando la carrera de "Diseño y Programación de Simuladores Virtuales" en la Escuela Da Vinci. Ese fue el primer contacto que tuve con la proramación.

Es bien sabido por todos que la facultad o un terciario te dan un contenido acotado y no enseñan la totalidad del panorama que representa esta profesión. Con el cambio de rumbo a sistemas, entiendo finalmente que debo aprender a programar desde cero y quiero compartir con todos de qué trata el desarrollo de videojuegos.

Seguramente muchos desarrolladores de aplicaciones se pregunten, ¿qué tan distinto puede ser desarrollar un juego? Lo sé, porque me preguntaba lo mismo sobre desarrollar sistemas. Aunque parezca mentira, hay un abismo entre desarrollar un juego y un sistema. No sólo cambia el nivel de análisis, pensamiento y programación, sino también el testing.

¿Qué es necesario para desarrollar un juego?

Todo arranca por la idea. Más allá de la obviedad, no es tan simple bajar la idea a un concepto de proyecto realizable. Se la debe desfragmentar en el concepto al que apunta el juego, el guion y la historia que se quiere contar. Asimismo, es fundamental el tipo de juego a realizar (estrategia, acción, aventura, etc.), la ambientación gráfica, los personajes y las mecánicas que manejará el proyecto.

Al igual que en sistemas, los videojuegos también cuentan con un área visual, un área de testing, un área de análisis (guionistas, artistas conceptuales, etc.) y un área de desarrollo.

Hasta este punto parecería una tarea sencilla y entretenida, pero lo relevante de este artículo es lo referido al mundo de la programación. En este sentido, para los desarrolladores de sistemas, la programación de videojuegos ofrece un mundo completamente nuevo con una variedad muy grande de posibilidades. 

Es probable que se pregunten en qué puede variar si programar es programar, ¿no es verdad? Pues en la realidad, son paradigmas muy diferentes, y lo principal que hay que comprender es que los videojuegos se rigen en un ambiente tridimensional con los famosos ejes X, Y, Z.

Programar un videojuego

Alguna vez se cuestionaron en el colegio "¿para qué estoy estudiando seno, coseno y tangente? Esto no lo voy a usar jamás en la vida". Para sorpresa de todos, o al menos la mayoría, los ejes cartesianos, trigonometría y la física son algunos de los pilares del desarrollo de videojuegos. Y si las matemáticas son sus favoritas, los invito a adentrarse en este mundo que pone a prueba los conocimientos y los skills de programación.

Tranquilos, no todo es matemáticas en los juegos de vídeo. La programación abarca muchos conceptos y campos distintos, entre los cuales uno de los más llamativos es la inteligencia artificial.

Las principales disciplinas de programación que encontramos en los videojuegos son:

Programación de motores:

Es la base del mundo en el cual el juego se verá sustentado. Se encarga de la comunicación con el sistema operativo, gestión de memoria, gestión de recursos, etc. Requiere un conocimiento sólido en la plataforma a desarrollar, algoritmia, optimización y gestión a bajo nivel.

      Programación gráfica:

    El objetivo principal es lidiar con las API´s gráficas como DirectX u OpenGL. Se requiere el debido conocimiento sobre la API a utilizar, como también entendimientos avanzados en matemáticas, álgebra y geometría.

      Programación de física:

     Esta área se va a encargar de emular los comportamientos físicos de los objetos dentro del videojuego. Son requeridas competencias en matemática vectorial, física dinámica y mecánica. 

      Programación de inteligencia artificial: 

     Aquí nos dedicamos a crear los enemigos y non player characters (NPC) inteligentes. Para lograr eficazmente este propósito, debemos aprovechar las matemáticas y algoritmos de IA como pathfinding, máquinas de estado finitos o redes neuronales.

      Programación de redes:

      Es todo lo referido a la conexión de una máquina con otra o con un servidor. Maneja toda la lógica de multijugador y servidores.

     Programación de gameplay: 

      Además de integrar el resto de las partes desarrolladas por las áreas anteriores, es el área destinada a programar la lógica del juego y sus reglas.

Como podemos observar, el desarrollo de videojuegos mezcla conocimientos en matemáticas, física y programación. Dependiendo el área en la que nos enfoquemos, se requerirá conocer más profundamente ciertos temas.

Otro punto importante es seleccionar con sabiduría el lenguaje de código y, en caso de optar por un motor gráfico existente (Flash, Unreal Engine, Unity, etc.), ver cuál es el que mejor se adapta a nuestras necesidades.

En mi opinión, es una experiencia que aquellos que aman programar deben disfrutar al menos una vez en su vida.  A través de esta nota, aliento a aquellos que son curiosos o tienen una idea en mente que le den una oportunidad.

Y para aquellos interesados en iniciarse en este mundo, les recomiendo empezar con programas que resuelven la integración visual con código, como el Unreal Engine o Unity, por el simple hecho de tener un feedback visual instantáneo al escribir sentencias de código.

A modo de cierre, un consejo para todos los amantes de la programación: creen muchos juegos y sistemas. Codear, probar y volver a hacerlo es la única forma de aprender, mejorar y crecer como programador, siempre con paciencia y empeño.

Unreal learn tutorial link:

https://docs.unrealengine.com/en-us/Videos

Unity learn tutorial link:

https://unity3d.com/es/learn/tutorials

Autor:

Rodrigo Vallaro

Baufest Dev FullStack

 

Contacto

info@baufest.com