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

Логин (e-mail)

Пароль

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

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

Посетите наш новый сайт AXMAJS.RU

Изменение формы слова при множественном числе

Борис Семёнов (Morych), 05.07.13 | Практика ASM

Предположим, мы хотим показать, сколько конфет лежит в кармане нашего героя. При этом количество конфет во время игры может меняться. Проще всего, конечно, использовать такое решение:

Конфет в кармане: <<print $конфеты>>

Но гораздо интереснее сделать более литературно, изменяя форму слова при разном количестве предметов, а именно:

У вас в кармане 1 конфета.
У вас в кармане 2 конфеты.
У вас в кармане 12 конфет.

Как раз для такого случая предлагаю вашему вниманию параграф «ФормаСлова», который выбирает одно из трёх заданных слов в зависимости от количества. Код тестовой истории будет выглядеть следующим образом:

:: StoryTitle
Форма слова при множественном числе

:: Start
<<set $конфеты = 1>>
[[Тест]]

:: Тест
<<set $формаСловаДанные = [$конфеты, "конфета", "конфеты", "конфет"]>>
<<display "ФормаСлова">>
У вас в кармане <<print $конфеты>> <<print $формаСлова>>.
[[Хочу ещё!|Тест {$конфеты = $конфеты + 1}]]

:: ФормаСлова
<<set $формаСловаДанные[0] = $формаСловаДанные[0] + "">><<set $m_temp = $формаСловаДанные[0].charAt($формаСловаДанные[0].length - 1) * 1>><<if $формаСловаДанные[0].length gt 1>><<if $формаСловаДанные[0].charAt($формаСловаДанные[0].length - 2) eq "1">><<set $m_temp = 0>><<endif>><<endif>><<if $m_temp eq 1>><<set $формаСлова = $формаСловаДанные[1]>><<elseif ($m_temp eq 0) or ($m_temp gt 4)>><<set $формаСлова = $формаСловаДанные[3]>><<else>><<set $формаСлова = $формаСловаДанные[2]>><<endif>>

Использовать параграф «ФормаСлова» очень просто. Во-первых, передаём параграфу аргументы в объекте-списке «$формаСловаДанные»:
1) количество чего-либо (например, предметов);
2) форма слова при количестве равном 1 (а также 21, 31 и т.д.);
3) форма слова для количества 2, 3, 4 (а также 22, 23, 24 и т.п.);
4) форма слова для всех остальных значений количества (0, 5 — 20 и т.п.).

Обратите внимание, что элементы списка «$формаСловаДанные» со второго по четвёртый нужно заключать в кавычки (поскольку мы задаём текстовые значения). Кстати, список здесь используется исключительно для сокращения кода и уменьшения количества используемых объектов.

После установки значений списка вызываем параграф «ФормаСлова» макросом «display», в результате чего получаем искомый вариант существительного, содержащийся в объекте «$формаСлова». Остаётся только вывести значение этого объекта макросом «print» в нужном месте предложения.

И ещё один пример использования, в котором при множественном числе меняется не только окончание слова:

<<random $возраст = 100>>
<<set $формаСловаДанные = [$возраст, "год", "года", "лет"]>>
<<display "ФормаСлова">>
Имя: Инви
Возраст: <<print $возраст>> <<print $формаСлова>>

Комментариев нет.

Профиль


Закрыть

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

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