Temario/Desarrollando un videojuego

De Tutorial LibSDL

[editar] Desarrollando un videojuego

Tabla de contenidos


[editar] Introducción

Seguramente estés delante de este tutorial porque quieras desarrollar tu primer videojuego. En este capítulo vamos a presentar en qué consiste un videojuego, por dónde comenzar su realización y qué requisitos son fundamentales para afrontar el desarrollo de un videojuego. El proceso de aprendizaje en el desarrollo de videojuegos es continuo (y algunos se atreven a decir que es hasta infinito) por lo que no dejes de seguir ninguno de los capítulos del tutorial ya que es fundamental crear unos cimientos fuertes sobre los que crecer en el mundo de la programación de videojuegos.

Lo primero que nos concierne en este tutorial es marcar el límite de los conocimientos previos a la hora de desarrollar un videojuego. A parte de conocimientos técnicos, que presentaremos a continuación, es fundamental para instruirte en esta materia tener unos buenos conocimientos de inglés ya que, por suerte o por desgracia, la gran mayoría de libros, artículos... referentes a la programación, y más especialmente a la programación de videojuegos, están escritos en inglés.

Cuando se empieza en el desarrollo de videojuegos se suele pensar que el programador debe ser una especie de navaja suiza, que tiene que ser capaz de realizar todo el proceso que conlleva el desarrollo del videojuego. Veremos que esto es así pero sólo en los comienzos y que lo seguirá siendo para pequeños proyectos. Cuando estamos empezando tenemos que ser capaces de crear (o proveernos) de todo el material necesario para el desarrollo del mismo lo que hará que tengamos que invertir grandes cantidades de tiempo y esfuerzo para poner en marcha nuestros proyectos.

A la hora de realizar tareas de cierta envergadura, sobre todo en proyectos ambiciosos, en el desarrollo del videojuego converge el trabajo de diseñadores, músicos, escritores, creativos... Es fundamental tener a personal especializado en cada una de las áreas que influyen en la realización de un videojuego. Como no podía ser de otra forma nosotros vamos a centrarnos en las tareas que deben realizar los informáticos (en el amplísimo sentido de la denominación) y en cómo aplicar técnicas de análisis, diseño e implementación que nos permitan crear un software de calidad, sin dejar de lado lo referente al mantenimiento y prueba del software.

Remake del popular Tetris
Remake del popular Tetris

Para empezar en el desarrollo de videojuegos, como todo en la vida, es importante hacerlo con proyectos pequeños, con objetivos concretos y alcanzables que nos permitan cumplir con las metas que nos fijamos realizando un aprendizaje constructivo. Si empezamos con proyectos demasiado grandes seguramente no podamos acatarlos, lo que provocará que abandonemos prematuramente este apasionante mundo.

Una de las alternativas más comunes es empezar realizando juegos parecidos a alguno ya existente que sea fácil de implementar. Esto nos hará centrarnos en cómo realizar las cosas y no en la tarea de crear una nueva historia, un nuevo modo de juego o una manera específica de interactuar con la aplicación. Podrás encontrar en la red de redes numerosos remakes de videojuegos clásicos como Mario Bros, Tetris, etc... realizados por programadores que empezaban su incursión en el mundo de los videojuegos. Con esto aprenderemos mucho, y si nos atrevemos a realizarle pequeñas modificaciones que aumenten su jugabilidad, la curva de aprendizaje se convertirá en exponencial.

Es muy importante que sepamos que no vamos a poder realizar un juego tipo DOOM o Unreal a las primeras de cambio, ya que estos fueron proyectos millonarios en los que estaban inmersos muchos programadores y tendríamos que dedicar parte de nuestra vida a alcanzar este nivel si partimos de cero. Nosotros trataremos aquí los videojuegos en 2D. Una recomendación personal es empezar con este tipo de videojuegos, y una vez los domines dar el salto a las tres dimensiones. En unos meses podrás empezar a realizar proyectos que ahora, seguramente, sean inimaginables.

