Temario/Desarrollando un videojuego

De Tutorial LibSDL

[editar] Desarrollando un videojuego

Tabla de contenidos


[editar] Objetivos

  1. Situarnos en el mundo de los videojuegos.
  2. Conocer las herramientas necesarias para realizar un videojuego.
  3. Conocer la estructura de un videojuego y los subsistemas que intervienen en él.
  4. Determinar qué tipo de videojuego vamos a realizar.


[editar] ¿Qué necesitamos?

[editar] Introducción

Antes de empezar a desarrollar un videojuego vamos a ver dónde estamos y dónde queremos llegar. Para realizar el recorrido de un punto a otro necesitamos tener claro qué tenemos que saber y qué herramientas debemos manejar para poder cumplir con el objetivo de realizar una primera aplicación gráfica de este estilo.

Estas herramientas son comunes para el desarrollo de casi cualquier tipo de aplicación y lo que haremos es presentar brevemente cada una de ellas. Es importante que hagas un esfuerzo por conocer las distintas herramientas ya que algunas serán de gran ayuda mientras que otras serán fundamentales en el proceso de desarrollo del videojuego.


[editar] Herramientas para el desarrollo

En esta sección vamos a ver qué herramientas necesitamos para desarrollar nuestro primer videojuego. Lo primero y fundamental es dominar algún lenguaje de programación. En este tutorial utilizaremos la librería SDL, basándonos en los lenguajes C y C++. C, además de ser el lenguaje nativo de esta librería, es el lenguaje de programación más potente para la creación de videojuegos. Existen adaptaciones de la librería a muchos otros lenguajes, y una vez dominada en C++, no te será complicado dar el salto al desarrollo sobre otros lenguajes.

Otra razón para tomar esta decisión es que el lenguaje de programación más usado en la historia del desarrollo de los videojuegos profesionales ha sido C, aunque desde los años 90 el lenguaje C++ le ha ido ganando terreno gracias a las ventajas que añade sobre el primero, como por ejemplo la orientación a objetos, pudiendo usar todo aquello que nos resultaba ventajoso del C en C++.

Logo GNU/GCC
Logo GNU/GCC

Como vamos a programar, como no podía ser de otra forma, necesitamos un compilador. Hay compiladores libres y propietarios, gratuitos y de pago. En nuestro caso optamos por el compilador de C de GNU GCC ya que es libre y gratuito, y cumple con los estándares impuestos a los lenguajes de programación que vamos a utilizar.

Además, haremos uso de las GNU Binary Utilities, herramientas entre las que se encuentra el enlazador, y del depurador de GNU. Originalmente GCC significaba GNU C Compiler (compilador GNU para C) porque sólo compilaba lenguaje C. Posteriormente se extendió siendo capaz de compilar C++, Fortran, Ada y otros. Otra de las ventajas del compilador de GNU es que dispone de soporte para un gran número de arquitecturas, lo que nos proporciona una capa de abstracción a la hora de trabajar con el lenguaje que nos facilitará la portabilidad de nuestro código.

A estas alturas ya tenemos claro que necesitamos un buen lenguaje de programación y su correspondiente compilador. Ahora llega la hora de decidirnos por un editor de textos donde escribir nuestras líneas de código. Ésta es una elección personal. En el tutorial hemos optado por GNU Emacs como editor de textos para escribir los ejemplos y realizar pruebas de compilación. Eres libre de utilizar el que más te guste. Eso sí, necesitas uno.

En casi todas las distribuciones de Linux tienes disponible numerosos editores libres de distintas generaciones. Desde los más adorados como Vi o Emacs hasta los modernos Anjuta o Kdevelop que ofrecen entornos integrados de desarrollo que disponen de opciones como la navegación de clases y la posibilidad de autocompletar. Como recomendación personal te aconsejo que no te ates a ningún entorno integrado de desarrollo, ya que te hará perder versatilidad como programador.

Kdevelop y Anjuta
Kdevelop y Anjuta

Como depurador se aconseja, como ya hemos comentado, GNU/DBG con su front-end DDD. GNU/DBG es un depurador y perfilador que nos permite analizar nuestros programas en C/C++ en modo consola. Añadiéndole DDD conseguiremos poder depurar nuestro programa en un entorno más amigable. El uso de depuradores es muy importante, sobre todo en los inicios, ya que es cuando menos conocemos lo que nos tenemos entre manos y necesitamos comprobar paso a paso qué hace nuestra aplicación.

