Zeitfunktion einbauen
-
Hallo liebes Forum!
Hab wieder einmal eine Frage, diesmal für mich privat.
Mag nicht die eleganteste Programmierung sein, aber es funktioniert so wie ich es mir vorgestellt habe:
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> int main(int argc, char* argv[]) { srand(time(0)); int eingabe,zahl1,zahl2,ergebnis; int punkte=0; int leben=3; Beginn: zahl1=rand() % 20 + 1; zahl2=rand() % 20 + 1; ergebnis=zahl1*zahl2; printf("%d Leben // %d Punkte",leben,punkte); printf("\n\n%d x %d",zahl1, zahl2); printf("\nErgebnis: "); scanf("%d",&eingabe); if(ergebnis==eingabe) { printf("Korrekt!\n"); punkte=punkte+1; goto Beginn; } else { leben=leben-1; if(leben==0) {printf("\nGAME OVER\n") ;goto Ende;} goto Beginn; } Ende: printf("Finale Punktezahl: %d Punkte",punkte); getch(); return 0; }
Nun möchte ich aber noch einbauen, dass für die Eingabe nur max. 10 Sekunden bleiben, sonst springt er automatisch zu Else, also leben-1;
Wie kann man so etwas realisieren?
-
Kennste Schleifen?
Dann brauchste auch kein goto.
Und dein Problem lässt sich nur mit Threads lösen.
-
über die funktion clock() aus time.h
könnte so aussehen:
#include <time.h> // . // . // . unsigned int timer_end=clock()+(10*CLOCKS_PER_SEC); while(clock() < timer_end) { // hier das zeug, was WÄHREND den wartesekunden getan werden soll } // hier das zeug, was NACH 10 sekunden ausgeführt wird
-
Nathan schrieb:
Und dein Problem lässt sich nur mit Threads lösen.
"Nur" ist ein sehr starkes Wort. Eine Möglichkeit ohne Threads wäre, nicht-blockierende Eingabefunktionen zu benutzen (systemabhängig) und eine zeitgeregelte Schleife drumherum zu machen. So wie von freudlos vorgeschlagen.
-
SeppJ schrieb:
Nathan schrieb:
Und dein Problem lässt sich nur mit Threads lösen.
"Nur" ist ein sehr starkes Wort. Eine Möglichkeit ohne Threads wäre, nicht-blockierende Eingabefunktionen zu benutzen (systemabhängig) und eine zeitgeregelte Schleife drumherum zu machen. So wie von freudlos vorgeschlagen.
Noch einfacher wäre
alarm(10)
aufrufen und bei SIGALRM die blockierende Einlesefunktion abzubrechen.
-
Super, danke!
Habe alles in Schleifen gepackt und clock() verwendet mit 10 Sekunden, dann immer am Anfang der Schleife auf "aktuelle Zeit + 10 Sekunden" gesetzt, wenn ich aber innerhalb einer einzelnen Frage zu lange brauche, dann ist es TIME OVER.
Perfekt, funktioniert!
lg
Michael