PROPSITO: Elabora una aplicacin de videojuego con uso de mapas para que una figura avance por la pantalla, si choca con la pared exterior, con su propia cola o con algn otro obstculo, muere.
En la prctica creamos la apariencia del juego de mini serpiente, sta es apenas el principio de las siguientes 2 prcticas (7 & 8) en las cuales se les va dando una mejor presentacin. LENGUAJE DE PROGRAMACIN: C++
#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 tama?o 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 32 INCLUIMOS LA LIBRERA PARA MANEJAR LOS GRFICOS Teclas a utilizar en el juego
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 */ Rutina de dibujar el fondo
Entrar a modo grafico Se inicia Allegro 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 (screen, 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(screen, font, "Ganaste!", 100, 90, palette_color[14]); terminado = TRUE; } }
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: Si choco con la pared, se acabo 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);
readkey(); return 0; } END_OF_MAIN();
APARIENCIA AL COMPILAR:
Conclusin: En esta prctica logramos identificar como dibujamos el mapa del programa, adems de comprender la sentencia que permite que si se choca con la pared, automticamente se salga del juego. Bsicamente de esto trata la prctica y a en las siguientes se describe mejor el cdigo restante, ya que es un juego que abarca 3 prcticas. Repetimos indefinidamente si la condicin de salida se cumple.