Vous êtes sur la page 1sur 4

Prctica

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

#define INC_X_INI_1 -1
#define INC_X_INI_2 1
#define INC_Y_INI_1 0
#define INC_Y_INI_2 0

/* 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 */

/* Si ha chocado alguna moto */
int chocado;

/* La tecla pulsada */
int tecla;


int main()
{

allegro_init(); /* Inicializamos Allegro */
install_keyboard();
install_timer();

/* 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;
}

/* Si todo ha ido bien: empezamos */

/* Rectangulo amarillo alrededor */
rect(screen,0,0,599,399, palette_color[14]);

/* Valores iniciales */
posX1 = POS_X_INI_1;
posX2 = POS_X_INI_2;
posY1 = POS_Y_INI_1;
posY2 = POS_Y_INI_2;

incX1 = INC_X_INI_1;
incX2 = INC_X_INI_2;
incY1 = INC_Y_INI_1;
incY2 = INC_Y_INI_2;

/* Parte repetitiva: */
do {
chocado = FALSE;

/* 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;

line (screen, posX2, posY2, futX2, futY2, palette_color[10]);
posX2 = futX2; posY2 = futY2;


/* 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.

Vous aimerez peut-être aussi