Utilisation des fonctions kbhit() et getch()

 Fonctions kbhit(); et getch();

La fonction int kbhit(void); indique si une touche du clavier a été frappée et que, par conséquent, un caractère est en attente d'être lu. Son appel renvoie 0 si aucun caractère n'est en attente et une valeur non nulle autrement. La lecture proprement dite est réalisée à l'aide de la fonction int getch(void);. Celle-ci renvoie le code ASCII (valeur entière) de la touche frappée. Une fois la lecture effectuée, la fonction kbhit(); retourne à nouveau une valeur nulle, en attendant la frappe d'une nouvelle touche. Voici un exemple :

int frappe;
while(!kbhit()) 
{
    frappe=getch();
    if(frappe=='a')
        { outtextxy(10,10,"Touche 'a' saisie."); delay(500); }
    else
        cleardevice();
}

L'intérêt de la fonction kbhit(); dans un jeu est évidente puisqu'elle permet de détecter si une touche est frappée par le joueur sans interrompre le déroulement du jeu, comme le ferait l'emploi seul de la fonction getch();, qui attend une "réponse". D'ailleurs, on peut utiliser la fonction getch(); seule, pour faire une pause. L'utilisateur décide alors quand il veut poursuivre en appuyant sur une touche...
Certaines touches, notamment les touches de navigation (flèches) souvent utilisées dans les jeux, possèdent un nom prédéfini, par exemple KEY_LEFT, KEY_RIGHT, KEY_UP et KEY_DOWN pour les flèches gauche, droite, haut et bas, respectivement. Attention, cette valeur n'est renvoyée que lors du deuxième appel de getch();. On peut écrire :

if(frappe==KEY_UP)
    outtextxy(10,10,"Flèche gauche !!");