Colegio de Educacin Profesional Tcnica del Estado de Veracruz
Plantel Tuxpan Lic. Jess Reyes Heroles165
Docente: Miguel ngel Ramos Grande
Modulo: Programacin de videojuegos
Practica 8: Evitar los parpadeos. Juego Mini serpiente 3
Propsito: Crear juego donde se eviten parpadeos mediante aproximaciones.
Alumnas: Diana Laura Ramrez Xochihua Lucia Ramrez Xochihua
604-INFORMATICA
INTRODUCCIN: La prctica numero 8 la cual consiste en Crear un juego donde se eviten parpadeos mediante aproximaciones. Y para eso tenemos que elaborar el juego de mini serpiente 3. DESARROLLO: Para comenzar tenemos que abrir nuestro programa Dev-C++ >archivo > nuevo >proyecto. Despus de eso nos parece una ventana en la cual tenemos que dar clic en Multimedia>Allegro aplication (static) >colocamos el nombre de nuestro proyecto>y damos enter. Cundo se da el enter inmediatamente nos manda a la ventana en la cual comenzaremos a programar. En esta prctica el comando que se utiliza es el de: "doble buffer" que consiste en no escribir directamente en pantalla, sino dibujar lo que va a aparecer, en una "pantalla no visible".
La forma de conseguir esto con Allegro es algo parecido a: BITMAP *bmp = create_bitmap(320, 200); // Creamos el bitmap auxiliar en memoria clear_bitmap(bmp); // Lo borramos putpixel(bmp, x, y, color); // Dibujamos en l blit(bmp, screen, 0, 0, 0, 0, 320, 200); // Finalmente,volcamos a pantalla
Cdigo:
#include <allegro.h>
/* Posiciones X e Y iniciales */ #define POS_X_INI 16 #define POS_Y_INI 10
#define INC_X_INI 1 #define INC_Y_INI 0
/* Pausa en milisegundos entre un "fotograma" y otro */ #define PAUSA 350
int posX, posY; /* Posicion actual */ int incX, incY; /* Incremento de la posicion */
/* Terminado: Si ha chocado o comida todas las frutas */ int terminado;
/* La tecla pulsada */ int tecla;
/* Escala: relacion entre tamao de mapa y de pantalla */ #define ESCALA 10
/* Ancho y alto de los sprites */ #define ANCHOSPRITE 10 #define ALTOSPRITE 10
/* Y el mapa que representa a la pantalla */ /* Como usaremos modo grafico de 320x200 puntos */ /* y una escala de 10, el tablero medira 32x20 */ #define MAXFILAS 20 #define MAXCOLS 33
char mapa[MAXFILAS][MAXCOLS]={ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "X X X", "X F X X", "X F X F X", "X XXXXX X X", "X X X X", "X X X X X", "X X X X XXXX", "X X X X", "X X X X", "X X X X", "X F X X", "X X X", "X X F X", "X X X X", "X X X X", "X X F X X", "X F X X X", "X X F X", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" };
int numFrutas = 8;
/* Nuestros sprites */ BITMAP *ladrilloFondo, *comida, *jugador; BITMAP *pantallaOculta; /* Y la pantalla oculta */
typedef char tipoSprite[ANCHOSPRITE][ALTOSPRITE]; /* El sprite en si: matriz de 10x10 bytes */
/* Parte repetitiva: */ do { dibujaFondo(); draw_sprite (pantallaOculta, jugador, posX*ESCALA, posY*ESCALA);
terminado = FALSE;
/* Si paso por una fruta: la borro y falta una menos */ if (mapa[posY][posX] == 'F') { mapa[posY][posX] = ' '; numFrutas --; if (numFrutas == 0) { textout(pantallaOculta, font, "Ganaste!", 100, 90, palette_color[14]); terminado = TRUE; } }
/* Si choco con la pared, se acabo */ if (mapa[posY][posX] == 'X') { textout(pantallaOculta, font, "Chocaste!", 100, 90, palette_color[13]); terminado = TRUE; }
/* En cualquier caso, vuelco la pantalla oculta */ blit(pantallaOculta, screen, 0, 0, 0, 0, 320, 200);
if (terminado) break;
/* Compruebo si se ha pulsado alguna tecla */ if ( keypressed() ) { tecla = readkey() >> 8;
switch (tecla) { case TEC_ARRIBA: incX = 0; incY = -1; break; case TEC_ABAJO: incX = 0; incY = 1; break; case TEC_IZQDA: incX = -1; incY = 0; break; case TEC_DCHA: incX = 1; incY = 0; break; }
}
posX += incX; posY += incY;
/* Pequea pausa antes de seguir */ rest ( PAUSA );
} while (TRUE); /* Repetimos indefinidamente */ /* (la condicin de salida la comprobamos "dentro") */
/* Termino con la "macro" que me pide Allegro */ END_OF_MAIN();
CONCLUSIN: Esta prctica no se me hiso muy complicada ya que era la complementacin de las practicas 6 y 7. En la prctica 8 se recalc el comando de doble buffer" que consiste en no escribir directamente en pantalla, sino dibujar lo que va a aparecer, en una "pantalla no visible", creo que se logr realizar a tiempo, con apoyo de mis compaeros, fue algo nuevo para m ya que nunca haba ocupado ese comando pero ya lo haba escuchado anteriormente en otra materia.