proyecto final(graficación)

5

Click here to load reader

Upload: renhito-kun-roses

Post on 09-Dec-2015

6 views

Category:

Documents


1 download

DESCRIPTION

Sucesión de pasos para realizar un poryecto en graficación, aplicado al juego tetris.

TRANSCRIPT

Page 1: Proyecto Final(Graficación)

GRAFICACIÓN 2015

Propuesta de proyecto final

Autor: Mendoza Pérez Rodolfo

Aguilar Sánchez Cristian

Page 2: Proyecto Final(Graficación)

GRAFICACIÓN – Propuesta_Proyecto 2

Introducción

Con el transcurso del curso, hemos podido obtener conocimientos diversos en algunos

casos de problemas de graficación, además de que la necesidad de hacer funcionar

alguna idea u método nos ha obligado a investigar en distintas fuentes el manejo y tratado

de muchos conceptos relacionados con la graficación.

Con todo esto surgió la idea desde hace tiempo de generar como proyecto un juego de los

“clásicos” utilizando las librerías graficas que ya conocemos, estábamos pensando en

utilizar allegro, opengl o Miniwin, pues estas tres cuentan con todo lo necesario para poder

implementar una gran cantidad de juegos, sin embargo creemos que tenemos más

conocimientos y experiencia utilizando allegro y Miniwin, pues para ambos es nuestra

primera vez utilizando Open gl y a pesar de que cuenta con muchas cualidades que

simplifican el trabajo, hemos estudiado más a fondo las 2 mencionadas anteriormente, por

eso en esta ocasión utilizaremos Miniwin y algunas cualidades de allegro.

Tomando en cuenta también que ya sabemos hacer usos de “primitivas” y que contamos

ya con conocimientos anteriores para funciones de programación, llegamos a la conclusión

de que un juego sería la mejor opción para mezclar todo lo que ya sabemos y lo que

aprendimos durante el curso.

Propuesta

Nuestra propuesta es que como ya pudimos apreciar distintos ejemplos en clase de cómo

funcionan ciertas cosas, nosotros crearemos una versión del ya conocido juego “Tetris”

incluyendo todo lo que este juego debe tener, como sonidos(solo si consideramos

necesario), las figuras o texturas(dependiendo), las rotaciones, el score, la generación

aleatorioa de figuras y el incrustado entre muchas otras características del juego, esto lo

haremos por partes, es decir primero nos centraremos en crear el escenario, con una

matriz y aplicar la textura(en caso de poder hacerlo), hacer las validaciones necesarias y

aplicar las condiciones que se requieran para que no se pueda atravesar las paredes del

escenario y para que las figuras choquen y no atraviesen el contenedor o área de juego,

GRAFICACIÓN

Page 3: Proyecto Final(Graficación)

GRAFICACIÓN – Propuesta_Proyecto 3

además de validar que al generar una línea se obtengan puntos y esta se elimine tal como

pasa en el juego original, como comienzo nosotros planteamos crear solo el primer nivel

del juego y en caso de sobrarnos tiempo, generar una serie de nivel que obviamente

dificulte al jugador obtener el triunfo.

Como mencionábamos anteriormente nosotros estamos más familiarizados con las

funciones que incluye la librería de allegro y Miniwin(esta inclusive fue desarrollada en

español), además de que estas librerías no nos dan ningún problema al momento de

utilizarla en nuestra IDE. También ya investigamos si estas librerías cumplen con los

requisitos que solicitamos para implementar el juego y notamos que sí, posee funciones

que nos permitirán cubrir las necesidades de operación de los controles, la música, el

escenario y todas las condiciones que requerirá el juego.

Nuestro objetivo es tratar de implementar la mayor cantidad de conceptos y conocimientos

aprendidos durante el curso como lo son las transformaciones, además de que

observamos que si utilizamos opengl el trabajo podría simplificarse a tal grado en el que la

esencia como tal se perdería pues la mayor parte de todo esto ya estaría hecho y nuestra

intención por cuestiones de tiempo es no demorarnos tanto, pero también no depender

tanto de lo que ya existe en su totalidad.

Problema

Quizá algunos de los problemas que se nos presenten sean por falta de conocimiento al

utilizar algunas funciones, peor no creemos que sea nada grave o a tal nivel de no poderse

resolver realizando alguna búsqueda de información o ejemplos de uso en internet.

Tenemos pensando crear una matriz que funcionara como el escenario principal de nuestro

juego y a este aplicarle una textura que lo hará lucir como el tipo de juego clásico de

“Tetris”. En un principio también consideramos la idea de poder generar un “Mario bros” o

“Megaman” sin embargo ya tenemos algo de tiempo investigando como podríamos

realizarlo y lo que necesitaríamos. Al final concluimos que por cuestiones de tiempo la idea

más factible era la del juego de “Tetris”, además de que es un ejemplo perfecto para

implementar la traslación, rotación y lo visto en clase.

Problemas solucionados

PIEZA NUEVA

Al momento de agregar la funcionalidad al proyecto de querer visualizar la figura siguiente

a tratar, teníamos problemas pues al principio no sabíamos cómo predecir la figura a salir,

después de pensarlo un poco ese problema se solucionó de una manera sencilla. Nosotros

manejamos la aparición de una nueva figura mediante coordenadas, es decir tenemos

