Está en la página 1de 7

Universidad Autnoma de Chile

Desarrollo de aplicacin en opengl Space Invaders

Nombre Ramo Profesor

: : :

Julin Lpez Salcedo. Tcnicas de diseo. Alejandro Seplveda.

Space Invaders
Space invaders es un juego diseado originalmente por Toshihiro Nishikado de Taito Corporation en el ao 1978, que tuvo un gran xito en el mercado, considerndoselo un clsico hasta el da de hoy, del cual se crearon versiones para distintas consolas y sistemas, pues curiosamente este no contaba con proteccin de copyright. El juego se trata de eliminar oleadas de marcianos con un can el cual el jugador controla, antes de que estos lleguen a la tierra. En el juego aleatoriamente y con una cantidad de puntaje indefinida aparece una nave extraterrestre de color rojo que proporciona al jugador, si este logra destruirla una cantidad aleatoria de puntaje, ademas en la pantalla de juego hay lo que parecen ser 4 bunkers que ayudan a defender la tierra. En la versin creada en esta ocasin, hay algunas diferencias que por razones de tiempo no termine de programar, aunque en su esencia, se puede aprecia del juego su lgica y esttica. No ha sido fcil emular la esttica del juego, puesto que encontrar los sprites originales en la web, a sido un trabajo muy duro, puesto que la cantidad de imitaciones del juego es basta, asi en el proceso de desarrollo, se obtuvieron resultados hasta llegar a tener una lo mas parecido al original, o mas bien al que todos conocen.

Screenshot durante el desarrollo de la aplicacin

Screenshot de la primera versin con movimiento de la aplicacin

Para el desarrollo de la aplicacin se ocuparos los sprites de la siguiente imagen como modelos, alcanzando una esttica bastante similar.

Los elementos faltantes dentro del diseo aun se encentran en fase de implementacion, por falta de tiempo, aunque en teora estos no son de una gran complejidad, puesto que la parte lgica gruesa del diseo ya se encuentra programada y entendida en el cdigo. Para finaliza con la presentacin de la aplicacin una ultima imagen correspondiente a la pantalla de inicio del juego, espero que lo disfruten.

Descripcin de la solucin
Abordare esta parte del informe tomando primero en cuenta el enunciado propuesto por el profesor, para luego abordar los detalles tcnicos la implementacion del juego en su conjunto.

