Charla “Iniciacion y desarrollo de los videojuegos” por [Ilgrim] en canal #secroot

Escrito por ArKan0 Categoría: Charlas a Febrero 9th, 2009

ScsiX ¦ Buenas noches a todos. Bienvendidos, Vamos a empezar la charla de Ilgrim sobre el dearrollo de videojuegos, cualquier duda o planteamiento exponermelo a mi, y yo lo hare con ilgrim. Ahora, si [Ilgrim] es tan amable.. En nombre de todos te damos la bienvenida.

[Ilgrim] ¦ Lo primero muy buenas a todos y bienvenidos, como bien sabeis hoy os voy a hacer una pequeña introduccion al desarrollo de videjuegos. Comenzaré exponiendo un poco su historia y pasaré a describir algunas de sus caracteristicas, para finalmente enseñar algun ejemplo de código comentado paso a paso.

Podria decirse que la historia de los videojuegos, comienza con una version rudimentaria del tres en raya, que corria sobre el EDSAC

De aquellos años yo destacaria a William Higginbotham que en 1958, modificó un osciloscópio de la época para simular una cancha de tenis con perspectiva lateral, en la que se hacia desplazar una “bola” a uno y otro lado. Este.. engendro..inspiraria años despues para el desarrollo del archiconocido Pong.

Que no era más que dos barras, y un “esférico” rebotando por pantalla con el único fin de sobrepasar la linea de defensa del rival. Una idea sencilla, que arraso en el mercado fascinando al consumidor.

Ilgrim] ¦ Sin embargo fue en los 70’s cuando la industria del videojuego dio sus primeros pasos con titulos como Space invaders, o Asteroids y como no, el ya mencionado Pong. Pero, llegados los 80’s es cuando, espoleado por las abundantes plataformas de 8bits (consecuencia de la versatilidad del Z80 y similares), el mercado del videojuego se afianzaria, posicionándose en un lugar predominante dentro del comercio de software.

En esa epoca, eran comunes titulos de mecánica sencilla, en los cuales se recurria al ingenio extremo, y normalmente, a la infinita imaginación del jugador, a la hora de interpretar aquellos cuadrados que aparecian por pantalla y pretendian ser el personaje de turno.
Existian por contra, otro tipo de juegos, que, careciendo de cualquier tipo de gráfico, atraian a las masas por su dificultad y argumento. Me refiero a las ya clasicas aventuras conversacionales.

En España, fue una década especialmente fructifera puesto que aparecieron empresas como si fuesen champiñones, principalmente compuestas por entusiastas de los 8bits, que llegaron a desarrollar software de una calidad innegable. Pero llegado el final de la decada, y al comenzar los 90, un giro brusco en el mercado, provocado por la llegada de las consolas de 8 bits, asi como de la popularizacion de la arquitectura x86, fue la puntada que finiquito esa epoca dorada.

Pese a todo, los videojuegos continuaron avanzando a la par que lo hacia el hardware. Con el paso del tiempo, no murio el gusanillo de algunos de aquellos…”romanticos”… que disfrutaban realizando y distribuyendo sus juegos. De esta forma nacia una aficion: El desarrollo de videojuegos.

Una buena idea, paciencia y poco mas hace falta para adentrarse en este mundillo. A continuacion, haremos un pequeño repaso por los elementos que constituyen un pequeño juego, y que puede servir de orientacion, o quien sabe, quizas inspiracion a otros tantos “romanticos” a los que les pique este gusanillo.

Para comenzar, cualquier videojuego puede ser dividido en una serie de partes, que a su vez, se subdividen en otras tantas:

Gráficos
Contenidos variados (sprites, tiles)
Representación gráfica
Argumento
Guion
Objetivos
Sonido
Banda sonora
Efectos
Lógica
Control
Eventos
Estructuras de datos
IA
Algoritmos variados (minimax, A*,A, redes neuronales….)

[Ilgrim] ¦ El apartado gráfico, hoy dia, suele ser un factor de altísimo peso a la hora de valorar la calidad de un juego, si bien personalmente creo que existen factores mas determinantes a la hora de valorar ese software.
De todas formas, es bien sabido que todo entra por los ojos, y si se cuenta con un contenido artistico (imagenes, videos/animaciones, sprites,tiles) de buena calidad, el jugador estará predispuesto a una mejor aceptacion de nuestro desarrollo.

El Argumento, desde “tiempos inmemoriales”, ha sido pieza crucial en el exito de un proyecto de estas caracteristicas. Una historia atrayente, un relato gracioso (recordemos el triunfo de Monkey island, y sus abundantes bromas), puede significar horas y horas de diversion, o por el contrario, el peor destino para este tipo de software, de una patada al cajon del olvido.

Para que un argumento pueda considerarse interesante, debe contar con un guion correcto, bien estructurado y una ambientacion que atraiga al jugador, y le anime a seguir jugando para desvelar el “y ahora que pasara?”.

Al igual que las personas necesitan tener siempre una meta, un juego debe contar siempre con unos objetivos bien definidos, que con la ayuda de la IA, que comentaré despues, suponga un reto para el jugador sin llegar a ser una fuente de frustracion infinita. Por ejemplo jugar a Dragon’s Lair o ghost’n'goblins….. gracias, pero no.. gracias….. quien los haya sufrido, comprendera a que me refiero….

Por otro lado, el sonido… algo tan natural y a la vez tan importante en este mundo, no podria tener menos relevancia en el desarrollo de un juego. Una banda sonora.. debe de enfatizar las emociones que siente el jugador de nuestra criatura… debe acompañar durante desarrollo de la historia y por supuesto en la consecucion de los objetivos durante su desenlace.

Este factor, muchas veces marginado, puede suponer que no se aguante ni 10 minutos jugando por culpa de una mala eleccion, o que la experiencia de juego no llegue a ser todo lo intensa que deberia. No podemos olvidar los diversos efectos sonoros que dotan al proyecto de variedad y “vidilla” a la hora de jugarlo.

Finalmente, nos topamos con la lógica… seguramente el apartado mas interesante para el programador pues aqui puede dar rienda suelta a sus capacidades y conocimientos. Este factor… es extenso.. y posiblemente uno de los mas importantes. Dentro de este campo, es necesario destacar la relacion entre el control y los eventos, asi como las estructuras de datos empleadas en la manipulacion de la informacion.

Cuando hablo de control, hago referencia a la relacion existente entre el juego y el jugador a traves de cualquier medio (normalmente periféricos), y que desencadena una reaccion inmediata en el desarrollo del juego. Un control deficiente, puede hacer que nuestro “heroe” sea sencillamente insufrible y su maniobrabilidad quede reducida a la nada, lo cual desemboca en una fuente de frustracion que antes comenté.

[Ilgrim] ¦ Los eventos….es algo “tan simple” como el principio de causa y efecto. Cualquier accion realizada, debe desencadenar una o mas consecuencias, apreciables o no, a lo largo del juego. Un evento, es cualquier suceso ocurrido durante la ejecucion de nuestro software.

Como puede verse, esta intimamente relacionado con el control, y aun mas con la IA. La IA… quizas uno de los elementos mas complejos e importantes… Tambien conocida como inteligencia artificial, es la capacidad del software para analizar el “medio que lo rodea”, y facultarle para actuar en consecuencia.

Esta entidad es la que permite y ajusta los patrones de comportamiento de todos los elementos no manipulados por el jugador. Pongamos por caso un juego de estrategia en tiempo real. La IA, deberá encargarse de analizar las decisiones del jugador, y calcular el comportamiento de todas las unidades rivales.

O en un Shooter vertical, al mas puro estilo Raptor u Overkill, en cuyo caso la IA definirá el comportamiento de las diversas naves enemigas, desde sus disparos hasta sus movimientos.
Deberia ser tambien labor de la IA, ajustar la dificultad del juego en funcion de la pericia del jugador, para conseguir, de esta forma, crear un reto lo suficientemente interesante y duradero para el usuario.

Para esta labor, existen cientos de algoritmos que permiten las mas variopintas posibilidades. Y queda, a criterio del programador, elegir una u otra segun sus necesidades y/o gustos.

[Ilgrim] ¦ Por comentar algunos, A, A*, minimax….Notese que el A* bajo ciertas circunstancias pasa a comportarse como un A

Una vez definidos todos estos aspectos, toca elegir las herramientas que utilizaremos. Esto es algo muy subjetivo, pues depende de la experiencia del programador y las intenciones que tenga para el proyecto.

Para desarrollar cosillas en 2D, especialmente si se va a necesitar mucho rendimiento, utilizar C/C++ como lenguaje, y apoyarse en librerias como SDL, Allegro,…. para todas las cuestiones graficas puede ser una buena solucion.

[Ilgrim] ¦ veo algunas preguntillas, asi que vamos a resolverlas antes de continuar

En referencia a los algoritmos A y A*, ambos son algoritmos en anchura, en ambos, si existe alguna solucion posible, tarde o temprano esta es encontrada, imaginad el caso de un laberinto, estos algoritmos irian comprobando las casillas hasta encontrar un recorrido que se considera optimo
La ventaja de A* frente a A, principalmente, es el coste en tiempo a la hora de hayar ese resultado, A es un algoritmo relativamente costoso, mientras A* calcula el recorrido en base a una ponderacion de las casillas a las cuales asigna un “valor”, de tal forma que el mejor camino en A*, no tiene que ser necesariamente el mas corto.

[Ilgrim] ¦ A la pregunta de los motores de física, depende mucho de la complejidad del juego, en el caso de 2D que nos ocupa, lo usual es una deteccion de colisiones de entitades geometricas por comparacion de coordenadas, por otro lado, los Sprites y los tiles, son entidades que se emplean para la representacion de los elementos. Los sprites, son frecuentemente utilizados para mostrar, naves, el “heroe” de turno,… basicamente ambos son imagenes. Los tiles por contra, seria, por hacer una analogia, como las teselas griegas, pequeños fragmentos que combinados con otros se consigue una entidad grafica mayor, se usa frecuentemente a la hora de mostrar un mapa, en un juego de naves, por ejemplo, los tiles compondrian el fondo, mientras que los sprites se desplazarian sobre el

Despues de toda esta teoria, un ejemplo de codigo realizado en python, utilizando pygame, puede dar una idea de hasta que punto se pueden hacer cosas curiosas con relativamente poco codigo.

http://ilgrim.homelinux.org/Charla/estrellas.py
http://ilgrim.homelinux.org/Charla/estrellas.png

En este caso, la aplicacion crea una ventana con un campo de estrellas, que se mueven diagonalmente.
El codigo, no es mio, sin embargo aunque resulta simple y bastante limpio, los comentarios brillaban por su ausencia, y me he encargado yo de incluirlos para mayor comprension.

Para aquellos que se lancen a la aventura de la creacion de juegos…. mi recomendacion seria clara…. C utilizando las librerias SDL (soportan tanto graficos, como audio, red…), y gcc para compilar el proyecto, o el lenguaje python apoyado por la libreria pygame o pyglet.

[Ilgrim] ¦ Una de las cosas del software libre… es que es un estupendo caldo de cultivo para este tipo de desarrollos, y su comunidad brinda la ocasion de perfeccionar las tecnicas empleadas mediante el intercambio de experiencias.

[Ilgrim] ¦ parece que no quedo muy claro que era un tile… bueno.. se podria decir que es una pieza de un puzle, una pieza que combinada con otras, da como resultado algo mas grande. Tanto sprites como tiles son imagenes, sin embargo mientras que la primera es de por si una entidad completa, la segunda es un fragmento de otra mucho mayor.

[Ilgrim] ¦ Para terminar, quisiera hacer referencia a algunas paginas con contenidos que creo interesantes o utiles para estos temas y animaros a que experimenteis la satisfaccion de ver como, “vuestro pequeño engendro” va cobrando forma delante vuestro.

http://ilgrim.homelinux.org/Charla/enlaces.txt

[Ilgrim] ¦ ya por ultimo, daros las gracias por vuestra asistencia y vuestra paciencia :)


1 Estrella2 Estrellas3 Estrellas4 Estrellas5 Estrellas (3 votos, media: 2 sobre 5)
Loading ... Loading ...

Artículos Relacionados

Añade tu Comentario