Авторизация
×

Логин (e-mail)

Пароль

Интерактивные истории, текстовые игры, квесты и визуальные новеллы
Гиперкнига

Библиотека    Блог

Элементы интерфейса. Индикатор процесса

Борис Семёнов (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.

Профиль


Закрыть

Показать все комментарии

Евгений Туголуков (Korwin)
19.05.13 01:39

Прекрасная статья и прекрасная возможность! Можно писать игры типа "Звездное наследие"! Или текстовые симуляторы автогонок! И даже что-то вроде "Elite". Спасибо!
Flash
19.05.13 22:20

>Не думаю, что использование картинок в данном случае уместнее и удобнее.

Но это не значит, что картинки не нужны, особенно в РПГ, о чем как раз статья.
Morych
20.05.13 00:53

По большому счету статья про использование циклов и жаваскрипт :-)

Для того, чтобы оставлять комментарии, необходимо зарегистрироваться и подтвердить в профиле указанный e-mail адрес.

При использовании любых материалов блога обязательно указание ссылки на источник