Обработка событий клавиатуры

Надо также обеспечить выход по клавише Esc. При этом объект должен двигаться и нельзя просто ждать нажатия на клавишу с помощью функции getch. В этом случае используют следующий алгоритм:

1. Проверяем, нажата ли какая-нибудь клавиша; это делает функция kbhit, которая воз-

вращает результат 0 (ответ «нет»), если никакая клавиша не нажата, и ненулевое значе-

ние, если нажали любую клавишцу. В программе проверка выполнена с помощью условного оператора

if (kbhit()) {... }

2. Если клавиша нажата, то

• Определяем код этой клавиши, вызывая функцию getch. Код клавиши – это ее но-

мер в таблице символов. Если на символ отводится 1 байт памяти, то всего можно использовать 256 разных символов и их коды изменяются в интервале от 0 до 255.

• Если полученный код равен коду клавиши Esc (27), то выходим из цикла Для того, чтобы управлять программой с помощью клавиш, нужно знать их коды. Вот некоторые из них

Esc 27

Enter 13

пробел 32

Программа

Программа «в сборе» выглядит так:

Осталось лишь дописать основной блок, который обозначен в программе комментарием

/* анимация */

В нем нужно организовать цикл анимации, который заканчивается тогда, когда квадрат коснулся границ окна или нажата клавиша Esc.

Цикл while выполняется до тех пор, пока фигура находится в пределах экрана. Нажатие

на клавишу Esc обрабатывается внутри цикла. Сначала мы определяем, нажата ли какая нибудь клавиша (с помощью функции kbhit), затем определяем ее код (функция getch) и, если он равен коду клавиши Esc, выходим из цикла с помощью оператора break.

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

20 мс, вызывая функцию delay с параметром 20, и затем стираем фигуру. После этого изменяем координату x и возвращаемся к началу цикла.

• Чтобы определить нажата ли какая-нибудь клавиша, используется функция kbhit. Она

возвращает 0, если никакая клавиша не нажата, и ненулевое значение, если была нажата

какая-то клавиша.

• Если клавиша уже была нажата, ее код можно получить (без дополнительного ожидания)

с помощью функции getch.

• Чтобы сделать задержку на заданное время, используется процедура delay. Параметром

этой процедуры является величина задержки в миллисекундах. Если уменьшать задержку,

фигура будет двигаться быстрее.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: