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 !!");