[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.
  5. prueba

[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] APIs para el desarrollo de videojuegos

Una de las herramientas que especificamos como necesarias a la hora de desarrollar un videojuego es el uso de una librería que nos ayude en la tarea de desarrollar nuestro videojuego. Una API (Application Programming Interface) o interfaz de programación de aplicaciones es un conjunto de funciones que proporcionan un interfaz entre el programador y un determinado sistema. Este sistema puede ser de distintos niveles.

Nosotros hemos elegido para este tutorial la librería SDL. Esta librería nos proporciona diferentes APIs para trabajar con diferentes subsistemas que vamos a necesitar en el desarrollo de nuestro videojuego. Proporciona funciones y operaciones de dibujo en 2D, gestión de efectos, carga de imágenes, trabajo con sonido... y una lista considerable de librerías auxiliares que complementan a SDL como puede SDL\_net para el trabajo de comunicación dentro de las redes.

En definitiva un buen API nos facilitará el trabajo y nos permitirá avanzar más rápidamente en la construcción de nuestro videojuego. Existen otras alternativas como Allegro, Qt... En el siguiente capítulo existe un apartado dedicado a porque hemos elegido SDL y no otra librería.


[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] Estructura de un videojuego

Como hemos comentado, para terminar con este capítulo y antes de ahondar en las características de la SDL vamos a estudiar la estructura de un videojuego. Un videojuego es una aplicación diferente a los programas de gestión convencionales. Se aproxima más a procesos industriales o los que se implantan en buques o aviones para controlar su movimiento que a una aplicación de gestión.

Un videojuego debe funcionar a tiempo real. El concepto de tiempo real es un término que tiende a confundirse. Cuando decimos que algo debe funcionar a tiempo real es que debemos obtener del sistema una respuesta en un tiempo determinado y establecido. Establecemos ciclos que no tienen por qué tener una frecuencia muy alta. Por ejemplo podemos establecer un sistema de tiempo real con un intervalo de un minuto, de un milisegundo o de un año. Siempre que cumpla con la restricción de tiempo establecido estaremos hablando de un sistema en tiempo real.

El tener que satisfacer esta característica nos obligará a utilizar técnicas de programación que optimicen la respuesta que obtiene el usuario del sistema, complicando así aún más, si cabe, la elaboración del videojuego.

Durante la ejecución de la aplicación el juego estará realizando alguna tarea como la de dibujar objetos, calcular posiciones, actualizando las coordenadas de los personajes, detectando colisiones, etc... todo esto continuamente, independientemente de si recibimos "estímulos" por parte del usuario o no. Piénsalo bien, es totalmente lógico. Imagínate un videojuego que sólo reaccionase cuando produjésemos alguna acción con el teclado o el ratón... en cuanto se nos vienen a la mente juegos complejos vemos cómo un "mundo" con vida propia envuelve a nuestro personaje, un mundo que sigue su curso pulsemos una tecla o no. Si has pensando en el clásico Buscaminas, el Solitario... comprenderás que la lógica que rodean a estos juegos no conllevan un trabajo adicional de la aplicación mientras que no reciban un estímulo.

Evidentemente también tenemos que estar receptivos a que se produzca alguna acción o evento del usuario y reaccionar dentro de un tiempo razonable para no mermar la jugabilidad.

Estas acciones se realizan en cada uno de los ciclos del videojuego o game loops. Un game loop es una estructura básica en forma de bucle. Este bucle se procesa varias veces por segundo en la mayoría de los casos lo que nos permite recalcular los diferentes aspectos del videojuego en un instante y que el usuario no note la secuencialidad de las acciones. Este bucle contiene la esencia del juego y la convierte en la parte más importante de la ejecución del mismo.

Podemos dividir un videojuego en las siguientes partes:

  1. Inicialización
  2. Ciclo del videojuego o game loop
    1. Gestión de la entrada
    2. Procesamiento
    3. Salida de datos
  3. Finalización


Vamos a pasar a detallar cada una de estas partes.


Estructura de un videojuego
Estructura de un videojuego


  • Inicialización Es una parte fundamental del videojuego. Es primordial que todo lo que sea necesario durante el videojuego esté inicializado desde antes que sea utilizado. Como mínimo deberemos de inicializar al comienzo de la ejecución el subsistema de video que nos permita mostrar imágenes en la pantalla. Durante el game loop utilizaremos estructuras de datos que tendremos que previamente poner en marcha, librerías que configurar y lanzar, preparar el sonido del videojuego, el sistema de captura de acciones del usuario... Este es el momento de realizar todas esas tareas. No se nos debe olvidar que tenemos que establecer las posiciones iniciales de nuestros personajes en este punto ya que si no puede que aparezcan en posiciones ilegales y comenzar la aplicación con un error que posiblemente no permita su ejecución. En los diferentes apartados del tutorial referentes a los subsistemas presentaremos como inicializar los diferentes aspectos que componen el sistema.
  • Ciclo del videojuego o game loop es un bucle que se estará repitiendo durante el tiempo que dure el videojuego en ejecución. Normalmente este bucle se romperá cuando el usuario pulse una determinada tecla que provoque que el videojuego termine, o bien cuando el jugador pierda sus vidas y la partida haya terminado. Es el encargado de comandar en todo momento la tarea que se esté realizando. Podemos dividir el game loop en tres partes bien diferenciadas que tienen una fuerte interrelación entre sí:
    • Gestión de la entrada En este punto obtenemos las acciones que ha realizado el usuario sobre los dispositivos de entrada como el teclado, el ratón, el joystick... Sabremos, si se ha movido el ratón, las posiciones de origen y destino, que teclas presionó, cuales soltó... Un videojuego necesita comunicarse con el jugador mediante, al menos, un dispositivo de entrada. Este es uno de los aspectos fundamentales que tenemos que cuidar. En el capítulo dedicado a la gestión de eventos estudiaremos todos estos aspectos con detalle ya que es fundamental que la gestión de esta entrada no convierta en injugable a nuestra aplicación. Todo jugador necesita comunicarse con el videojuego y cada jugador tiene un dispositivo preferido para este fin, por lo que es importante también el disponer de soporte para una variedad importante de este tipo de dispositivos. No nos cansaremos de repetir que cuidar la interacción del jugador con el videojuego supondrá gran parte del éxito o fracaso de nuestra aplicación.
    • Procesamiento En este momento reaccionaremos según haya sido el tipo de entrada dada por el jugador. Si recibimos algún tipo de entrada la procesaremos adecuadamente, tomando las decisiones según el tipo de acción que se haya realizado. Del mismo modo, y aunque no hayamos recibido entrada alguna, tendremos que procesar todo la lógica del videojuego así como los comportamientos que hayamos establecido. Por ejemplo si hemos dotado a nuestro juego de gravedad o inteligencia artificial este será el momento adecuado para aplicarla, al mismo tiempo que procesamos la entrada, mientras actualizamos la lógica del videojuego... Podemos concretar como que el primer momento del procesamiento es el de reaccionar frente a la entrada producida mientras que el segundo momento de este punto es el de actualizar la lógica del videojuego. En resumen, podemos decir que aquí reside el núcleo fundamental del videojuego y que su implementación es la que dotará a nuestro videojuego de una mayor o menor calidad.

Entre las acciones que podemos realizar respondiendo a los eventos de usuario está el procesamiento de los aspectos referentes al sonido. Muchas veces no damos al sonido la importancia que se merece. Con un buen sonido y una banda sonora adecuada podemos conseguir hacer llegar al jugador sensaciones que no podemos conseguir con la simple imagen del juego. El aspecto más importante del procesamiento del sonido es la sincronización con lo que va ocurriendo en el videojuego. Un sonido a destiempo descoloca al jugador que sigue la acción del videojuego y puede ser contraproducente.

Para terminar esta referencia comentar uno de los aspectos que más adeptos va ganando. Se trata de los juegos en red. En este paso del procesamiento del videojuego también tendremos que tratar los aspectos referentes a las comunicaciones que, normalmente, se llevan a cabo mediante la programación de sockets.

La sincronización con el videojuego de los dos últimos aspectos es fundamental si queremos conseguir que estos añadidos de nuestro videojuego sean una aliciente y no un estorbo a la hora de seguir el videojuego.

    • Salida de datos No menos importante es la última parte del game loop. En este punto es donde refrescamos la pantalla con toda la información que ha sido procesada en los apartados anteriores. Mostramos los gráficos por pantalla, reproducimos los sonidos... en definitiva mostramos al usuario todo el proceso y los cálculos del paso anterior. En esta parte del ciclo del juego se realizan las operaciones de salida, tanto la gráfica, como la de sonido o la de red, estas últimas sincronizadas en el apartado anterior.

Un buen motor gráfico es fundamental. Necesitamos que el motor que soporte nuestras imágenes sea lo suficientemente potente para trabajar con nuestra aplicación. En nuestro caso SDL será más que suficiente para mostrar las imágenes así como para trabajar con los distintos aspectos que vayamos a incluir en nuestro videojuego como el sonido o el trabajo en red.


  • Finalización Una vez terminado el videojuego debemos de liberar todo aquellos recursos que reservamos en el primer apartado o en el transcurso del juego. Las tareas a realizar en este apartado son, básicamente, las opuestas a lo que hacíamos en el proceso de inicialización. Piensa que las imágenes, sonidos, música y demás que almacena un videojuego en memoria, si no son liberados, puede perjudicar seriamente el rendimiento del mismo para otras tareas.

[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