ALUMNA: Emma Graciela Santos Blanco COMPAERO DE EQUIPO: ngel Martnez Hernndez GRUPO: 604 MATRICULA: 111650026-3 CARERRA: P.T.B. en Informtica MODULO: Programacin De Videojuegos DOCENTE: Miguel ngel Ramos Grande CONTENIDO: Esta prctica contiene un videojuego manejando distintas aproximaciones usando el programa de Dev c++ y el uso del lenguaje de programacin con la librera allegro. PRACTICA 15: Manejo de distintas aproximaciones Usando lenguaje de programacin.
PROPOSITO DE LA PRCTICA: Elabora una aplicacin de videojuego juego de Marciano usando lenguaje de programacin que muestre los movimientos mediante varios tipos de acercamientos.
INTRODUCCIN Mostraremos como realizamos la prctica nmero 15 en la creamos un programa usando lenguaje de programacin C++ que mostrara movimientos mediante varios tipos de acercamientos. DESARROLLO 1.- Para el desarrollo de la prctica 7 realizamos los siguientes pasos: Abrir Dev-Cpp>Clic en Archivo>Seleccionamos el men Nuevo>Proyecto, como aparece en la imagen siguiente.
2. - Se abrir la siguiente ventana y seleccionamos el men Multimedia>Allegro Application (Static), y escribimos el nombre de nuestro proyecto que es Miniserpiente2.Como se muestra en la imagen de abajo.
Este es el cdigo que nos manda la practica #include <allegro.h>
// Los dos siguientes valores son los retardos // hasta mover la nave y el marciano, pero ambos // en centsimas de segundo #define RETARDOCN 10 #define RETARDOCM 25
int xMarciano = MARGENIZQDO; int yMarciano = MARGENSUP; int xNave = ANCHOPANTALLA / 2; int yNave = ALTOPANTALLA-16-MARGENINF;
int desplMarciano = INCREMX; int desplNave = INCREMX;
int puedeMoverMarciano = 1; int puedeMoverNave = 1; int tecla;
int salir = 0;
/* -------------- Rutinas de temporizacin -------- */ // Contadores para temporizacin volatile int contadorN = 0; volatile int contadorM = 0;
// La rutina que lo aumenta cada cierto tiempo void aumentaContadores(void) { contadorN++; contadorM++; }
END_OF_FUNCTION(aumentaContadores);
/* -------------- Rutina de inicializacin -------- */ int inicializa() { allegro_init(); // Inicializamos Allegro install_keyboard(); install_timer();
// Intentamos entrar a modo grafico if (set_gfx_mode(GFX_SAFE, ANCHOPANTALLA, ALTOPANTALLA, 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; }
// e intentamos abrir imgenes imagen = load_pcx("spr_inv.pcx", pal); if (!imagen) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("No se ha podido abrir la imagen\n"); return 1; } set_palette(pal);
// Ahora reservo espacio para los otros sprites nave = create_bitmap(16, 16); marciano1 = create_bitmap(16, 16); marciano2 = create_bitmap(16, 16);
// Y los extraigo de la imagen "grande" blit(imagen, nave // bitmaps de origen y destino , 32, 32 // coordenadas de origen , 0, 0 // posicin de destino , 16, 16); // anchura y altura
// Rutinas de temporizacin // Bloqueamos las variables y la funcin del temporizador LOCK_VARIABLE( contadorN ); LOCK_VARIABLE( contadorM ); LOCK_FUNCTION( aumentaContadores );
// Y ponemos el temporizador en marcha: cada 10 milisegundos // (cada centsima de segundo) install_int(aumentaContadores, 10);
// Y termino indicando que no ha habido errores return 0; }
/* -------------- Rutina de inicializacin -------- */ int mueveMarciano() { // Finalmente, calculo nueva posicin xMarciano += desplMarciano; // Compruebo si debe bajar if ((xMarciano > ANCHOPANTALLA-16-MARGENDCHO) || (xMarciano < MARGENIZQDO)) { desplMarciano = -desplMarciano; // Direccin contraria yMarciano += INCREMY; // Y bajo una lnea } // O si debe volver arriba if (yMarciano > ALTOPANTALLA-16-MARGENINF) { xMarciano = MARGENIZQDO; yMarciano = MARGENSUP; desplMarciano = INCREMX; } }
/* ------------------------------------------------ */ /* */ /* -------------- Cuerpo del programa ------------- */
int main() {
// Intento inicializar if (inicializa() != 0) exit(1);
do { // Parte que se repite hasta pulsar tecla
// Slo se pueden mover tras un cierto tiempo if (contadorM >= RETARDOCM) { puedeMoverMarciano = 1; contadorM = 0; } if (contadorN >= RETARDOCN) { puedeMoverNave = 1; contadorN = 0; }
if (puedeMoverMarciano || puedeMoverNave) {
// Compruebo teclas pulsadas para salir // o mover la nave if (keypressed()) { tecla = readkey() >> 8; if ( tecla == KEY_ESC) salir = 1; if (puedeMoverNave) { if (( tecla == KEY_RIGHT) && (xNave < ANCHOPANTALLA-16-MARGENDCHO)) { xNave += INCREMX; puedeMoverNave = 0; } if (( tecla == KEY_LEFT) && (xNave > MARGENIZQDO+16)) { xNave -= INCREMX; puedeMoverNave = 0; } clear_keybuf(); } }
// Sincronizo con el barrido para evitar // parpadeos, borro la pantalla y dibujo la nave vsync(); clear_bitmap(screen); draw_sprite(screen, nave, xNave, yNave);
// Dibujo un marciano u otro, alternando if (fotograma==1) { draw_sprite(screen, marciano1, xMarciano, yMarciano); if (puedeMoverMarciano) fotograma = 2; } else { draw_sprite(screen, marciano2, xMarciano, yMarciano); if (puedeMoverMarciano) fotograma = 1; }
// Y calculo su nueva posicin si corresponde if (puedeMoverMarciano) { mueveMarciano(); puedeMoverMarciano = 0; }
}
} while (!salir);
destroy_bitmap(imagen); readkey(); return 0;
}
/* Termino con la "macro" que me pide Allegro */ END_OF_MAIN(); Cambiamos la direccin de donde se encuentran nuestras imgenes y el cdigo quedo de la siguiente manera: #include <allegro.h>
// Los dos siguientes valores son los retardos // Hasta mover la nave y el marciano, pero ambos // en cent?simas de segundo #define RETARDOCN 10 #define RETARDOCM 25
int xMarciano = MARGENIZQDO; int yMarciano = MARGENSUP; int xNave = ANCHOPANTALLA / 2; int yNave = ALTOPANTALLA-16-MARGENINF;
int desplMarciano = INCREMX; int desplNave = INCREMX;
int puedeMoverMarciano = 1; int puedeMoverNave = 1; int tecla;
int salir = 0;
/* -------------- Rutinas de temporizaci?n -------- */ // Contadores para temporizaci?n volatile int contadorN = 0; volatile int contadorM = 0;
// La rutina que lo aumenta cada cierto tiempo void aumentaContadores(void) { contadorN++; contadorM++; }
END_OF_FUNCTION(aumentaContadores);
/* -------------- Rutina de inicializacion -------- */ int inicializa() { allegro_init(); // Inicializamos Allegro install_keyboard(); install_timer();
// Intentamos entrar a modo grafico if (set_gfx_mode(GFX_SAFE, ANCHOPANTALLA, ALTOPANTALLA, 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; } // e intentamos abrir im?genes imagen = load_bitmap("C:\\Users\\Emma\\Desktop\\imagen.bmp", pal); marciano1 = load_bitmap("C:\\Users\\Emma\\Desktop\\marciano1.bmp", pal); nave = load_bitmap("C:\\Users\\Emma\\Desktop\\nave.bmp", pal); marciano2 = load_bitmap("C:\\Users\\Emma\\Desktop\\marciano2.bmp", pal);
if (!imagen) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("No se ha podido abrir la imagen\n"); return 1; } set_palette(pal);
// Ahora reservo espacio para los otros sprites nave = create_bitmap(16, 16); marciano1 = create_bitmap(16, 16); marciano2 = create_bitmap(16, 16);
// Y los extraigo de la imagen "grande" blit(imagen, nave // bitmaps de origen y destino , 32, 32 // coordenadas de origen , 0, 0 // posicion de destino , 16, 16); // anchura y altura
// Rutinas de temporizacion // Bloqueamos las variables y la funcion del temporizador LOCK_VARIABLE( contadorN ); LOCK_VARIABLE( contadorM ); LOCK_FUNCTION( aumentaContadores );
// Y ponemos el temporizador en marcha: cada 10 milisegundos // (cada cent?sima de segundo) install_int(aumentaContadores, 10);
// Y termino indicando que no ha habido errores return 0; }
/* -------------- Rutina de inicializaci?n -------- */ int mueveMarciano() { // Finalmente, calculo nueva posici?n xMarciano += desplMarciano; // Compruebo si debe bajar if ((xMarciano > ANCHOPANTALLA-16-MARGENDCHO) || (xMarciano < MARGENIZQDO)) { desplMarciano = -desplMarciano; // Direccion contraria yMarciano += INCREMY; // Y bajo una linea } // O si debe volver arriba if (yMarciano > ALTOPANTALLA-16-MARGENINF) { xMarciano = MARGENIZQDO; yMarciano = MARGENSUP; desplMarciano = INCREMX; } }
/* ------------------------------------------------ */ /* */ /* -------------- Cuerpo del programa ------------- */
int main() {
// Intento inicializar if (inicializa() != 0) exit(1);
do { // Parte que se repite hasta pulsar tecla
// Solo se pueden mover tras un cierto tiempo if (contadorM >= RETARDOCM) { puedeMoverMarciano = 1; contadorM = 0; } if (contadorN >= RETARDOCN) { puedeMoverNave = 1; contadorN = 0; }
if (puedeMoverMarciano || puedeMoverNave) {
// Compruebo teclas pulsadas para salir // o mover la nave if (keypressed()) { tecla = readkey() >> 8; if ( tecla == KEY_ESC) salir = 1; if (puedeMoverNave) { if (( tecla == KEY_RIGHT) && (xNave < ANCHOPANTALLA-16-MARGENDCHO)) { xNave += INCREMX; puedeMoverNave = 0; } if (( tecla == KEY_LEFT) && (xNave > MARGENIZQDO+16)) { xNave -= INCREMX; puedeMoverNave = 0; } clear_keybuf(); } }
// Sincronizo con el barrido para evitar // parpadeos, borro la pantalla y dibujo la nave vsync(); clear_bitmap(screen); draw_sprite(screen, nave, xNave, yNave);
// Dibujo un marciano u otro, alternando if (fotograma==1) { draw_sprite(screen, marciano1, xMarciano, yMarciano); if (puedeMoverMarciano) fotograma = 2; } else { draw_sprite(screen, marciano2, xMarciano, yMarciano); if (puedeMoverMarciano) fotograma = 1; }
// Y calculo su nueva posici?n si corresponde if (puedeMoverMarciano) { mueveMarciano(); puedeMoverMarciano = 0; }
}
} while (!salir);
destroy_bitmap(imagen); readkey(); return 0;
}
/* Termino con la "macro" que me pide Allegro */ END_OF_MAIN(); Ejecutamos el programa con F9 y nos manda la pantalla de ejecucin as como se muestra a continuacin:
En caso de que la imagen no pudiera ser cargada nos mandara un mensaje de alerta diciendo que No se ha podido abrir la imagen
CONCLUSION Despus de que el profesor nos explicara como enlazar las imgenes a el programa realizar la prctica 14 y 15 nos result ms sencillo terminarla, la realice con mi compaero de equipo ngel Martnez.