Banco 2 Space Invaders

6
MINI-PROYECTO 1 CO-DISEÑO DE SPACE INVADERS EN TARJETA SPARTAN 3AN Juan Diego Bolaños, Nixon Yesid Cardona Grupo O1, Banco 2 DEFINICIÓN. Space Invaders es un juego clásico para matar marcianos. El jugador controla una nave espacial que puede moverse de derecha a izquierda o viceversa en la pantalla, tiene un botón de disparo para destruir a los extraterrestres (que son de tres tipos, con forma de calamar, cangrejo y pulpo) los cuales van acercándose conforme el juego avanza, el juego termina cuando los invasores llegan a la nave o la nave defensora es destruida. Cada cierto tiempo, aparece en la pantalla, en la parte superior, un platillo volador que se mueve aleatoriamente de la misma forma que la nave del jugador, dicha nave no da una puntuación definida, sino puntos extras en una cantidad aleatoria. Además se cuenta con cuatro escudos de protección que se van destruyendo gradualmente con los disparos de alienígenas y de la nave defensora. BITÁCORA DEL PROYECTO. Inicialmente se investigó y se tomó como base el juego en blanco y negro de la página spaceinvaders.org en donde se observó con cuidado el comportamiento de los marcianos y de la nave del jugador, notando varios estados en los objetos de pantalla mientras se movían, como por ejemplo el movimiento autónomo de los marcianos y su explosión de dos pasos. Se decidió dividir el código en dos partes, la primera seria conformada por el bloque de gráficos que iba ser incluido con lenguaje VHDL, y consistiría de sub-módulos de ROM con todas las imágenes y caracteres necesarios para el desarrollo. La segunda parte incluía a la máquina de estados y el comportamiento (Inteligencia Artificial) de los objetos, para de esta manera corresponder a los objetivos de la asignatura. Se procede entonces a iniciar con el desarrollo completo en VHDL para asegurar el correcto funcionamiento de todos los bloques y de la máquina de estados, se encontraron problemas tales como dibujar los 55 marcianos, realizando los movimientos en su posición y a la misma vez se movieran de manera horizontal y vertical. Para facilitar el manejo del diseño gráfico se dividió la pantalla en cuadrantes de 16 bits, es decir, transformando la pantalla de 640 x 480 a 40 x 30, sirviendo de referencia para las posiciones de los elementos gráficos descritos en memoria y con dimensiones en base a potencias de 2; para dibujar el gran número de marcianos y sus posibles estados se

description

sistemas digtales- juego spae invadres

Transcript of Banco 2 Space Invaders

Page 1: Banco 2 Space Invaders

MINI-PROYECTO 1

CO-DISEÑO DE SPACE INVADERS EN

TARJETA SPARTAN 3AN

Juan Diego Bolaños, Nixon Yesid Cardona

Grupo O1, Banco 2

DEFINICIÓN.

Space Invaders es un juego clásico para matar marcianos. El jugador controla una nave

espacial que puede moverse de derecha a izquierda o viceversa en la pantalla, tiene un botón

de disparo para destruir a los extraterrestres (que son de tres tipos, con forma de calamar,

cangrejo y pulpo) los cuales van acercándose conforme el juego avanza, el juego termina

cuando los invasores llegan a la nave o la nave defensora es destruida.

Cada cierto tiempo, aparece en la pantalla, en la parte superior, un platillo volador que se

mueve aleatoriamente de la misma forma que la nave del jugador, dicha nave no da una

puntuación definida, sino puntos extras en una cantidad aleatoria. Además se cuenta con

cuatro escudos de protección que se van destruyendo gradualmente con los disparos de

alienígenas y de la nave defensora.

BITÁCORA DEL PROYECTO.

Inicialmente se investigó y se tomó como base el juego en blanco y negro de la página

spaceinvaders.org en donde se observó con cuidado el comportamiento de los marcianos y

de la nave del jugador, notando varios estados en los objetos de pantalla mientras se movían,

como por ejemplo el movimiento autónomo de los marcianos y su explosión de dos pasos.

Se decidió dividir el código en dos partes, la primera seria conformada por el bloque de

gráficos que iba ser incluido con lenguaje VHDL, y consistiría de sub-módulos de ROM con

todas las imágenes y caracteres necesarios para el desarrollo.

La segunda parte incluía a la máquina de estados y el comportamiento (Inteligencia Artificial)

de los objetos, para de esta manera corresponder a los objetivos de la asignatura.

Se procede entonces a iniciar con el desarrollo completo en VHDL para asegurar el correcto

funcionamiento de todos los bloques y de la máquina de estados, se encontraron problemas

