Реализация таймера для программы тетрис - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Возникла необходимость написать таймер обратного отсчета для реализации движения фигуры в тетрисе с определенным интервалом времени. Суть в том, что при каждом смещении падающей фигурки вниз нужно подождать определенное время, например 1 секунду. Но функцию Sleep в данном случае использовать не получится, т.к. нужна не пауза, а ожидание ввода какой-либо клавиши в течение этой секунды (для смещения или разворота фигуры). Попытался реализовать с помощью функции clock() в простенькой тестирующей программе, вот что получилось:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    clock_t start, end;
    start = clock();                               //Сохраняем текущее время в переменной start
    end = start + 1;                               //Присваиваем переменной end значение start, увеличенное на 1 секунду
    while(clock() < end)                           //Пока текущее время меньше, чем необходимое 
    printf("1 seconds has not yet passed");        //Выводить сообщения
    return 0;
}
По моему замыслу в течение одной секунды компьютер должен был выводить на экран заданное сообщение. Однако произошло это всего лишь один раз. Пожалуйста, подскажите, в чем же тут ошибка, или какой-нибудь другой способ реализовать задуманное.

Решение задачи: «Реализация таймера для программы тетрис»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
 
int main()
{
    printf("Start\n");
    float start, s = 3.0, k = 0.0; // s - требуемое время
    start = clock()/CLOCKS_PER_SEC;                             
    while(k < s)
    {                           
        k +=  clock()/CLOCKS_PER_SEC - start;
        start = clock()/CLOCKS_PER_SEC;
    }
    printf("End"); 
    getch();
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек: iostream, stdlib.h, time.h, conio.h
  2. Объявление переменных: start (начальное время), s (требуемое время), k (переменная для хранения времени, прошедшего с начала игры)
  3. Вычисление начального времени
  4. Вход в цикл while, который будет выполняться до тех пор, пока время, прошедшее с начала игры, не достигнет требуемого времени
  5. Внутри цикла вычисляется время, прошедшее с начала игры до текущего момента
  6. Обновляется значение start (текущее время)
  7. Выполняется код, соответствующий игре Тетрис
  8. После окончания игры выводится сообщение End
  9. Программа ожидает нажатия клавиши для завершения работы

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы