Анализ нажатой клавиши

   Во многих программах взаимодействие пользователя с программой происходит с помощью клавиш-стрелок влево, вправо, вверх, вниз. Запишем строки, возвращаемые функцией INKEY$ при нажатии этих клавиш, в переменные LF$ (от английского left - влево), RT$ (от английского right - вправо), UP$ (от английского up - вверх), DN$ (от английского down - вниз).

 
LF$ = CHR$(0) + CHR$(75)
RT$ = CHR$(0) + CHR$(77)
UP$ = CHR$(0) + CHR$(72)
DN$ = CHR$(0) + CHR$(80)

   Пусть в переменной s$ находится значение, полученное от функции INKEY$. Проанализируем ее содержимое с помощью нескольких IF:

 
IF s$ = LF$  THEN
‘Операторы, выполняемые по нажатию стрелки влево
   ...
ELSE IF s$ = RT$  THEN
‘Операторы, выполняемые по нажатию стрелки вправо
   ...
ELSE IF s$ = UP$  THEN
‘Операторы, выполняемые по нажатию стрелки вверх
   ...
ELSE IF s$ = DN$  THEN
‘Операторы, выполняемые по нажатию стрелки вниз
   ...
 
ELSE
‘Была нажата какая-то другая клавиша
   ...
END IF

   Более компактно эти же проверки можно сделать с помощью оператора SELECT CASE (выбрать вариант):

SELECT CASE выражение

- “заголовок” оператора выбора

   CASE значение_1 : действие_1

- выполняется, если выражение = значение_1

   CASE значение_2 : действие_2

- выполняется, если выражение = значение_2

   CASE ELSE : иное_действие

- выполняется, если значение выражения не совпадает ни с одним из перечисленных значений

END SELECT

- конец оператора выбора

   Задача. При нажатии любой из клавиш-стрелок, напечатать сообщение, какая стрелка нажата, при нажатии на Esc выйти из программы.

   Решение. Напишем сначала алгоритм:

  1. Задаем константы.
    Кроме констант LF$, RT$, UP$ и DN$ зададим еще Esc$ = CHR$(27).
  2. Ждем нажатия клавиши.
  3. Анализируем полученную символьную строку и выполняем заданное действие (печать сообщения или останов).
  4. Чтобы не запускать программу каждый раз заново, переходим к пункту 2.
 
‘---------Программа-----------
‘Задаем константы
LF$ = CHR$(0) + CHR$(75)
RT$ = CHR$(0) + CHR$(77)
UP$ = CHR$(0) + CHR$(72)
DN$ = CHR$(0) + CHR$(80)
Esc$ = CHR$(27)
‘Ждем нажатия клавиши
10 s$ = INKEY$: IF s$ = “” THEN GOTO 10
‘Анализируем строку s$
SELECT CASE s$
   CASE LF$: PRINT “Нажата стрелка влево”
   CASE RT$: PRINT “Нажата стрелка вправо”
   CASE UP$: PRINT “Нажата стрелка вверх”
   CASE DN$: PRINT “Нажата стрелка вниз”
   CASE Esc$: STOP
   CASE ELSE: GOTO 10
END SELECT
GOTO 10

   Последний оператор GOTO 10зацикливает” программу, оставляя ей единственный выход - по клавише Esc. При такой организации программы у нас есть возможность проверить реакцию на каждую из клавиш-стрелок, не запуская каждый раз программу заново. Оператор GOTO 10 в CASE ELSE выполняет другую важную функцию: не позволяет программе выйти из оператора SELECT до тех пор, пока не будет нажата одна из нужных клавиш. Нажатия на другие клавиши (кроме аварийного останова по Ctrl+Break) будут игнорироваться.

   Задание. Записать программу под именем ARROW.BAS. Добавить в оператор выбора анализ двух-трех других клавиш (“+”, “-”, “1”, “2”, “F1” и т.д.).

   Указание. Для клавиш с обычными символами нет необходимости знать их код. Нужно просто указать этот символ в кавычках после CASE.

Сайт создан в системе uCoz