tales como dibujar los 55 marcianos, realizando los movimientos en su posición y a la misma

vez se movieran de manera horizontal y vertical.

Para facilitar el manejo del diseño gráfico se dividió la pantalla en cuadrantes de 16 bits, es

decir, transformando la pantalla de 640 x 480 a 40 x 30, sirviendo de referencia para las

posiciones de los elementos gráficos descritos en memoria y con dimensiones en base a

potencias de 2; para dibujar el gran número de marcianos y sus posibles estados se

Page 2: Banco 2 Space Invaders

construyendo una matriz (memoria RAM) de 11 x 5 que contenía en cada posición los estados

de los marcianos en base a una codificación que puede ser apreciada en la descripción a

continuación.

Así mismo se desarrolló el comportamiento de la nave, permitiendo su desplazamiento en el

eje horizontal, los muros los cuales también tenían estados y se almacenaron en una memoria

ram. las vidas que se muestran como otras naves defensivas y que deben ir aumentando o

disminuyendo en base a un valor ingresado por la máquina de estados y el OVNI que se

desplaza horizontalmente en lo más alto del área.

Todos estos elementos fueron realizados y para su prueba se conectó las señales de control a

valores adecuados en la descripción para observar su comportamiento en pantalla.

Sobre el diseño del score y hi-score se realizó su correspondiente diseño gráfico, sin embargo

para la implementación no se alcanzó a realizar el multiplexor que escogía los valores para

cada marciano según la destrucción.

Sobre el desarrollo de la gestión de disparo y la destrucción, no se logró realizar el objetivo

propuesto por falta de tiempo, debido a la cambio en la característica de comparación sobre

el diseño hecho en base a las posiciones de la matriz 40 x 30, para solucionar este

inconveniente se necesitaba comparar todo el vector de 10 bits correspondiente a x y y, en la

posición de cada figura, pero no se logró compilar una versión funcional de esta característica

en el juego.

Por último el diseño del procesador en picoblaze (máquina de estados y comportamientos)

no logró ser terminado por la importancia en las interrupciones del módulo anterior,

generando un comportamiento errático en el programa en las versiones que se intentó adaptar.

DESCRIPCIÓN DE BLOQUES

ASCII (American Standar Code for Information Interchange).´

Este bloque contiene un código de caracteres basados en el alfabeto latino que son utilizados

en el juego. El código utiliza 8 bits para representar los caracteres.

Hay 128 caracteres ASCII imprimibles.

Page 3: Banco 2 Space Invaders

Al bloque ingresa una señal de reloj, una señal addr, quien se encarga de buscar el carácter

deseado por medio de la dirección de la ROM; y sale la señal data, que es la letra o símbolo

que se utiliza y se llama por medio de la dirección.

TEXTO FIJO

Este bloque se encarga de mostrar los caracteres específicos del juego, como por ejemplo la

palabra SCORE, la puntuación, etc. esta acción se realiza por medio de una serie de

codificadores, que des-encripta el código ASCII y lo convierte en un objeto. A este módulo

ingresan una señal de enable que se encarga de habilitar la señal de figura que lleva la

información del elemento de salida, clk que es el reloj y pixel-x y pixel-y que recorren pixel

por pixel de la pantalla indicando que bit pertenece a determinada imagen y que bit no

pertenece.

VGA

En esta parte se sincronizan las imágenes del juego con una pantalla con conexión VGA

disponible, la resolución establecida en este código es de 640x480. A este bloque ingresan la

señal clk que es el reloj, rst que es el reset y salen todas las señales que necesita el periférico

del VGA para que funcione correctamente (h_sync, v_sync, x_pixel, y_pixel, video_on).

MARCIANO 4

En este módulo se desarrolla el graficado de los objetos así como sus movimientos y los de

otros elementos en base a señales externas o internas, dependiendo del tipo de movimiento.

Cada tipo de marciano creado en la ROM son llamados para crear una matriz de 11 x 5 = 55

objetos en una RAM donde se controla el estado de cada uno de estos, teniendo en cuenta

que cuando se comprueba el impacto del disparo hace cambiar el estado de la posición de la

RAM donde se detectó esta colisión. Es necesario aclarar que solo necesita de una

comprobación para iniciar los cambios de estados.

Estados

11 Marciano completo.

10 Primera explosión.

01 Segunda explosión.

00 Queda vacía la posición de la RAM.

Los muros defensores están compuestos por 4 cuadrados descritos en la ROM que se

encuentra en el módulo OVNI, funciona de una manera similar a la destrucción de los

marcianos, donde se comprueba cada impacto de los disparos para cambiar a un estado

