Анализ нажатой клавиши
Во многих программах взаимодействие пользователя с программой происходит с помощью клавиш-стрелок влево, вправо, вверх, вниз. Запишем строки, возвращаемые функцией 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 выйти из программы.
Решение. Напишем сначала алгоритм:
‘---------Программа----------- ‘Задаем константы 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.