Sobre los objetos estticos: Puesto que esta parte del orientacin del problema en la pantalla inicial encontraremos el titulo que corresponde a dos matrices presentes en el archivo sprite.h, luego impresas en pantalla por las funciones que manejan estas matrices say_space(); y say_invaders(); ademas de un catalogo de los distintos sprites que se ven durante el juego con sus respectivos puntajes asociados. Cabe sealar que las funciones que manejan las matrices correspondientes a los sprites del juego son especializadas y nicas, puesto que no todos los elementos son del mismo tamao y forma, aunque los elementos de similares caractersticas como nmeros y sprites de juego, se encuentran organizados en planas de matrices tridimensionales, para la re utilizacin de cdigo de las funciones que manejan dichas matrices. En la pantalla de juego encontraremos 2 elementos que aparentemente se encuentran estticos, como lo es el marcador de puntaje, y la nave del jugador, la verdad es que estos objetos se mantendrn de esta forma, hasta que el jugador con intervenga con las flechas de teclado, siendo estas las que gatillan las acciones de estos elementos.
Sobre los objetos animados: debido a especificaciones del enunciado se cuenta con al menos un objeto mvil en cada pantalla (la principal y la de juego) siendo en la pantalla inicial la pequea nave roja que escapa de la presentacin luego de pasado unos 3 segundos. En la pantalla de juego los objetos animados automticamente son 55 cabe sealar que aunque son iguales estos son independientes, puesto que cada uno tiene una seal que determina si este es dibujado o no, as si uno resulta alcanzado por el disparo del jugador, este luego mostrar un sprite parecido a una explosin, dejara de ser dibujado en la pantalla producto de tener su seal en 0; Un alcance MUY importante es que todos los objetos se encueran animados por una nica funcin que gracias a glutTimerFunc(1,Avanzar,1); se ejecuta cada 1 ms (milsima de segundo) asignando nuevos valores a variables globales que intervienen a travs de todos los procesos del juego. Es la funcin void avanzar(); y una cantidad de variables globales entre contadores, coordenadas y, flags el motor real del juego. Por ultimo respecto al cdigo: El programa completo se encuentra segmentado en 3 partes un archivo de extensin .c y dos headers .h , esto debido que se separo lo que tiene que ver con funcionalidades de glut y linea general en un archivo space_alpha.c, el manejo de sprite y sus matrices en space_sprites.h y las acciones y mecnica del juego en space_alpha.h (se describir con mayor detalle en el siguiente tema). La implementacion es funcional pero incompleta respecto a al original y cuenta con algunas diferencias en cuanto a la dificultad. Debido a la falta de exactitud en cuanto al temporizador que provee glut, la velocidad debe ajustarse en el cdigo manualmente si es que este llegara a verse demasiado rpido, (el numero a modifica se encuentra en el archivo space_alpha.h y se encuentra debidamente comentado

Descripcin de funciones y archivos usados:


space_slpha.c: En este archivo se encuentra la linea general del juego, ademas de funcionalidades de glut que apoyan el proceso, tales como el apoyo al teclado, el dimensionamiento de objetos.. las re

void IniciarGLUT(); esta es una funcin de propsito general no especifica para el juego, libera de cdigo extra en la funcin main(); ya que se encarga de tareas especificas de glut que no necesariamente son tarea de la linea principal de un programa. void PintarEscena(); esta funcin se encarga de exhibir todos lo objetos del juego y debe ser especficamente llamada por la funcin glutDisplayFunc(PintarEscena); de lo contrario no har nada.

void ReProyectar(int w, int h); esta funcin se encarga de ajustar los tamaos si es que la ventana se redimensiona, ademas crea la escala con la que se trabajara en el resto del juego, los argumentos w, h usan como argumento el tamao actual de la pantalla. Esta funcin debe ser llamada o enviada como argumento especficamente a la funcin glutReshapeFunc(ReProyectar); de lo contrario tampoco se har nada.

void ControlTeclado(unsigned char key, int x, int y); fcil, esta funcin controla las teclas que no son especiales dentro del juego ENTER y ESC y debe ser argumentada para la funcin glutKeyboardFunc(ControlTeclado); y sus argumentos propios son un key correspondiente a una tecla y un x , y que aunque en mi caso particular no ocupo debe ser igualmente anexado. void ControlFlechas(int key, int x, int y); igualmente fcil, esta funcin se encarga de los eventos que ocurren con la flechas del teclado, puesto a que estas son teclas especiales, no se consideran dentro de la funcion descrita anteriormente por tanto son argumentadas a glutSpecialFunc(ControlFlechas); y tambin cuentan entra sus argumentos un key que es la flecha oprimida, y un x, y que no utilizo.

space_alpha.h: En este archivo se concentran las acciones propias del juego y no la funcionalidades de glut como por ejemplo la pantalla de juego, la pantalla principal y la accin de disparar, ademas de la variables globales que apoyan los clculos y conjunto de flags que permiten las acciones

void cargar_variables(); esta funcin se encarga de establecer los valores iniciales (si es que se necesita) de la mayora de la variables globales del juego. void disparo(); se encarga de la accin de disparo cuando el usuario ataca. void pantalla_de_juego(); pantalla de juego, bsicamente el alma del juego, posiciona enemigos y jugador en la pantalla aparte de hacer los clculos de rectngulos mnimos que se necesitan para detectar las colisiones, (el calculo del choque directo entre jugador y extraterrestre no se encuentra hecho aunque si se detecta si un disparo destruye a un enemigo(es efectivamente destruido)). void presentacin(); simple y esttica, es la pantalla de bienvenida al juego, cabe sealar que si se esta un tiempo mirando la pantalla la nave roja o UFO escapara de la vista del usuario (efecto de una animacin programada no una torpeza). void Avanzar(int x); funcin recursiva que se encarga del manejo de contadores y posiciones necesarias para la correcta ejecucin del juego aparte de dar continuidad en caso de que el usuario no intervenga jugando

space_sprites.h: aqu se encuentra la parte artstica de todo este asunto, este archivo contiene el conjunto de sprites en matrices, y las respectivas funciones que manejan dichas matrices, bsicamente todas la funciones hacen lo mismo pero al ser diferentes los tamaos de cada objeto no me propuse el crear una funcin genrica para todos los sprites, aunque si agrupe los de caractersticas similares.

void ubicar_sprite(int sprite, float six, float siy, float tam_pix); pone enemigos y jugador en pantalla sprite, es el subindice correspondiente al sprite deseado: 0 1 2 3 4 CALAMAR CANGREJO PULPO UFO NAVE

Las variables six, siy, son posiciones eje coordenados para los objetos, y tam_pix define el tamao del pixel usado para imprimir el objeto.

void simbolo(int sprite, float six, float siy); similar al anterior, pero imprime smbolos definidos en la matriz que maneja, no define tamao de pixel: 0 - ? 1 - ! 2 - =

void say_space(float six, float siy); pone la palabra space en pantalla en la posicin (six, siy); void say_invaders(float six, float siy); pone la palabra invaders en pantalla en la posicin (six, siy); void say_pts(float six, float siy); pone la sigla pts. en pantalla en la posicin (six, siy); void numero(int num, float six, float siy); funcin similar al a ubicar sprite pero esta imprime nmeros en pantalla donde, num es el numero a imprimir. void bala(float six, float siy); pone el disparo en pantalla cuando se dispara; void mostrar_text(char cadena[], float x, float y); imprime texto sin sprite donde cadena[] es el texto a imprimir, y (x, y) la posicin.

NOTA FINAL: el cdigo debe debe ser compilado con DEV-C++ tal como se hizo en clases con los respectivos enlaces a la librera GLUT

También podría gustarte