Интерактивные истории, текстовые игры и квесты
Регистрация / Вход
Посетите наш новый сайт 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 $формаСлова>>
Комментариев нет.
Профиль
Закрыть
Для того, чтобы оставлять комментарии, необходимо зарегистрироваться и подтвердить в профиле указанный
При использовании любых материалов блога обязательно указание ссылки на источник