predefinidas el patrón de las coordenadas que dibujan cada pieza y las manipulamos

Page 4: Proyecto Final(Graficación)

GRAFICACIÓN – Propuesta_Proyecto 4

mediante una coordenada origen, es ahí donde radica la solución pues modificamos el

origen de la figura, es decir, por ejemplo decíamos que el origen de la figura tenía que ser

x = 5 para que esta apareciera en el centro, pues si modificamos ese origen en “x” y “y”

podremos hacer que la figura se dibuje en cualquier otra parte de la pantalla, de esta forma

simplemente dibujamos la pieza a lado derecho de la pantalla, posteriormente generamos

otra pieza y la pieza anterior se copia a una nueva pieza, es decir, la pieza original se copia

para que esta aparezca dentro del juego y la antigua pieza es borrada para almacenar una

nueva y modificando el origen se crea ese efecto de la predicción de pieza pues está

siempre se copiara a otra pieza nueva, misma que aparecerá en el juego.

COLISIONES

Otro problema fueron las colisiones, necesitábamos validar que si ya existían piezas en

determinadas coordenadas, la pieza no siguiera bajando y esta se incrustara, tanto

incrustar la pieza como la colisión fueron un problema en su momento, primero el punto de

incrustar, para lograr esto se elaboró un método que como acción debía verificar si existía

una posición ocupada en el tablero, el método cuenta con un for que se encargaba de

verificar 4 coordenadas(la longitud de una pieza) en el tablero, verifico si existían

coordenadas ya utilizadas en el mismo o si este estaba vacío, para hacer eso utilizo el

color, es decir mediante el color se dio cuenta de si había o no coordenadas ocupadas,

porque de estar vacías el color del tablero seria negro, solucionando así las colisiones en el

tablero y pudiendo incrustar una pieza.

PIEZAS ALEATORIAS

Una vez hecho esto surgió un pequeño problema más y es que en el juego del “tetris” las

piezas se generan aleatoriamente y estas van bajando solas, para generar piezas

aleatorias se cargaron las coordenadas de cada figura en un arreglo y se utilizó un random

para generar un número del 1 al 7(número de figuras existentes en el juego) de esta forma

un método fue capaz de dibujar piezas diferentes(siempre recibe un entero inesperado del

1 al 7) porque hacía uso de este random que le permite elegir las coordenadas de la figura

a dibujar, ahora bien para que las piezas bajaran automáticamente se generó otro método

que debía encargarse de que se incrustara la pieza una vez encontradas coordenadas ya

usadas, para realizar esto se utilizó un método que ya incluye la clase y que se llama

“espera” mismo que recibe por parámetro el tiempo en milisegundos que pausara la

ejecución, bueno dentro de un método nuevo se programó que se mantuviera apretada

automáticamente la tecla “ABAJO” del teclado y que se esperara un segundo entre cada

vez que se apretara, generando asi ese efecto de que la pieza baja por si sola, cabe

mencionar que si el usuario presiona la tecla por si mismo la figura bajara de forma mucho

más rápida.

Page 5: Proyecto Final(Graficación)

GRAFICACIÓN – Propuesta_Proyecto 5

BORDES

Este fue uno de los problemas más rápidos y sencillos de resolver, por dar un simple

ejemplo basto con que se hiciera un método con un for donde se especificara el tamaño de

la matriz a emplear, por ejemplo si la matriz tenía 20 de largo y 10 de ancho se

especificaba como límite el 20 en coordenadas “x” de esta forma con una simple condición

en la que se especifica que no sea mayor a 20 se bloquea el desplazamiento de la figura a

nada más que esas coordenadas límites y en el caso de “y” pues es ahí donde aparecerá

la pieza y hasta donde podrá llegar al momento de caer.

TECLAS

La clase Miniwin reduce bastante el trabajo al momento de querer manejar el teclado,

basta con crear una instancia de teclado() y posteriormente acceder al uso de las teclas

como se hace en allegro, es muy sencillo utilizar cualquier tecla del teclado, obviamente

para aplicar la traslación de izquierda a derecha o hacia abajo se aumentaba el valor de la

coordenada en “x” y en el caso de “y” se disminuía, para la rotación fue algo simple

también basto con un método que hace las cosas muy similares a la rotación habitual que

trabajamos en clase, para la rotación se utilizó la tecla de dirección hacia “ARRIBA”.

BUG AL FINALIZAR JUEGO

Cuando nos encontrábamos haciendo pruebas del avance del juego que ya llevábamos

nos dimos cuenta que al llegar al límite superior en “y” que establecimos para el juego

(mismo en el que aparecen las piezas) estas quedaban bugueadas apareciendo una

encima de otra, para solucionar esto utilizamos un time (), que una vez que sea alcanzado

el límite en “y” preestablecido espere 2 segundos y muestre un mensaje que dice “Game

over” posteriormente espera 2 segundos más y se cierra la aplicación.

REPINTAR PANTALLA

Quizá esta parte más que un problema solo era necesario mencionarla pues es una

función muy importante en el proyecto ya que la Liberia cuenta con un método llamado

refresca () que es muy utilizado en cada pieza, pues cada que se hace alguna modificación

como un desplazamiento, una rotación, generar una nueva pieza e inclusive incrustar

requiere que la pantalla se refresque y plasme los cambios. Es por eso que es tan

importante mencionar esta parte del programa.