INTEGRANTES:
Roberto Uribe Paredes:
Ciro albornoz P.:
El objetivo principal es crear una aplicación
donde utilizar la mayoría de las herramientas matemáticas
gráficas entregadas en clases. En este caso el tetris 3D.
Resultados del Proyecto
El proyecto tuvo como resultado un algoritmo que se aproxima al juego real y que permitió la aplicación de gran parte de la materia vista en el curso, esto es:
La evolución del proyecto se puede dividir en tres etapas principales:
Primera etapa: Incluye la definición de las estructuras, su implementación, y la aplicación de Transformaciones y proyecciones.
Segunda etapa: En esta se agregan los siguientes puntos:
El Juego
Se define un área en forma de caja (paralelepípedo de base cuadrada).
Se tienen distintas figuras geométricas 3D (formadas por la unión de bloques) las que van cayendo una a una dentro de la caja.
El jugador tiene la posibilidad de mover el objeto de modo de ubicarlo en la posición que más le convenga.
Los movimientos posibles para el jugador son traslación y rotación.
El objetivo del juego es mantener el cajón
lo mas vacío posible, para ello se van eliminando parte de los objetos
cada vez que se llena una capa en el fondo del cajón.
Programación
El lenguaje utilizado para la implementación del juego es:
Borland C++ V. 3.0.
La plataforma utilizada: DOS.
Uso de memoria: Memoria baja.
El sentido de esta elección es la utilización de herramientas de bajo nivel, pero esto tuvo una consecuencia, la cual es, se debió hacer un esfuerzo por disminuir el uso de la memoria.
Estructuras utilizadas
A continuación se muestra las estructuras finales que se utilizaron para el desarrollo del juego.
typedef double tj; |
typedef struct{
tj x; tj y; tj z; tj h; /*coordenada homogena*/ }punto3d; |
typedef struct{
punto3d a; punto3d b; int color; /*color*/ }linea3d; |
typedef struct{
linea3d l[12]; /*12 lineas*/ |
typedef struct{
cubo3d fig[MAXX][MAXY]; /*2 dim. para figuras simples y 3 dimensiones |
typedef struct{
short int presente; short int x; short int y; short int z; |
Descripción de las estructuras
ESTRUCTURA |
|
|
|
|
|
|
|
|
|
|
|
|
|
Algoritmo
El algoritmo consiste en los siguientes pasos:
Los primeros obstáculos presentados en el desarrollo del proyecto fueron los de definiciones de estructuras, aplicación de proyecciones y la representación del mundo 3·D, estos problemas se debieron principalmente a la poca claridad de los conceptos en un comienzo, pero se fueron solucionando en la medida que se avanzaba en la materia y que se iba adquiriendo mas manejo de las herramientas matemáticas necesarias.
Limitaciones de memoria: Uno de los problemas surgidos fueron las limitaciones de memoria que se presentan al trabajar en DOS y hacer uso de la memoria baja.
Solución: Un gran esfuerzo por disminuir el uso de la memoria, se puede citar los siguientes:
Uso de estructuras representativas de las estructuras reales y mucho más livianas lo que permitía el manejo de estas durante el algoritmo y la traducción hacia las estructuras reales en el momento de utilizarlas. por ejemplo, el uso de cajaaux para realizar las operaciones sobre la figura en forma mas eficiente.
Se evita redibujar la pantalla completa y se evita redibujar el cajón.
Grabar pantalla: cuando se calculaban las coordenadas algunas daban valores negativos lo que hacía que se cayera abruptamente la aplicación.
Solución: Cálculo de validación de las coordenadas, es decir, se debió determinar si no se desbordaba, recordemos que el algoritmo no trabaja con las coordenadas reales y una rotación podría eventualmente traducirse en coordenadas no válidas esto se solucionó en la versión 7.
Superficies Ocultas: Uno de los problemas más serios se presentaba al meter un cubo en un hueco, o sea debajo de una figura que ya existe.
Solución: Por el método del pintor, se pintan las orillas y luego las superficies más próximas al usuario. (en este caso significan las posiciones mas bajas en el eje Z, el eje Z definido positivo hacia el fondo de la pantalla). cabe señalar que este algoritmo se encuentra implícito en el hecho que para dibujar una figura sobre otra simplemente se sobre escriben los pixeles que esta ocupa.
Algunos Detalles no Solucionados
Cuando se ha producido una barrera visual para un cubo que cae en una posición más baja pero que no tiene ningún cubo arriba el algiritmo lo dibuja, pero parte de este cubo no debería verse. Ver figura
Alumno | Contribución |
Roberto Uribe | Desarrollo completo del Algoritmo. |
Ciro Albornoz | Desarrollo del sitio Web y presentaciones. |
Link para bajar el código fuente e instrucciones
Para la compilación de los códigos fuentes se requiere de Borlan C++ versión para DOS y para su ejecución debe estar presente el archivo egavga.bgi en el mismo directorio:
Los archivos fuente de la versión final están acá:
t3d11.exe
Ultima actualizacion (del 23 de Junio del 2000)
t3d11-2.exe
El mismo juego con otra vista
t312.exe
Fijate que pasa al pulsar F12 (obviamente esto solo para jugar, podria
haber quedado mejor :) )
Recuerda :
Traslaciones : Flechas Izq., Der., Arriba y Abajo
Rotaciones : teclas q, w y
e
Hacia Abajo: Barra Espaciadora
***************/
Ilustración 1: Comienza el Juego
Ilustración 2: El Juego en plena función
Ilustración 3 : Juego desde vista Externa
al cajón
Página principal
Principal