Faire un Chrono timout
codrux
Messages postés
54
Statut
Membre
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour ,
Je m'explique , je cherche à refaire un jeux connu ou le but et de trouver le maximum de mot qui commence par une lettre tirée aleatoirement en 30 sec . et mon probleme et la . Comment faire comprendre au code qu'il doit s'arreter au bout de 30 sec sans pour autant bloqué le code ni avec Sleep ni avec cin>>
Merci
--
L'arduino c'est ma passion :)
Je m'explique , je cherche à refaire un jeux connu ou le but et de trouver le maximum de mot qui commence par une lettre tirée aleatoirement en 30 sec . et mon probleme et la . Comment faire comprendre au code qu'il doit s'arreter au bout de 30 sec sans pour autant bloqué le code ni avec Sleep ni avec cin>>
Merci
--
L'arduino c'est ma passion :)
2 réponses
-
en mode console, si tu veux faire un programme portable qui te permette de gérer des entrées non-bloquantes, tu peux utiliser la bibliothèque ncurses, qui en prime te permettra de gérer l'écran et en affichant le texte avec des couleurs ou enrichissements selon les capacités du terminal, en plaçant le curseur où tu veux, en effaçant le contenu des lignes, etc.
Voilà un exemple de programme qui permettrait à un utilisateur de saisir autant de chaînes qu'il peut et qui s''arrête au bout de 30 secondes en listant les chaînes qu'il a tapées.
#include <ncurses.h> #include <string> #include <vector> #include <iostream> #include <ctime> int main(void) { std::string str; std::vector<std::string> sv; initscr(); keypad(stdscr, TRUE); nodelay(stdscr, TRUE); addstr("Type strings during 30 seconds (press ENTER to finish the string)\n"); move(5, 0); std::clock_t start; while (1) { char ch; ch = getch(); if (ch != ERR) { if (ch != 10) { str.push_back(ch); } else { sv.push_back(str); str.clear(); clrtoeol(); } refresh(); } if ( (( std::clock() - start ) / (double) CLOCKS_PER_SEC) > 30 ) break; } nodelay(stdscr, FALSE); endwin(); std::cout << "You typed the following strings:" << std::endl; for(std::string s : sv) { std::cout << s << std::endl; } return 0; }
avec g++ cela se compile avec l'option-lncurses
et il faut, pour que la compilation se produise correctement, que les entêtes de ncurses et ses binaires soient dans un emplacement standard ou connu du compilateur.
C'est un programme simple, pour te montrer comment faire, sans gestion des touches particulières fléchées ou de suppression, qu'il faudrait rajouter si tu veux.
Tu peux aussi ajouter l'affichage d'un décompte du temps restant à des coordonnées précises de l'écran, le décompte des chaînes entrées, des points, etc.
Dal-
le programme ci-dessus a été testé sous Linux et devrait fonctionner de façon similaire sous Windows et toutes les plateformes sur lesquelles ncurses a été porté. Sous Windows, en dehors des portages de ncurses, il y a aussi le projet PDCurses qui est basé sur ncurses et pour lequel des binaires à jour sont plus faciles à trouver :
https://pdcurses.org/
https://sourceforge.net/projects/pdcurses/
https://github.com/wmcbrine/PDCurses -
si tu ne sais pas comment faire pour installer une bibliothèque dans ton environnement Windows, tu peux suivre le tutoriel suivant, qui prend pour exemple l'installation de la bibliothèque libcurl pour une utilisation par Codeblocks avec la chaîne de compilation MinGW sous Windows:
https://forums.commentcamarche.net/forum/affich-37594493-codeblocks-installer-une-bibliotheque-librairie
-
-
Bonjour codrux,
Est-ce un programme console ?
Est-ce un programme qui doit fonctionner seulement sous Windows, ou un autre système d'exploitation donné, ou doit-il être portable pour fonctionner sur plusieurs ?
Dal