Ожидание нажатия клавиши определенное время - C (СИ)
Формулировка задачи:
Здравствуйте, пишу игру на си - Hit the mole.
Смысл в том, что каждые 5 секунд, например, нужно генерировать число случайное, выводить на экран и ожидать ввод этого числа с клавиатуры.
Как сделать ожидание нажатия клавиши в течение 5 секунд?
Решение задачи: «Ожидание нажатия клавиши определенное время»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define _GNU_SOURCE #include <pthread.h> #include <time.h> #include <stdio_ext.h> bool get_number(const char *prompt, int *num, int sec_timeout); int main(void) { srand(time(NULL)); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); bool done = false; int guess; int secret = rand() % 1000 + 1; puts("I'm thinking about a number between 1 and 1000."); while(!done) { if(!get_number("Take a guess: ", &guess, 5)) { puts("\nYou're late! Now I'm thinking about another number."); secret = rand() % 1000 + 1; continue; } if(guess < secret) puts("Too low, guess again!"); else if(guess > secret) puts("Too high, guess again!"); else { puts("Bingo!"); done = true; } } exit(0); } void *thread_fun(void *args) { int *num = args; scanf("%d", num); return NULL; } bool get_number(const char *prompt, int *num, int sec_timeout) { bool got = true; pthread_t thread; struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); ts.tv_sec += 5; fputs(prompt, stdout); fflush(stdout); __fpurge(stdin); pthread_create(&thread, NULL, thread_fun, num); if(pthread_timedjoin_np(thread, NULL, &ts) != 0) { got = false; pthread_cancel(thread); } __fpurge(stdin); return got; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д