C/Visual C - Ayuda con un codigo para teclado usando allegro.

 
Vista:

Ayuda con un codigo para teclado usando allegro.

Publicado por Chacal (2 intervenciones) el 08/11/2006 19:47:43
Hola, muy buenas. Estoy aprendiendo por mi cuenta a programar videojuegos con C++ y Allegro y soy algo novato tengo 16 años. Aver si pueden ustedes echarme una mano:

Estoy programando una funcion que consiste en que esta devolvera 1 si se pulsa una tecla del teclado, pero solo una vez de los ciclos dentro de un "while", me explico mejor, esta funcion me permitiria en un menu de entre las opciones, por ejemplo seleccionar la opcion que yo quiera pulsando el boton arriba y que solo se moviera una posición el puntero o resaltador del menu, y no volveria a moverse hasta soltar el boton y volverlo a pulsar.

Esta es la funcion que desarrolle y que se encuentra en keybfunc.h, un archivo de cabecera que tengo incluido en el programa:
__________________________________________________
int suelto=1;
int valido=0;
int kbkey;
int keypress_once(const char *tecla);

int keypress_once(const char *tecla){

if(strcmp( tecla, "arriba")==0) kbkey = key[KEY_UP];
if(strcmp( tecla, "abajo")==0) kbkey = key[KEY_DOWN];

if(kbkey)
{
if(suelto == 1)
{
valido = 1;
suelto = 0;

}
else
{
valido = 0;
suelto = 0;
}
}
else
{
suelto = 1;
valido = 0;
}
return valido;
}
___________________________________________________

Esta funcion la llamo en main.c de la siguiente manera:
___________________________________________________

int n_opcion=1;
while (!key[KEY_ESC]) {
if(keypress_once("arriba")==1) n_opcion = n_opcion - 1;
if(keypress_once("abajo")==1) n_opcion = n_opcion + 1;

textprintf(buffer, font, 0, 0, makecol(255,0,0), "Opcion:%d",n_opcion);
blit(buffer, screen, 0, 0, 0, 0, 640, 480);
clear(buffer);

}

Estoy dandole vueltas a ver por que no funciona, y no lo consigo, debe ser por que estoy mas acostumbrado al php.. :S

Gracias de antemano, un saludo!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder