tcnica del estado de Veracruz # 165 Lic. Jess Reyes Heroles Modulo Povi-02 Programacin de videojuegos P.S.P Miguel ngel Ramos Grande Alumnos Brenda Cruz Mata Francisco Javier Flores Roman Jorge Alberto Hernndez Rojas
Reporte De Practica 8
Practica 8
Evitar los parpadeos, juego mini serpiente 3 mediante aproximaciones Nmero. Propsito de la prctica: Elabora una aplicacin de videojuego mediante aproximaciones, para que se eviten parpadeos al avanzar.
Materiales, Herramientas, Instrumental, Maquinaria y Equipo Equipo de cmputo Core Duo o superior Dispositivo de almacenamiento (USB) Windows Compilador de lenguaje seleccionado. (C, C++ o Java)
Aplica las siguientes medidas de seguridad e higiene en el desarrollo de la prctica: - Evita la manipulacin de comida o lquidos cerca del equipo de cmputo - No introduce objetos extraos en las entradas fsicas de dispositivos de la computadora - No utiliza imanes cerca de discos compactos, memorias extrables de la computadora - Limpia el rea de trabajo, prepara herramientas y los materiales a utilizar Utilizar las hojas por ambas caras y colocar las de desecho las en el recipiente destinado para su posterior envi a reciclaje NOTA al Alumno: Realizar un respaldo de la informacin que generes en un dispositivo de almacenamiento. NOTA El docente deber adecuar la prctica al equipo y recursos de software con el que se cuenta. NOTA: El docente organizar equipos de trabajo y puede basarse en la referencia siguiente: http://www.nachocabanes.com/videojuegos/ipj/ipj09.php Pautas generales. Selecciona un lenguaje de programacin. Utiliza aproximaciones con tcnica "doble buffer" que consiste en no escribir directamente en pantalla, sino dibujar lo que va a aparecer, en una "pantalla no visible". Construir un algoritmo para juego de Mini serpiente 3 Utiliza el lenguaje seleccionado y bibliotecas necesarias. Emplea el modo grfico. Crea las rutinas algortmicas necesarias para un juego donde se eviten parpadeos mediante aproximaciones. Declara rutinas para hacer aproximaciones mediante empleo de "doble buffer". Crea un nuevo bitmap llamado "pantalla Oculta", se dibuja ah la nave, los marcianos y el disparo. Vuelca en pantalla al final de cada secuencia completa de dibujado. Vuelve a dibujar aunque sea realmente lo mismo que ya haba antes Termina el programa y sal del modo grfico.
Inicio del programa #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 550
INT POSX, POSY; /* POSICIN ACTUAL */ INT INCX, INCY; /* INCREMENTO DE LA POSICIN */ /* TERMINADO: SI HA CHOCADO O COMIDA TODA LAS FRUTAS */ INT TERMINADO; /* LA TECLA PULSADA */ INT TECLA; /* ESCALA: RELACIN 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 MEDIR 32X20 */ #DEFINE MAXFILAS 20 #DEFINE MAXCOLS 33
CHAR MAPA[MAXFILAS][MAXCOLS]={
}; 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 */ TIPOSPRITE SPRITELADRILLO = {{0,2,2,2,2,2,2,2,2,0}, {2,1,1,1,1,1,1,1,1,2}, {2,1,1,1,1,1,1,1,1,2}, {2,1,1,1,1,1,1,1,1,2}, {2,1,1,1,1,1,1,1,1,2}, {2,1,1,1,1,1,1,1,3,2}, {2,1,1,1,1,1,1,3,3,2}, {2,1,1,1,1,1,3,3,2,2}, {2,2,2,2,2,2,2,2,2,0} }; TIPOSPRITE SPRITECOMIDA = {{0,0,0,2,0,0,0,0,0,0}, {0,0,2,2,0,0,2,2,0,0}, {0,4,4,4,2,2,4,4,0,0}, {4,4,4,4,4,2,4,4,4,0}, {4,4,4,4,4,4,4,4,4,0}, {4,4,4,4,4,4,4,4,4,0}, {4,4,4,4,4,4,4,4,4,0}, {4,4,4,4,4,4,4,4,4,0}, {0,4,4,4,4,4,4,4,0,0} }; TIPOSPRITE SPRITEJUGADOR = {{0,0,3,3,3,3,3,0,0,0}, {0,3,1,1,1,1,1,3,0,0}, {3,1,1,1,1,1,1,1,3,0}, {3,1,1,1,1,1,1,1,3,0}, {3,1,1,1,1,1,1,1,3,0}, {3,1,1,1,1,1,1,1,3,0}, {0,3,1,1,1,1,1,3,0,0}, {0,0,3,3,3,3,3,0,0,0} }; /* -------------- RUTINA DE CREAR LOS SPRITES ------------- */ VOID CREASPRITES() { INT I, J;
LADRILLOFONDO = CREATE_BITMAP(10, 10); CLEAR_BITMAP(LADRILLOFONDO); FOR(I=0; I<ANCHOSPRITE; I++) FOR (J=0; J<ALTOSPRITE; J++) PUTPIXEL(LADRILLOFONDO, I, J, PALETTE_COLOR[ SPRITELADRILLO[J][I] ]);
COMIDA = CREATE_BITMAP(10, 10); CLEAR_BITMAP(COMIDA); FOR(I=0; I<ANCHOSPRITE; I++) FOR (J=0; J<ALTOSPRITE; J++) PUTPIXEL(COMIDA, I, J, PALETTE_COLOR[ SPRITECOMIDA[J][I] ]);
JUGADOR = CREATE_BITMAP(10, 10); CLEAR_BITMAP(JUGADOR); FOR(I=0; I<ANCHOSPRITE; I++) FOR (J=0; J<ALTOSPRITE; J++) PUTPIXEL(JUGADOR, I, J, PALETTE_COLOR[ SPRITEJUGADOR[J][I] ]);
PANTALLAOCULTA = CREATE_BITMAP(320, 200); } /* -------------- RUTINA DE DIBUJAR EL FONDO ------------- */ VOID DIBUJAFONDO() { INT I, J; CLEAR_BITMAP(PANTALLAOCULTA); FOR(I=0; I<MAXCOLS; I++) FOR (J=0; J<MAXFILAS; J++) { IF (MAPA[J][I] == 'X') DRAW_SPRITE(PANTALLAOCULTA, LADRILLOFONDO, I*ESCALA, J*ESCALA); IF (MAPA[J][I] == 'F') DRAW_SPRITE(PANTALLAOCULTA, COMIDA, I*ESCALA, J*ESCALA); } } CUERPO DEL PROGRAMA int main() { allegro_init(); /* Inicializamos Allegro */ install_keyboard(); install_timer(); /* Intentamos entrar a modo grafico */ if (set_gfx_mode(GFX_SAFE, 320, 200, 0, 0) != 0) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message( "Incapaz de entrar a modo grafico\n%s\n", allegro_error); return 1; } /* ----------------------- Si todo ha ido bien: empezamos */ creaSprites(); dibujaFondo(); /* Valores iniciales */ posX = POS_X_INI; posY = POS_Y_INI; incX = INC_X_INI; incY = INC_Y_INI; /* 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") */ readkey(); destroy_bitmap(pantallaOculta); destroy_bitmap(jugador); destroy_bitmap(comida); destroy_bitmap(ladrilloFondo); return 0; } /* Termino con la "macro" que me pide Allegro */ END_OF_MAIN();
Conclusin. En esta prctica sirve para lo que es la creacin de cuadros de forma de laberinto e interpretar el posicionamiento de las piezas en un cierto punto donde si est mal posicionada no te permite correr y por medio de colisiones para terminar el videojuego.