Пишем простой клавиатурный тренажёр в консоли С++

Иногда может понадобиться задержать выполнение программы на какое-то время. Например, можно организовать игру, в которой будет миссия на время. Могут быть другие причины. В этой статье показывается как можно организовать задержку на определённое число секунд.
Моим примером применения будет написание очень простого клавиатурного тренажёра. Надо будет вводить слова и набирать баллы. Чтобы слова были человеческими, нужно создать словарь этих слов и сохранить словарь или в массив, или в файл. Я, чтобы всем читателям было проще, буду использовать просто массив слов.
Алгоритм программы будет заключаться в том, что будет генерироваться случайный номер индекса и согласно выпавшему индексу будет вытаскиваться слово из массива, которое надо ввести. Ошибка в слове минус балл.

На самом деле при определённых знаниях вы легко можете развить эту программу. Всё зависит от полёта вашей фантазии. В основе решения заложено взятие системного времени с момента запуска программы и расчёт относительно него. В написанном коде мы берём два времени: одно перед циклом, которым фиксируем начальную точку, а другое внутри цикла при каждом повторении. Посмотрите внимательно на круглые скобки clock() . clock() — это использование функции (похоже по способу записи на rand(). Так вот, эта функция, clock() отдаёт нам время с момента запуска программы. При каждом новом повторении цикла это время, разумеется, будет получаться новым (просто потому что время не стоит на месте). А разница начальной точки и этого времени, каждый раз обновляемого, будет давать определённые значения и наша цель выйти в заведомо заданную разницу, т. е. в наше количество секунд. Отсюда формула:


С функцией clock() связано несколько сложностей: она не обязательно отдаёт результат в секундах и тип отдаваемого значения в разных системах может различаться. Чтобы обойти эти проблемы, используются константа CLOCKS_PER_SEC, определённая в файле time.h. содержит количество единиц системного времени, приходящихся на секунду. То есть, разделив показание системного времени на эту константу, вы получите секунды. Или же вы можете умножить секунды на CLOCKS_PER_SEC, чтобы получить время в системных единицах. В нашем случае мы получали время в системных единицах.
Чтобы использовать значение системного времени, мы использовали специальный тип: clock_t. Этот тип описан в файле time.h, поэтому подключив файл мы смогли использовать возможности, заложенные в С++ кем-то уже очень давно.

В простейшей вариации задержку можно организовать так:

Давным давно задержку организовывали с помощью цикла, путём достижения наибольшего числа от относительно маленького:



И даже сейчас можно видеть такие предложения решения проблемы. Но это плохое решение. В таком варианте всё напрямую зависит от быстродействия компьютера, а современные компиляторы могут вообще не выполнять такой цикл, который в листине #3.
Использованные материалы:

Язык программирования C++. Лекции и упражнения. 6-е изд (Стивен Прата)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/b-louson/izuchaem-html5-4955202/?lfrom=15589587
Яндекс.Метрика