IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

ignore saisie clavier pendant décompte.


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2020
    Messages : 8
    Points : 10
    Points
    10
    Par défaut ignore saisie clavier pendant décompte.
    Bonjour à tous.

    je fais un petit jeu où j'ai un décompte en seconde et je demande une réponse.
    Le problème c'est pendant le décompte si l'utilisateur tape une ou des touches et valide avec la touche return, il le prend en compte avant la demande la réponse.

    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    #include <string>
    #include <thread>
    #include <chrono>
    #include <unistd.h>
    #include <iomanip>
    #include <limits>
     
    static bool finish = false;
     
    /* void compteurTemps(int nombreCoups, std::string motMelange)
    {
        using namespace std::literals::chrono_literals;
     
        for (int i(10); i >= 0; i--)
        {
            std::system("clear");
            std::cout << "nombre restant d'essais : " << nombreCoups << "\r" << std::endl;
            std::cout << "\nQuel est ce mot : " << motMelange << "\r" << std::endl;
            std::cout << "temps restant : " << std::right << std::setw(2) << std::setfill('0') << i << "\r" << std::endl;
            std::this_thread::sleep_for(1s);
        }
        std::system("clear");
        std::cout << "\nRéponse :  " << std::flush;
    } */
     
    std::string melangerlettres(std::string mot)
    {
        std::string melange;
        int position(0);
     
        while (mot.size() != 0)
        {
            position = rand() % mot.size();
            melange += mot[position];
            mot.erase(position, 1);
        }
        return melange;
    }
     
    int main()
    {
        std::string motMystere, motMelange, motUtilisateur, reponseRejouer;
        srand(time(0));
        using namespace std::literals::chrono_literals;
        do
        {
            std::system("clear");
     
            std::cout << "mot mystere: " << std::endl;
            std::cin >> motMystere;
     
            std::system("clear");
     
            int nombreCoups = motMystere.size();
     
            motMelange = melangerlettres(motMystere);
     
            do
            {
                std::system("clear");
     
                std::cout << "nombre restant d'essais : " << nombreCoups << std::endl;
                std::cout << "\nQuel est ce mot : " << motMelange << std::endl;
     
                //std::thread reponse(compteurTemps, nombreCoups, motMelange);
     
                //reponse.join();
     
                for (int i(3); i >= 0; i--)
                {
                    std::system("clear");
                    std::cout << "nombre restant d'essais : " << nombreCoups << "\r" << std::endl;
                    std::cout << "\nQuel est ce mot : " << motMelange << "\r" << std::endl;
                    std::cout << "temps restant : " << std::right << std::setw(2) << std::setfill('0') << i << "\r" << std::endl;
                    std::this_thread::sleep_for(1s);
                }
     
                std::system("clear");
     
                std::cout << "\nRéponse :  " << std::flush;
     
                std::cin >> motUtilisateur;
     
                nombreCoups -= 1;
     
                if (nombreCoups < 1)
                {
                    std::cout << "COUPS DEPASSES." << std::endl;
                    motUtilisateur = motMystere;
                }
                else
                {
                    if (motUtilisateur != motMystere)
                    {
                        std::cout << "NON RECOMMENCE." << std::endl;
                    }
                    else
                    {
                        std::cout << "BRAVO." << std::endl;
                    }
                }
            } while (motUtilisateur != motMystere);
     
            std::cout << "\nVoulez-vous rejouer ? (o/n)" << std::endl;
            std::cin >> reponseRejouer;
     
        } while (reponseRejouer == "o" || reponseRejouer == "O");
     
        return 0;
    }

  2. #2
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2020
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    bon j'ai trouvé une speudo solution mais il y a encore un détail c'est qu'à la fin du thread de décompte, il faut obligatoirement appuyer sur enter pour arrivé à la demande de réponse.
    donc si quelqu'un a une petite idée ça me ferait bien avancer merci.
    je reposte le code actuel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    #include <string>
    #include <thread>
    #include <chrono>
    #include <unistd.h>
    #include <iomanip>
    #include <limits>
     
    bool clavierEteint = false;
     
    void compteurTemps(int nombreCoups, std::string motMelange)
    {
        using namespace std::literals::chrono_literals;
     
        for (int i(3); i >= 0; i--)
        {
            std::system("clear");
            std::cout << "nombre restant d'essais : " << nombreCoups << "\r" << std::endl;
            std::cout << "\nQuel est ce mot : " << motMelange << "\r" << std::endl;
            std::cout << "temps restant : " << std::right << std::setw(2) << std::setfill('0') << i << "\r" << std::endl;
            std::this_thread::sleep_for(1s);
        }
        clavierEteint = true;
    }
     
    std::string melangerlettres(std::string mot)
    {
        std::string melange;
        int position(0);
     
        while (mot.size() != 0)
        {
            position = rand() % mot.size();
            melange += mot[position];
            mot.erase(position, 1);
        }
        return melange;
    }
     
    int main()
    {
        std::string motMystere, motMelange, motUtilisateur, reponseRejouer;
        srand(time(0));
        using namespace std::literals::chrono_literals;
        do
        {
            std::system("clear");
     
            std::cout << "mot mystere: " << std::endl;
            std::cin >> motMystere;
     
            std::system("clear");
     
            int nombreCoups = motMystere.size();
     
            motMelange = melangerlettres(motMystere);
     
            do
            {
                std::system("clear");
     
                std::cout << "nombre restant d'essais : " << nombreCoups << std::endl;
                std::cout << "\nQuel est ce mot : " << motMelange << std::endl;
     
                std::thread reponse(compteurTemps, nombreCoups, motMelange);
     
                while (!clavierEteint)
                {
                    // std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
                    std::cin.ignore();
                }
     
                std::system("clear");
     
                std::cout << "\nRéponse :  " << std::flush;
                reponse.join();
     
                std::cin >> motUtilisateur;
     
                nombreCoups -= 1;
     
                if (nombreCoups < 1)
                {
                    std::cout << "COUPS DEPASSES." << std::endl;
                    motUtilisateur = motMystere;
                }
                else
                {
                    if (motUtilisateur != motMystere)
                    {
                        std::cout << "NON RECOMMENCE." << std::endl;
                    }
                    else
                    {
                        std::cout << "BRAVO." << std::endl;
                    }
                }
                clavierEteint = false;
            } while (motUtilisateur != motMystere);
     
            std::cout << "\nVoulez-vous rejouer ? (o/n)" << std::endl;
            std::cin >> reponseRejouer;
     
        } while (reponseRejouer == "o" || reponseRejouer == "O");
     
        return 0;
    }

Discussions similaires

  1. Récupérer une saisie clavier de l'utilisateur
    Par le y@m's dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 23/09/2019, 19h25
  2. Richeditctrl - problème de saisie clavier
    Par KO-Tek dans le forum MFC
    Réponses: 5
    Dernier message: 20/12/2005, 11h15
  3. [PL/SQL] saisie clavier
    Par seal dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/08/2005, 11h54
  4. Simuler saisie clavier SendMessage et WM_KEYDOWN
    Par VoLc0m dans le forum Windows
    Réponses: 8
    Dernier message: 11/05/2005, 15h31
  5. Saisie clavier marche pas
    Par Dokho1000 dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 11/03/2004, 12h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo