В ANSI C, как я могу сделать таймер? - PullRequest
0 голосов
/ 27 апреля 2018

Я создаю игру Boggle in C для проекта. Если вы не знакомы с Богглом, это нормально. Короче говоря, есть ограничение по времени в каждом раунде. Я делаю ограничение в 1 минуту.

У меня есть цикл, который отображает игровую доску и просит пользователя ввести слово, затем вызывает функцию, которая проверяет, принято ли слово, и затем снова возвращается к началу цикла.

    while (board == 1)
{

    if (board == 1)
    {
        printf(display gameboard here);
        printf("Points: %d                  Time left: \n", player1[Counter1].score);

        printf("Enter word: ");
        scanf("%15s", wordGuess);

        pts = checkWord(board, wordGuess);

Необходимо изменить while (board == 1), чтобы оно повторялось только в течение 1 минуты.

Я хочу, чтобы пользователь мог делать это только в течение 1 минуты. Я также хотел бы, чтобы отображалось время, когда у меня есть Оставшееся время: в выражении printf. Как бы я этого достиг? Я видел в Интернете некоторые примеры использования таймера в C, и я думаю, что это возможно только в том случае, если я позволю пользователю выйти за пределы лимита времени, но когда пользователь попытается ввести слово после лимита времени, он сообщит им, что время истекло. Есть ли другой способ?

РЕДАКТИРОВАТЬ: я кодирую это на ПК с Windows 10.

1 Ответ

0 голосов
/ 27 апреля 2018

Используйте стандартные C time() для получения количества секунд (реального времени) с начала эпохи (1970-01-01 00:00:00 +0000 UTC) и difftime() для подсчета количества секунд между двумя значениями time_t.

Для количества секунд в игре используйте константу:

#define  MAX_SECONDS  60

Тогда

char    word[100];
time_t  started;
double  seconds;
int     conversions;

started = time(NULL);
while (1) {

    seconds = difftime(time(NULL), started);
    if (seconds >= MAX_SECONDS)
        break;

    /* Print the game board */

    printf("You have about %.0f seconds left. Word:", MAX_SECONDS - seconds);
    fflush(stdout);

    /* Scan one token, at most 99 characters long. */
    conversions = scanf("%99s", word);
    if (conversions == EOF)
        break;    /* End of input or read error. */
    if (conversions < 1)
        continue; /* No word scanned. */

    /* Check elapsed time */
    seconds = difftime(time(NULL), started);
    if (seconds >= MAX_SECONDS) {
        printf("Too late!\n");
        break;
    }

    /* Process the word */
}
...