proyecto final(graficación)
DESCRIPTION
Sucesión de pasos para realizar un poryecto en graficación, aplicado al juego tetris.TRANSCRIPT
![Page 1: Proyecto Final(Graficación)](https://reader038.vdocuments.co/reader038/viewer/2022100421/563db98e550346aa9a9e721d/html5/thumbnails/1.jpg)
GRAFICACIÓN 2015
Propuesta de proyecto final
Autor: Mendoza Pérez Rodolfo
Aguilar Sánchez Cristian
![Page 2: Proyecto Final(Graficación)](https://reader038.vdocuments.co/reader038/viewer/2022100421/563db98e550346aa9a9e721d/html5/thumbnails/2.jpg)
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)](https://reader038.vdocuments.co/reader038/viewer/2022100421/563db98e550346aa9a9e721d/html5/thumbnails/3.jpg)
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)](https://reader038.vdocuments.co/reader038/viewer/2022100421/563db98e550346aa9a9e721d/html5/thumbnails/4.jpg)
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)](https://reader038.vdocuments.co/reader038/viewer/2022100421/563db98e550346aa9a9e721d/html5/thumbnails/5.jpg)
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.