Comment saisir une touche durant l'execution d'une boucle sans metre en "pause" [Résolu]

Signaler
Messages postés
2
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
6 décembre 2005
-
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009
-
Bonjour, c'est ici mon premier message, je suis débutant en
programmation et fait du C ;), désolé si la question a déja été posé,
je ne la retrouve plus :(



Donc voici mon problème, j'ai une boucle et je souhaite pouvoir y inséré une valeur sans que le programme ce mete en "pause" ...

Voici un exemple pour illustré ma question ;)



A=0

for (i=0;i<100;i++){

Sleep(100);

printf("i est egale a %d et A est egale a %d \n",i,A);

// A est un chiffre que l'on entre au clavier, mais l'ordi n'attend pas
qu'on la tappe pour continué la boucle, ni que l'on attent que
l'utilisateur tappe entré donc pas de scanf ou getch

}



Je pose cette question car je bloque a cause de ca dans la programation de mon Snake ;)

Voila merci a tous ;)

6 réponses

Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

Alors j'ai regarde mes codes hier soir et je me suis appercu que j'avais marquer une grosse c......... .... heu..... disons betise....

C'etait bien kbinit() qu'il faut utiliser mais pas comme je l'ai monter au dessus...

/* Debut du code */
char touche;

/* Boucle infini du jeu, met ton propre code a la place*/
while ( 1 )
{
if ( kbinit() ) // si une touche est presse
{
touche = getch(); // on recupere la touche transmise a kbinit()
}
/* Place ici ton code pour faire avancer ton serpent ..... */
}
/* Fin du code */

Le fonctionnement set simple. Tant qu'aucune touche n'est presse, la boucle continue sans rien demander. Si tu appuie sur un touche, a ce moment tu rentre dans le if et la tu fait ton traitement en fonction de l'action ( monter, descendre, bref tu vois quoi .... )
En esperant que sa te serve ....

@++ et bon code !

"Avant même de fonctionner, tout programme est déjà obsolète."
Messages postés
2
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
6 décembre 2005

merci jean84 mon nibble tourne :D, c'etait ca enfin presque :)



c'est kbhit() au lieu de kbinit()
Messages postés
143
Date d'inscription
vendredi 28 janvier 2005
Statut
Membre
Dernière intervention
25 octobre 2006

Salut,

Voila j'ai trouvé un bout de code qui pourra peut être t'aider:

#include <stdio.h>
#include
#include <ctype.h>

int key, modifiers;


/* function 1 returns 0 until a key is pressed */
while (bioskey(1) == 0);


/* function 0 returns the key that is waiting */
key = bioskey(0);


/* use function 2 to determine if shift keys were used */
modifiers = bioskey(2);
if (modifiers)
{
printf("[");
if (modifiers & RIGHT) printf("RIGHT");
if (modifiers & LEFT) printf("LEFT");
if (modifiers & CTRL) printf("CTRL");
if (modifiers & ALT) printf("ALT");
printf("]");
}
/* print out the character read */
if (isalnum(key & 0xFF))
printf("'%c'\n", key);
else
printf("%#02x\n", key);

A+
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

sinon tu peut utiliser un

while ( kbinit() != 27 ) // 27 touche "echap"
{
char touche = getch();
printf("La touche presse est %c.\n", touche);
}

en theorie sa doit fonctionner car je m'en servais pour une autre appli donc...
peut etre faudra modifier mais il me semble que c'est sa...
tiens moi au courant !

"Avant même de fonctionner, tout programme est déjà obsolète."
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

a noter que le getch() sera non bloquant car il ira prendre la valeur transmise par kbinit()... donc tout bon ;-)

"Avant même de fonctionner, tout programme est déjà obsolète."
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

lol.. j'ai pas du bien regarder alors ... desole ... Je suis content d'avoir pu te donner un coup de main ... n'oublie de poster le source de jeux !!! @++

"Avant même de fonctionner, tout programme est déjà obsolète."