Исполнитель Клавиатура
Клавиатура — исполнитель для чтения нажатий клавиш в интерактивных программах. В текущей реализации интерактивный ввод клавиатуры поддержан в браузерном WebAssembly runtime.
Для использования укажите в начале программы:
использовать Клавиатура
Клавиатуру можно подключать вместе с другими исполнителями, например с Роботом:
использовать Клавиатура
использовать Робот
Тип сканкод
Исполнитель вводит тип сканкод для именованных констант клавиш. Значения этого типа можно сравнивать между собой, а также сравнивать с целым кодом, который возвращает код клав.
использовать Клавиатура
алг
нач
сканкод к
к := КЛ_ВНИЗ
если к = КЛ_ВНИЗ то
вывод "вниз", нс
все
кон
Команды и функции
| Имя | Тип | Описание |
|---|---|---|
код клав |
цел |
Ждет следующее нажатие клавиши и возвращает его сканкод |
сигнал клав |
лог |
Возвращает да, если с последней проверки была нажата клавиша |
сброс клав |
процедура | Очищает очередь нажатий и состояние сигнала |
код клав приостанавливает программу до следующего события keydown. Если клавиша удерживается, браузер генерирует повторные события, и код клав будет возвращать тот же сканкод снова и снова, как в классическом КуМире.
сигнал клав не возвращает код клавиши. Это одноразовый флаг: после чтения он сбрасывается.
Сканкоды
| Константа | Код | Клавиша |
|---|---|---|
КЛ_НАЗАД, КЛ_BACKSPACE |
8 | Backspace |
КЛ_TAB |
9 | Tab |
КЛ_ВВОД, КЛ_ENTER, КЛ_RETURN |
13 | Enter |
КЛ_ПРОБЕЛ, КЛ_SPACE |
32 | Space |
КЛ_PAGEUP, КЛ_PGUP |
33 | Page Up |
КЛ_PAGEDOWN, КЛ_PGDOWN |
34 | Page Down |
КЛ_END |
35 | End |
КЛ_HOME |
36 | Home |
КЛ_ВЛЕВО |
37 | Arrow Left |
КЛ_ВВЕРХ |
38 | Arrow Up |
КЛ_ВПРАВО |
39 | Arrow Right |
КЛ_ВНИЗ |
40 | Arrow Down |
КЛ_INSERT |
45 | Insert |
КЛ_DELETE |
46 | Delete |
КЛ_F1 ... КЛ_F12 |
112 ... 123 | Function keys |
КЛ_0 ... КЛ_9 |
48 ... 57 | Digit keys |
КЛ_A ... КЛ_Z |
65 ... 90 | Letter keys |
Для букв также доступны русские алиасы по физической клавиатуре ЙЦУКЕН. Например, КЛ_Й равен КЛ_Q, КЛ_Ф равен КЛ_A, КЛ_Я равен КЛ_Z.
Пример: управление Роботом стрелками
использовать Клавиатура
использовать Робот
алг
нач
цел код
закрасить
нц
код := код клав
если код = КЛ_ВЛЕВО то
влево
закрасить
все
если код = КЛ_ВПРАВО то
вправо
закрасить
все
если код = КЛ_ВНИЗ то
вниз
закрасить
все
если код = КЛ_ВВЕРХ то
вверх
закрасить
все
кц
кон
Если удерживать стрелку, код клав будет регулярно возвращать тот же сканкод, поэтому Робот продолжит движение.
Модификаторы
Ctrl, Shift, Alt и Meta пока не входят в значение, возвращаемое код клав. Сравнение код клав = КЛ_ВНИЗ остается совместимым с обычными сканкодами.
Для комбинаций клавиш планируется отдельная маска модификаторов, чтобы не смешивать код основной клавиши и состояние Ctrl/Shift/Alt.