Интерактивные истории, текстовые игры и квесты
Регистрация / Вход
Посетите наш новый сайт AXMAJS.RU
Элементы интерфейса. Индикатор процесса
Борис Семёнов (Morych), 18.05.13 | Практика ASM
Начинаем цикл статей, в которых мы рассмотрим, как на AXMA Story Maker можно организовать те или иные элементы пользовательского интерфейса. Примеры кода будут содержать сразу всю историю, поэтому можно будет скопировать весь код в редактор и запустить тестирование истории, чтобы посмотреть, как это всё работает.* * *
Иногда бывает необходимо наглядно представить текущее значение какого-то числового параметра. Причём представить относительно максимального значения этого параметра. Для этих целей удобно использовать так называемый индикатор процесса. Но поскольку игры у нас текстовые, то и индикатор наш тоже будет текстовый, а точнее псевдографический. Например, так могут выглядеть индикаторы, показывающие уровень здоровья и маны героя:
Для построения индикаторов мы используем символы Юникода. Сначала получаем отношение текущего значения параметра к максимальному, умножаем на размер индикатора (в символах) и в цикле выводим необходимое число символов. Затем в следующем цикле дорисовываем индикатор, используя уже другой символ Юникода. Итак, код тестовой истории:
:: StoryTitle
Элементы интерфейса. Индикатор процесса
:: Start
<<set $hp = 100>>
<<set $hpMax = 900>>
<<set $mp = 80>>
<<set $mpMax = 100>>
<<set $pr_size = 10>>
[[Тест]]
:: ИндикаторПроцесса
<<set $tmp = Math.min(Math.round($pr_value / $pr_valueMax * $pr_size), $pr_size)>>
<<loop $tmp>>{{{█}}}<<endloop>><<set $tmp = $pr_size - $tmp>><<loop $tmp>>{{{░}}}<<endloop>>
:: Тест
<<if $hp gt $hpmax>>
<<set $hp = $hpmax>>
<<endif>>
{{{Здоровье: }}}<<set $pr_value = $hp>><<set $pr_valueMax = $hpMax>><<display 'ИндикаторПроцесса'>>{{{ | Мана: }}}<<set $pr_value = $mp>><<set $pr_valueMax = $mpMax>><<display 'ИндикаторПроцесса'>>
----
Если у вас мало здоровья, используйте исцеляющую магию!
<<if $mp gte 10>>
[[Использовать исцеляющую магию|Тест {$mp = $mp - 10} {$hp = $hp + 100}]]
<<else>>
На заклинание не хватает маны.
<<endif>>
Чтобы отобразить индикатор, задаём текущее значение параметра объекту $pr_value, максимальное — объекту $pr_valueMax, и вызываем параграф ИндикаторПроцесса макросом display. Предварительно (например, в параграфе Start) нужно установить в объекте $pr_size размер индикатора в символах.
Кроме приведённых, можно использовать и такие символы: ■ □ — они тоже хорошо выглядят. А чтобы кроме индикатора показывать ещё и сами числовые параметры, делаем так:
:: ИндикаторПроцесса
<<set $tmp = Math.min(Math.round($pr_value / $pr_valueMax * $pr_size), $pr_size)>>
<<loop $tmp>>{{{■}}}<<endloop>><<set $tmp = $pr_size - $tmp>><<loop $tmp>>{{{□}}}<<endloop>>{{{ <<print $pr_value + '/' + $pr_valueMax>>}}}
Всё, теперь можно писать RPG. :)Комментарии: 5.
Профиль
Закрыть
Показать все комментарии
19.05.13 01:39
Прекрасная статья и прекрасная возможность! Можно писать игры типа "Звездное наследие"! Или текстовые симуляторы автогонок! И даже что-то вроде "Elite". Спасибо!
19.05.13 22:20
>Не думаю, что использование картинок в данном случае уместнее и удобнее.Но это не значит, что картинки не нужны, особенно в РПГ, о чем как раз статья.
20.05.13 00:53
По большому счету статья про использование циклов и жаваскрипт :-)
Для того, чтобы оставлять комментарии, необходимо зарегистрироваться и подтвердить в профиле указанный
При использовании любых материалов блога обязательно указание ссылки на источник
Если бы была введена поддержка картинок не только в качестве иллюстраций, то не пришлось бы изощряться со спецсимволами.