Интерактивные истории, текстовые игры и квесты
Регистрация / Вход
Посетите наш новый сайт AXMAJS.RU
Элементы интерфейса. Экранная клавиатура
Борис Семёнов (Morych), 09.06.13 | Практика ASM
Экранная клавиатура предназначена для ввода пользователем какой-либо последовательности символов. Конечно, в ASM для этих целей есть специальный макрос input, который отображает текстовое поле ввода. Однако экранная клавиатура по сравнению со стандартным средством обладает некоторыми особенностями. Во-первых, используя рассматриваемый элемент управления, мы можем ограничить длину вводимой последовательности и задать диапазон разрешённых символов (например, только цифры или буквы русского алфавита). Во-вторых, экранная клавиатура может содержать нестандартные символы (любые символы Юникода). Разумеется, при должном усердии те же символы мы можем ввести и в стандартное текстовое поле. Но нажать символ на экране гораздо проще. Наконец, в некоторых случаях экранная клавиатура позволяет создать необходимый эффект, сочетающийся со стилем истории. К примеру, давайте попробуем организовать имитацию кодового замка: А вот и полный код тестовой истории:
:: StoryTitle
Элементы интерфейса. Экранная клавиатура
:: Start
<<set $result = "">>
<<set $maxLength = 8>>
<<random $code = 999999>>
<<set $code = $code + "">>
<<set $len = 6 - $code.length>>
<<loop $len>>
<<set $code = "0" + $code>>
<<endloop>>
[[Тест]]
:: Тест
<<set $passage = "Тест">>
<<set $okPassage = "Результат">>
===''Экранная клавиатура''===
----
===Введите код доступа.===
<<display "ЭкраннаяКлавиатура">>
//Сердце вам подсказывает, что нужно ввести «<<print $code>>»...//
:: ЭкраннаяКлавиатура
<<if $result.length gt $maxLength>>
<<set $result = $result.substr(0, $maxLength)>>
<<endif>>
<<set $len = $maxLength - $result.length>>
<<set $screen = "">>
<<loop $len>>
<<set $screen = $screen + " ">>
<<endloop>>
==={{{''|__<<print $screen + $result>>__|''}}}===
===[[{{{1}}}|Обновить {$result = $result + "1"}]]{{{ | }}}[[{{{2}}}|Обновить {$result = $result + "2"}]]{{{ | }}}[[{{{3}}}|Обновить {$result = $result + "3"}]]<<br>>[[{{{4}}}|Обновить {$result = $result + "4"}]]{{{ | }}}[[{{{5}}}|Обновить {$result = $result + "5"}]]{{{ | }}}[[{{{6}}}|Обновить {$result = $result + "6"}]]<<br>>[[{{{7}}}|Обновить {$result = $result + "7"}]]{{{ | }}}[[{{{8}}}|Обновить {$result = $result + "8"}]]{{{ | }}}[[{{{9}}}|Обновить {$result = $result + "9"}]]<<br>>[[{{{C}}}|Обновить {$result = $result.substr(0, $result.length - 1)}]]{{{ | }}}[[{{{0}}}|Обновить {$result = $result + "0"}]]{{{ | }}}[[{{{→}}}|Обновить {$passage = $okPassage}]]===
:: Обновить
<<clrscr>>
<<display $passage>>
:: Результат
===''Экранная клавиатура''===
----
<<if $result eq $code>>
<<style 'sepia'>>
===Доступ разрешён!===
<<else>>
<<style 'dark'>>
===Доступ запрещён!===
<<endif>>
Вводимый текст хранится в объекте $result. Нажимая кнопку экранной клавиатуры, мы прибавляем к объекту $result соответствующий символ. Кнопка «С» удаляет последний символ вводимой строки. Физически мы заносим в строку $result её же подстроку начиная с первого символа и длиной на единицу меньше длины самой строки. При нажатии кнопки со стрелкой читатель окажется на параграфе, название которого содержится в объекте $okPassage.
До вызова параграфа ЭкраннаяКлавиатура нужно задать максимальную длину вводимой строки в объекте $maxLength и название параграфа, на котором отображается клавиатура, в объекте $passage. В начале параграфа ЭкраннаяКлавиатура мы сравниваем длину строки $result с максимальной длиной вводимой строки и, в случае превышения максимума, оставляем только заданное количество символов. Затем в объект $screen заносим количество неразрывных пробелов равное разности максимально-допустимой длины и текущей длины строки $result. Если мы теперь выведем строку $screen перед строкой $result, вводимые пользователем символы будут выровнены по правому краю относительно дисплея нашего кодового замка.
Правильный код доступа генерируется случайно и содержится в объекте $code. При этом, если код выпадет меньше 100000, мы дополняем его нулями слева до шести знаков. Обратите внимание, что макрос random возвращает целое число. Чтобы обратиться к свойству length, которое вернёт количество символов, нужно предварительно преобразовать значение объекта $code в строку. Делается это просто добавлением к объекту пустой строки.
Итак, до вызова параграфа ЭкраннаяКлавиатура устанавливаем значения объектов:• $result = "" (вводимая строка);
• $maxLength = 8 (максимальное число символов вводимой строки);
• $passage = "Тест" (имя параграфа, на котором показываем клавиатуру);
• $okPassage = "Результат" (имя параграфа, отображаемого по завершении ввода). Чтобы организовать любую другую клавиатуру, просто добавьте необходимое количество ссылок-кнопок, заменив «X» на требуемый символ:
[[{{{X}}}|Обновить {$result = $result + "X"}]]
Комментарии: 4.
Профиль
Закрыть
Показать все комментарии
09.06.13 06:13
Полезная штука, Борис! Главное, универсальная! Спасибо!
09.06.13 17:17
Всегда пожалуйста! :)
09.06.13 19:36
Так же можно ввести код неразрывного пробела Alt+0160. Правда, только в Windows.
Для того, чтобы оставлять комментарии, необходимо зарегистрироваться и подтвердить в профиле указанный
При использовании любых материалов блога обязательно указание ссылки на источник
Чтобы получить неразрывный пробел в ASM, в редакторе параграфа выделите обычный пробел и нажмите кнопку «Текст в символы HTML».