La última herramienta, y la que vamos a exponer en este tutorial, es el uso de una librería que nos ayude a construir nuestro videojuego. La SDL nos libera de numerosas tareas como la presentación de imágenes en pantalla y nos facilita otras muchas, como la captura de eventos o la reproducción de sonidos. SDL ha obtenido numerosos premios desde su aparición en el mundo del videojuego, es libre y gratuita... a esto se le añade numerosas virtudes de implementación, ya que, la mayoría de programadores que han trabajo en ella son profesionales con experiencia en el mundo de los videojuegos con lo que han realizado la librería sabiendo qué se necesita exactamente para desarrollar un videojuego. ¿Qué más podemos pedir? Presentaremos unos criterios más sólidos sobre la elección en el transcurso del tutorial.

Una vez aprendamos a usar la librería y a crear nuestros primeros videojuegos es fundamental utilizar herramientas para controlar las versiones que vayamos generando de nuestro código así como planificadores de tareas para no dejar el desarrollo de nuestras aplicaciones al capricho del paso del tiempo.

Existen varias herramientas gratuitas para la planificación de actividades. Puedes utilizar KPlato, TaskJuggle, Gantt Project... todas ellas alternativas libres y gratuitas. Con este tipo de herramientas pasa lo mismo que con los editores: todas tienen sus ventajas y sus inconvenientes y el uso de una alternativa u otra se basa más en la comodidad relativa a cada usuario que en características concretas que ofrezca el programa en cuestión.

El control de versiones se puede hacer de forma manual pero es muy recomendable utilizar herramientas que nos faciliten esta gestión. Ejemplos de herramientas para el control de versiones son CVS, Subversión, Sourcesafe, Git... todas ellas disponibles para su descarga ya que son libres y gratuitas. Seguramente en los primeros desarrollos que realices no necesites de una herramienta de este tipo, sin embargo si te embarcas en un proyecto al que le quieras dar continuidad será fundamental que controles los avances y cambios dentro del proyecto.

[editar] Conocimientos previos

En esta sección vamos a realizar una introducción a los conocimientos que son necesarios para abarcar el desarrollo de un videojuego. Serán presentados de forma general con el objetivo de obtener una vista global de lo complejo que puede llegar a ser un desarrollo de este tipo.

Incluso más importante que las herramientas son los conocimientos que tengamos de programación, o mejor dicho, conocimientos de desarrollo software. Puede que muchos de éstos nos sean necesarios cuando creemos pequeñas aplicaciones, pero en cuanto el videojuego vaya aumentando su complejidad, serán fundamentales.

Para desarrollar un videojuego debemos programar con cierta habilidad. En nuestro caso, como ya hemos comentado, vamos a utilizar los lenguajes de programación C y C++. Los conceptos que aporta el lenguaje C++ son fundamentales en la programación de videojuegos ya que proporciona aspectos, como el de clase, que facilitarán el proceso de desarrollo de una aplicación de este estilo.

Es requisito el conocer la definición y el manejo de diferentes estructuras de datos. Este aspecto es parte fundamental de los conocimientos básicos que debe tener cualquier programador. Para facilitar el uso de estructuras de datos agrupadas disponemos de la biblioteca STL que es estándar en C++. Actualmente viene incluida en todos los compiladores disponibles ya que es un estándar. Conviene aprender cómo utilizar las estruturas de datos que nos proporciona esta librería así como su manejo ya que nos ahorrarán mucho trabajo creando un código más ordenado y elegante.

Es fundamental tener conocimientos de ciencias, no es que tengamos que ser unos expertos en física y matemáticas pero la mayoría de los comportamientos en un videojuego se basan en funciones matemáticas. En cualquier videojuego podrás observar cómo se aplican, como mínimo, cierta cinemática básica en los personajes o elementos del mismo. Como todo lo anterior, en nuestros primeros proyectos, el uso de la física será básico e irá aumentando según se incremente la complejidad de nuestro videojuego. Uno de los grandes avances en el desarrollo de videojuegos es el de asemejar cada vez más el entorno donde concurre la trama del videojuego al mundo real. Si te gustan los videojuegos de deportes habrás podido observar cómo han ido superándose año tras año en la simulación de las condiciones físicas de los eventos deportivos. En los primeros tiempos de los videojuegos jugar al tenis era manejar una línea blanca que hacía rebotar un cuadrado y actualmente para empezar una partida tienes que elegir hasta el tipo de suelo donde va a transcurrir la partida según se adecúe más a tu estilo de juego.

Pong vs Tenis 3D
Pong vs Tenis 3D

