ALUMNO: ngel Martnez Hernndez COMPAERA DE EQUIPO: Emma Graciela Santos Blanco 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 Realizamos la prctica nmero 15, donde haremos uso del lenguaje de programacin con la ayuda e mi compaera Emma Graciela, con la librera de Allegro Static. 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.
Una vez escrito el nombre nos mostrara un cdigo que nos mostrara por defecto, y que tendremos que borrar ya que no nos ser de utilidad para nuestro programa que queremos crear.
El cdigo que ocuparemos es el siguiente: #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(); Para ejecutar el programa nos vamos a la pestaa Ejecutar>Compilar y Ejecutar o tambin con la tecla (F9), como se muestra en la imagen de abajo.
Al ejecutar nos aparecer la siguiente ventana, donde apreciamos que las imgenes se cargaron correctamente no como la prctica lo peda pero pudimos visualizar imgenes en movimiento.
Este seria el mensaje en caso de que las imgenes no pudieran ser llamadas.
CONCLUSION En la prctica no nos apareci los problemas para que se puedan corregir, y nos dimos cuenta de que la matriz es un papel importante para el uso de las paredes en nuestro juego, aprendimos a llevar a cabo lo que el profesor nos ense que fue cargar imgenes y mover con las teclas de direccionamiento.