ELABORAR JUEGO ENVIANDO ESPERAR AL TECLADO, MOTOS DE LUZ.
Propsito: Elaborar una aplicacin de videojuego que evite esperar al teclado, para evitar que la computadora quede parada esperando a que se pulse una tecla y la accin prosiga aunque no se toque el teclado.
Introduccin: Para poder comenzar con esta prctica, se utiliz el link que viene en cada una de nuestras prcticas para revisar el su cdigo. A pesar de que se ejecutaba con normalidad mi compaera y yo decidimos cambiar algunas, como lo fueron las teclas que utilizaba cada jugador pues en el cdigo que se nos dio se utilizaban las teclas del PAD y nuestras laptops no tienen este teclado y se nos dificultaba probar la funcionalidad del juego. Cambiamos tambin los colores de las motos, la ubicacin inicial y adems agrandamos la pantalla del juego.
El cdigo de nuestra practica qued de la siguiente manera(Ya con las modificaciones antes explicadas)
#include <allegro.h> /* Posiciones X e Y iniciales de ambos jugadores */ #define POS_X_INI_1 300 #define POS_X_INI_2 305 #define POS_Y_INI_1 200 #define POS_Y_INI_2 200
/* Pausa en milisegundos entre un "fotograma" y otro */
#define PAUSA 150
/* Teclas predefinidas para cada jugador */ #define TEC_ARRIBA_1 KEY_E #define TEC_ABAJO_1 KEY_X #define TEC_IZQDA_1 KEY_S #define TEC_DCHA_1 KEY_D
#define TEC_ARRIBA_2 KEY_I #define TEC_ABAJO_2 KEY_M Librera bsica que utilizaremos. Aqu se definen las posiciones iniciales tanto de la moto1 como de la moto2 Nos da la pausa entre movimiento y movimiento Se establecen las teclas que utilizar cada jugador para guiar su moto #define TEC_IZQDA_2 KEY_J #define TEC_DCHA_2 KEY_L
int posX1, posY1, posX2, posY2; /* Posiciones actuales */ int incX1, incY1, incX2, incY2; /* Incremento de la posicion */ int futX1, futY1, futX2, futY2; /* Posiciones futuras */
/* Intentamos entrar a modo grafico */ if (set_gfx_mode(GFX_SAFE,600,400,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; }
/* Compruebo si alguna va a colisionar */ futX1 = posX1 + incX1; futX2 = posX2 + incX2; futY1 = posY1 + incY1; futY2 = posY2 + incY2;
if (getpixel(screen, futX1, futY1)!=0){ textout(screen, font, "La moto 1 ha chocado!", 300,90, palette_color[14]); chocado =TRUE; }
if (getpixel(screen, futX2, futY2)!=0){ Variable para una colisin Variable que guarda las teclas presionadas En esta parte se inicializa ALLEGRO, se instalan los dispositivos de entrada y se establecen las medidas de la pantalla Este rectngulo define el espacio en el que las motos circularn Se le dan los valores a las variables de X, Y a cada moto Se empieza a crear el ciclo repetitivo con DO-WHILE, se inicia cuando chocado se un valor FALSO Aqu se hacen las pruebas para determinar si, alguna de las motos colisionar entre ellas. textout(screen, font, "La moto 2 ha chocado!", 300,110, palette_color[10]); chocado = TRUE; }
if (chocado)break;
/* Si ninguna ha colisionado, avanzan */ line (screen, posX1, posY1, futX1, futY1, palette_color[14]); posX1 = futX1; posY1 = futY1;
/* Compruebo si se ha pulsado alguna tecla */ if ( keypressed() ){ tecla = readkey() >>8;
switch(tecla){ case TEC_ARRIBA_1: incX1 = 0; incY1 = -1;break; case TEC_ABAJO_1: incX1 = 0; incY1 = 1;break; case TEC_IZQDA_1: incX1 = -1; incY1 = 0;break; case TEC_DCHA_1: incX1 = 1; incY1 = 0;break;
case TEC_ARRIBA_2: incX2 = 0; incY2 = -1;break; case TEC_ABAJO_2: incX2 = 0; incY2 = 1;break; case TEC_IZQDA_2: incX2 = -1; incY2 = 0;break; case TEC_DCHA_2: incX2 = 1; incY2 = 0;break; } }
/* Pequea pausa antes de seguir */ rest ( PAUSA );
} while (TRUE);/* Repetimos indefininamente */ /* (la condicion de salida la comprobamos "dentro") */
readkey(); return 0;
}
/* Termino con la "macro" que me pide Allegro */ END_OF_MAIN();
Mientras ninguna colisione ambas seguirn avanzando y dejando su huella en la pantalla Se verifica si el usuario ah tecleado una letra, la moto correspondiente a esta se mover en la direccin indicada Se detiene le programa para que el usuario pueda observar lo que pasa
CONCLUSION Es complicado entender el cdigo pero basta con solo prestar atencin e investigar para que sirve alguna instruccin que no entiendas, ademas de que debed darle tu toque personal aunque el cdigo ya est hecha. Nos percatamos de que para que las motos se movieran aqu se utiliza un switch con su CASE y sus BREAKS (respectivamente), muy parecidos a los IF que en clases anteriores habiamos utilizados.