diferente, es decir, se necesitan de 4 disparos para destruir un cuadrado del muro, para un

total de 16 disparos para destruir esta defensa en su totalidad.

Estados.

Page 4: Banco 2 Space Invaders

11 Cuadrado completo.

10 Estado 1 de destrucción.

01 Estado 2 de destrucción.

00 Destruido.

Se genera el movimiento del ovni que aparece en la parte superior de la pantalla con un

contador generado en el código, limitándolo en “x” y en “y”, para que solo se mueva en “x”

y cuando llegue a los limites en “y” este objeto desaparezca del juego y solo volverá a

aparecer cuando se mande un habilitador del procesador, el cual tiene sus propias condiciones

para ser habilitado.

En el juego se puede observar que cuando los marcianos están activos estos cambian de

estado de tal forma que parece que se mueven, esta acción es realizada tomando el 5 bit más

significativo el cual es la mitad de un desplazamiento de 16 bits para los enemigos, con este

bit se modifica la dirección de memoria donde está la figura, obteniendo como resultado un

movimiento de las extremidades de los marcianitos cada vez que estos se mueven en x o en

y.

Para el movimiento de la nave defensora se asignan enables que activan contadores hacia la

izquierda o hacia la derecha según se escoja en el juego, limitando el movimiento a todo el

eje x y dos límites (izquierdo y derecho) en el eje y para impedir que la nave se desaparezca

de la pantalla.

La gestión del disparo consiste en primero identificar la posición actual de la nave del jugador

y guardarla para que el disparo salga de forma vertical desde dicha posición en “x”, el disparo

es generado en una ROM, luego debería comprobar bit a bit donde se encuentra un 1 del

muro o de los marcianos y comprobar y cambiar los estados del objeto con que haga contacto.

Las vidas son programadas con un contador que se habilita cada vez que se destruyen todas

los marcianos en su totalidad (no es necesario destruir el ovni), estas no tienen límite de

conteo, pero se van a acumular hasta que haya desbordamiento y no se puedan mostrar en la

pantalla.

Por último se multiplexan todas las imágenes generadas en el juego y se vuelven en señales

que luego se utilizan para el RGB.

OVNI

Es una ROM donde se guardan las formas de las figuras de los marcianos, las explosiones,

la nave, ovni y los muros que defienden la nave. Contiene una señal que se le ingresa llamada

addr, la cual es el código con el que se identifica la imagen necesitada en ese instante de

juego.

Page 5: Banco 2 Space Invaders

FIGURAS DISEÑADAS EN VHDL.

Marciano 1, primera posición.

Marciano 1, segunda posición.

Marciano 2, primera posición.

Marciano 2, segunda posición.

Marciano 3, primera posición.

Marciano 3, segunda posición.

Explosión 1.

Explosión 2.

Page 6: Banco 2 Space Invaders

Nave jugador.

Nave ovni.

Las demás figuras (letras, números, etc.), se encuentran en una memoria ROM tipo ASCII

dentro del programa. Por medio de la variación en la sincronización con el VGA, se leen y

realizan figuras correspondientes y la variación de las mismas según la situación.

TOP MODULE.

En esta última parte, es donde se instancian todos los bloques anteriormente explicados y

donde se genera la señal RGB para ser mostrado el juego en la pantalla.

PICOBLAZE.

En el procesador se incluyó parte de la inteligencia artificial de los marcianitos y también la

máquina de estados con que funciona el juego realizado. Sin embargo en la versión

implementada no está finalizado y su funcionalidad no es correcta.

INCONVENIENTES EN EL PROYECTO.

En la gestión del disparo no se pudo verificar el momento de la colisión de este con algún

otro objeto en la imagen, debido a que el diseño fue realizado en base a 16 bits, es decir, se

tenía que reconstruir las señales de pixel-x y pixel-y para comprobar bit a bit la presencia de

un 1, además la imagen del disparo fue generada con una matriz de 16x8 bits lo que complica

aún más dicha comprobación.

El SCORE que se necesita para el juego con tiene demasiados dígitos, lo cual su lógica se

complica cuando se quiere introducir al procesador, debido a la poca capacidad de este.

Uno de los problemas claves es adaptar el procesador a la descripción realizada, debido a la

lógica de entrada y de salida que mostraron un comportamiento inesperado y no se logró

llegar al correcto funcionamiento.

La integración con el procesador de 8 bits no logró ser completada, siendo necesaria la

máquina de estados para un juego completamente funcional.

La escritura en la memoria RAM para marcianos y muro es otro de los elementos no

implementados debido la falta de una gestión de disparo y máquina de estados funcional.