📖 Документация Qumir

← Вернуться в Playground

Исполнитель Клавиатура

Клавиатура — исполнитель для чтения нажатий клавиш в интерактивных программах. В текущей реализации интерактивный ввод клавиатуры поддержан в браузерном 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.