2017-11-13 4 views
0

Ich möchte wissen, wie ich einen Countdown erstellen kann, die gestoppt werden kann, wenn der Benutzer etwas wie das Schreiben eines bestimmten Satzes eingibt.Stoppen Sie einen Countdown-Timer mit Benutzereingabe

In meinem Fall möchte ich etwas wie ein "Simon sagt" Spiel machen. Simon sagt "UP" und Sie müssen UP innerhalb von zwei Sekunden eingeben. Wenn Sie etwas eingeben, das nicht 'UP' ist, stoppt der Countdown und es wird ausgedruckt, dass Sie scheitern. Wenn Sie 'UP' eingeben, bricht der Countdown ab und Sie sagen, dass Sie gewinnen. Sie werden außerdem benachrichtigt, dass Sie fehlschlagen, wenn der Countdown Null erreicht und Sie nichts eingegeben haben.

Hier ist, was ich bisher geschrieben habe:

#include <iostream> 
    #include <string> 
    #include <cmath> 
    #include<windows.h> 
    using namespace std; 


int main() { 
    string answer; 
    int success = 0; 
    int counter = 0; 

    cout << "Simon says: UP" << endl; 

    for (int i = 2; i > 0; i--) { 

     cin >> answer; 
     if (answer == "UP") { 

      cout << "You win" << endl; 
      break; 

     } 
     else { 

      cout << "You lose" << endl; 

     } 

    } 

    return 0; 

} 
+0

Bitte einen Blick auf dieses [C++ Bücher] (https://stackoverflow.com/questions/38 8242/the-definitive-c-Buchführer-und-Liste). – Ron

Antwort

1

Ohne auf Multithreading, könnten Sie _kbhit() versuchen, die nicht blockierende Art und Weise Benutzereingaben in Kombination mit _getch() zu lesen, sind beide in conio.h

#include <iostream> 
#include <string> 
#include <chrono> 
#include <conio.h> 

int main() 
{ 

    int timeout = 2; //2 seconds 

    std::string answer, say = "UP"; 

    std::cout << "Simon says: " << say << std::endl; 
    std::cout << "You say: "; 

    // get start time point 
    std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); 
    do 
    { 
     if (_kbhit()) // check user input 
     { 
      char hit = _getch(); // read user input 
      std::cout << hit; // show what was entered 

      if (hit == 13) 
       break; // user hit enter, so end it 

      answer += hit; // add char to user answer 
     } 
    } 
    while (std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now() - start).count() < timeout); 

    // check if provided answer matches 

    if (answer == say) 
     std::cout << "\nYou win!" << std::endl; 
    else 
     std::cout << "\nYou lose!" << std::endl; 

    return 0; 
} 

enter image description here