La inteligencia artificial es el pan de cada día en el desarrollo de videojuegos. En cuanto tu aplicación alcance cierta envergadura tendrás la necesidad de incluir abundantes algoritmos de inteligencia artificial. Con estos algoritmos podremos configurar la dificultad del videojuego así como otros muchos aspectos. Según lo eficaz que sea el algoritmo, y el objetivo que queramos conseguir con él, podremos tener enemigos indestructibles o bien un videojuego asequible a casi cualquier jugador. Es importante no complicar el videojuego más allá de lo estrictamente necesario. Es fundamental que el jugador pueda superar los retos ya que si el juego es demasiado complicado, el usuario se aburrirá y antes o después lo abandonará. Imagínate que estamos desarrollando un videojuego de carreras y siempre configuramos uno de los rivales con el coche que puede alcanzar la mayor velocidad y además traza la carrera perfectamente en todas las vueltas. Será prácticamente imposible ganar a este rival, lo que puede tener como consecuencia que el juego pierda todo su interés.

Sería bueno, pero no es requisito indispensable, haber manejado alguna otra librería gráfica o al menos tener conocimientos básicos de programación gráfica. Si no es así no te preocupes, este tutorial está pensado para ti.

Como puedes ver hay que saber un poco de todo para desarrollar un videojuego. Por esto mismo, antes de empezar a desarrollar una aplicación de estas características, debes estar iniciado en el mundo de la informática y de la programación. Por ejemplo, si quieres programar un videojuego multijugador, seguramente quieras darle soporte de red. En este caso necesitarás conocimientos de redes. Es cierto que la librerías que vamos a manejar te facilitará el trabajo con la red pero si no tienes unos conocimientos básicos de redes no serás capaz de hacer que el videojuego se comporte como deseas.

Esto lo podemos hacer extensible a las distintas funcionalidades que ofrece SDL. Necesitamos unos conocimientos previos que cimenten el trabajo que vamos a realizar con los diferentes aspectos con los que nos permite interactuar la librería. SDL sólo es una herramienta para que pongas en práctica toda tu capacidad de creación.

[editar] Diseño multimedia

Un videojuego conlleva un importante proceso de diseño multimedia. No basta con conocimientos en informática, matemáticas, física, inteligencia artificial... sino que además hay que diseñar el videojuego, su idea, el desarrollo, los gráficos, el sonido...

Lo ideal sería tener una persona o un equipo de personas encargadas de cada una de estas tareas, pero no suele ser así, y aún menos cuando estamos empezando. En el momento en el que nos encontramos, que lo que queremos es realizar nuestras primeras aplicaciones, sería absurdo contratar a un equipo de profesionales que nos apoyase en nuestra tarea. Existen numerosas galerías en Internet que te ofrecen contenido multimedia libre y gratuito del que puedes hacer uso para tus primeras aplicaciones. En nuestro caso vamos a realizar un videojuego en el que vamos a hacernos cargo de todo el proceso de desarrollo. Con esto buscamos poder comprender en profundidad el esfuerzo que suponer realizar un videojuego.

No está de más que seas capaz de dibujar tus propios personajes. Para esto se suele usar alguna herramienta de dibujo o de retoque fotográfico. Desde aquí te recomendamos The Gimp, que en la actualidad es uno de los programas de dibujo libres que están teniendo una mayor aceptación y desarrollo. Existen numerosos programas para realizar esta tarea y como en muchas ocasiones es cuestión de gusto y licencias. Normalmente cuando alguien empieza en el mundo del videojuego crea unas imágenes básicas con las que ir trabajando la lógica del videojuego que subyace bajo ellas. Cuando nos embarcamos en un proyecto de envergadura lo normal es recurrir a un diseñador gráfico para que nos cree unas imágenes con un aspecto más profesional y que serán las definitivas para nuestro videojuego.

The Gimp
The Gimp

De igual manera estarás interesado en que tu videojuego disponga de sonido y música. Tendrás que componer la banda sonora de tu videojuego así como los diferentes sonidos que se produzcan en él si no optas por hacer uso de bibliotecas libres. Un buen software para realizar esta tarea es Audacity, que como Gimp, es libre y gratuito.

Como puedes ver, si estás solo en el desarrollo del videojuego tienes que saber tocar todos los palos del contenido multimedia para las aplicaciones. Como en el desarrollo de cualquier aplicación la composición de un equipo o una comunidad ayuda mucho al desarrollo de la misma.

[editar] Anatomía de un Videojuego

[editar] Introducción

Cada vez que te sientas delante de un videojuego dentro del ordenador están ocurriendo un número impensable, a priori, de cosas. El proceso de mover un personaje conlleva un gran esfuerzo computacional del que solemos abstraernos cuando estamos disfrutando del videojuego.

Es fundamental que el videojuego tenga una respuesta y una velocidad adecuadas. Estos parámetros y el de la dificultad definirán la jugabilidad de la aplicación. Todos los elementos de un videojuego parecen funcionar a la vez y tener vida propia pero esto es sólo una apariencia. Dentro del programa van ocurriendo cosas secuencialmente que consiguen que el juego se muestre de esta manera. Nuestro objetivo es conseguir una secuencialidad natural que haga que el juego sea practicable.

Vamos a intentar dar en este apartado una visión general, sin entrar en detalles de implementación, de cuál debe ser la estructura de un videojuego, las partes que lo componen y qué funciones tienen.

[editar] El desarrollo de la idea. Los tipos de juegos

No sé si lo habrás notado alguna vez pero en muchas películas americanas de terror adolescente da la sensación de que el final de la película ha sido, o lo ha parecido al menos, improvisado. Después de dos horas en las que el ambiente creado en la película nos ha hecho dar algún salto que otro, que el malo haya resucitado unas diez o quince veces, todo termina de buenas a primeras.

Seguramente si recuerdas alguna película con algo más de nombre que estas "americanadas" será imposible pensar en una sensación de este estilo ya que el guión de éstas suele ser estudiado y elaborado cuidando hasta el más mínimo detalle.

Algo parecido pasa a la hora de desarrollar un videojuego. Un buen guión, una buena idea, una historia bien elaborada es fundamental para enganchar al jugador en nuestra aventura. En este aspecto prima más la originalidad del que elabora la historia ya que no existe una técnica bien definida que nos proporcione un buen relato automáticamente.

El primer paso que tenemos que dar a la hora de desarrollar un videojuego es plantearnos que tipo de juego queremos elaborar. De este planteamiento surgirán las necesidades que vamos a tener que satisfacer. Supongamos el caso que queremos desarrollar una aventura gráfica. Una aventura gráfica es un juego donde se desarrolla una historia donde el jugador tiene que ir encontrando pistas que descubren misterios que nos permiten avanzar en la historia. Este tipo de juegos depende muchas veces de pruebas de inteligencia o resolución de puzzles para avanzar, por lo que es fundamental el diseño de este tipo de enigma, de los diálogos, en definitiva el guión debe estar muy logrado para mantener la atención del usuario. Como puedes ver si nos encontramos en este caso deberemos de elaborar una historia bien fundada con diferentes caminos a seguir, pistas... una trama en toda regla. Una vez planteado necesitaremos crear los personajes, sus movimientos, saber que acciones van a realizar y como van a interactuar con el jugador. Con todo esto, y sabiendo la lógica que va a seguir el videojuego, deberemos de realizar el análisis software para un posterior diseño que implementaremos según el tipo de dispositivo o plataforma en el que vayamos a ejecutar nuestra aplicación. Por si no conoces bien este tipo de videojuegos algunos ejemplos históricos son Monkey Island o el Broken Sword.

Si decidimos desarrollar un juego arcade seguramente también necesitaremos una historia, pero no hará falta que entremos en tanto detalle como en el caso anterior. Son los primeros juegos que aparecieron en el mercado del videojuego. Se basan en medir la destreza del jugador en diferentes niveles. Uno de los aspectos fundamentales de este tipo de juegos es la rapidez, incluso más que la propia estrategia del juego. Estos juegos se suelen subdividir en niveles que el jugador debe superar cumpliendo unos ciertos objetivos. Desde el inicio se les dotó de una historia que acompañaba a la acción del juego para darle un poco más de sentido a todo lo que estaba ocurriendo en nuestra pantalla. Un tipo de juego arcade son los juegos de acción utilizando esta denominación a juegos digamos algo más violentos. Otro tipo de juego arcade muy popular son los juegos de plataformas, que no son mas que juegos que tenemos que superar dando saltos entre "plataformas" consiguiendo ciertos ítems que nos dan puntos o bien tenemos que acabar con los enemigos. Ejemplos archiconocidos de estos tipos de juegos son el Sonic, SuperMario Bross, Prince of Persia... la lista puede ser interminable. Actualmente el sector de los videojuegos arcade está copado con los juegos en tres dimensiones. Resumiendo, los tipos de arcade se centran en la acción que se está realizando más que en la historia que se desarrolla en el juego. En proyectos de gran envergadura se cuenta con un equipo de guionistas. Como seguramente no sea este nuestro caso este tipo de juego es uno de los más asequibles de realizar a la hora de introducirnos en el desarrollo de videojuegos.

Juego arcade: Tux
Juego arcade: Tux

Otro tipo muy popular de videojuegos es el de simulación. Estos juegos sumergen al usuario en algún tipo de acción que no podría realizar si no es con este simulador. Por ejemplo si jugamos a un simulador de vuelo podremos pilotar un avión dentro de un entorno que pretende que la acción sea lo más real posible. Hay muchos tipos de simuladores como deportivos, de conducción... Este tipo de juegos está consiguiendo un realismo que lleva a que sus nuevos usuarios necesiten un mayor periodo de aprendizaje debido a la complejidad que llegan a tener estos simuladores. En cuanto a los simuladores deportivos son juegos que como puedes intuir nos sumergen en un deporte determinado. Suelen ser juegos para disfrutar en grupo y requieren una gran habilidad, rapidez y precisión. El jugador tiene control total sobre el jugador o jugadores que maneje. Los algoritmos que dotan de inteligencia a los rivales son fundamentales en este tipo de juegos ya que proporcionaran que el juego sea más o menos complicado. Es importante que un juego no sea demasiado complicado ya que esto puede degenerar en que sea desesperante y que el jugador lo abandone. Estos tipos de juegos no son adecuados como un primer proyecto por su complejidad. Ejemplos de estos tipos de juegos son el Flight Simulator o el popular FIFA.


Juego de simulación
Juego de simulación


Podemos agrupar en otra categoría a los juegos de estrategia e inteligencia. Los juegos de estrategia se llaman así porque coordinan acciones con una finalidad concreta. El jugador debe de pensar la estrategia más adecuada para conseguir su objetivo, normalmente, con el menor esfuerzo posible. En la mayoría de los juegos de estrategia actuales podemos manejar más de un personaje y otras tantas actividades como manejar tropas de ataque que nos ayuden a conseguir nuestro objetivo. Dentro del tipo de juegos de inteligencia clasificamos también a aquellos juegos que podríamos definir como algo más estáticos pero que suelen ocupar horas de diversión. Se trata de juegos como Sokoban, Sudoku, el mismo ajedrez o el famoso Tetris. Estos son juegos de unas características que nos permiten, si tomamos de algún libro la lógica del juego, que practiquemos el desarrollo de un videojuego sin una complejidad excesiva ya que se trataría de implementar dicha lógica y proporcionar al juego de una interfaz adecuada. Dentro de esta categoría podemos englobar también a los juegos de mesa y a los juegos de azar ya que desde el punto de vista del desarrollo tienen unas características parecidas.


Juego de estrategia
Juego de estrategia


Algunos autores engloban a los juegos de rol dentro de los de estrategia. En un juego de rol manejamos un personaje creado con unas características concretas que va evolucionando según las decisiones o caminos que tome el usuario. Suelen ser juegos en las que se invierten muchas horas como los de estrategia. En estos juegos suelen existir varios objetivos que se entrelazan. Actualmente con la posibilidad de jugar a este tipo de videojuegos en red está aumentando su popularidad. Esto permite que el mundo en el que nos movemos sea innovador e imprevisible por lo que hace al juego mucho más interesante. Debido a la inteligencia y complejidad de algoritmos que soportan este tipo de juegos tampoco los recomendamos para adentrarnos en el mundo de la programación de videojuegos.

El proceso de desarrollo de un videojuego suele ser incremental. De unas primeras versiones funcionales vamos añadiendo características que van complementando el videojuego. Tienes a tu disposición un capítulo donde se realiza paso a paso el desarrollo de un videojuego que puede servirte de guía a la hora de elaborar tus proyectos.

[editar] Resumen

Para desarrollar un videojuego hay que tener conocimiento de todas aquellas materias que queramos aportar a nuestro videojuego. Existen numerosas herramientas que nos van a facilitar el trabajo del desarrollo del mismo pero que no pueden sustituir a los conocimientos básicos que debemos de tener de las diferentes materias. No sólo la informática abarca el desarrollo de videojuegos, la creatividad y las ciencias son partes fundamentales del mismo.

La estructura de un videojuego responde a una estructura básica en forma de bucle. En cada una de las partes que se divide esta estructura tiene encomendadas unas tareas bien definidas. Aunque todos los pasos son importantes es fundamental cuidar la implementación del procesamiento de la información ya que de éste dependerá gran parte del éxito de nuestro videojuego.

Existen numerosos tipos de videojuegos. Para comenzar en el desarrollo de videojuegos es recomendable hacerlo por aquel tipo que añada menos trabajo adicional al propio hecho de implementar el videojuego en un sistema concreto. Esto nos permitirá obtener una base con la que trabajar para luego tener una vista más amplia del desarrollo de videojuego y nuestras limitaciones en este campo. No es recomendable empezar con proyectos demasiado ambiciosos ya que, seguramente, nos llevarán al fracaso y el abandono de este interesante mundo.

Herramientas personales