Интерактивные истории, текстовые игры и квесты
Регистрация / Вход
Посетите наш новый сайт AXMAJS.RU
Пишем интерактивную историю вместе. Часть 8-я
Борис Семёнов (Morych), 30.03.13 | Практика ASM
Генератор случайных чисел
Переходим к самой непредсказуемой части — будем использовать генератор случайных чисел. Зачем вообще нам могут понадобиться случайные числа? Ну, хотя бы для того, чтобы сыграть с второстепенным персонажем в кости или проверить удачу главного героя каким-нибудь другим способом. Благодаря случайным числам, наши второстепенные персонажи смогут, например, при каждой встрече говорить новые фразы. Мы сможем добавить в описания сцен, да и в сюжет, какие-то неожиданные события. Всё это побуждает читателя перечитывать историю снова, ведь каждый раз может случиться что-то, чего не было раньше. Однако стоит всегда придерживаться следующего правила: продвижение по сюжету или достижение любой концовки не должны зависеть от генератора случайных чисел. В противном случае это будет несправедливо по отношению к читателю. Случайные события могут лишь облегчить или усложнить продвижение, которое всегда должно зависеть только от читательских действий. Прежде чем начать знакомиться с генератором случайных чисел на практике, не мешало бы выпустить нашего героя из старого селения. В соответствующем параграфе добавляем ещё одну ссылку.Старое селение
...
[[Идти к дому старейшины|Дом старейшины]]
[[Вернуться на пепелище|Сгоревший дом]]
<<if $диалог_дед gt 12>>
[[Выйти за околицу|Лес]]
<<endif>>
Ссылка станет видна, когда значение объекта «$диалог_дед» будет больше 12. То есть когда герой услышит от деда Закрома совет покинуть село. Вот так постепенно мы перешли к следующему блоку нашей схемы, который называется «дремучий лес» (см. рисунок 5). И первая сцена этого блока представляет собой путь от старого селения к поляне в центре леса.
Лес
<<set $сцена = 'Тёмный лес'>>
<<display 'Заголовок'>>
<<if $лес eq 1>>
Выйдя за околицу, я направился по утоптанной тропе прямиком к дремучему лесу. Постепенно вековые сосны окружили меня, заслонив солнце густыми колючими кронами. То и дело разбегались в разные стороны от дороги узкие, едва различимые стежки. Первый раз я был в лесу и, по правде сказать, чувствовал себя весьма неуютно. Уж очень много здесь было новых звуков и запахов, да к тому же постоянно казалось, что за мной наблюдает кто-то незримый. Что и говорить, тёмный лес -- это тебе не дома под лавкой!
<<set $лес = 2>>
<<else>>
Тёмный лес полнился странными шорохами, и всё таращились на меня из чащи чьи-то недобрые глаза. На всякий случай я даже решил ускорить шаг. Но только не подумайте, что я испугался!
<<endif>>
<<if $ягоды eq 0>>
Топая по тропинке да поглядывая по сторонам, я лишь сокрушённо качал головой. Грибов разных и ягод кругом было видимо-невидимо, и ведь всё это добро пропадало.
[[Собирать грибы-ягоды|Сбор]]
<<else>>
Помнится, было здесь немало грибов и ягод. Да только я их все обобрал. Ну а что? Не пропадать же добру!
<<endif>>
<<display 'Лесные тропы'>>
Нам понадобится три новых объекта. Первый объект «$лес» будет отвечать за номер описания сцены. Два других: «$грибы» и «$ягоды» — за количество соответствующих предметов. Если главный герой грибы-ягоды ещё не собирал, показываем ссылку на параграф «Сбор».
Сбор
<<display 'Заголовок'>>
<<random $грибы = 12>>
<<random $ягоды = 10>>
<<set $ягоды = $ягоды + 5>>
Немного побродив близ тропы, я насобирал себе <<if $грибы gt 3>>грибов и ягод<<else>>ягод. Грибы же по большей части оказались червивыми<<endif>>. Надёжно припрятав дары леса за пазуху, я отправился дальше.
<<display 'Лесные тропы'>>
Как вы уже догадались, генерация случайных чисел происходит во второй и третьей строках, где использованы макросы «random» (от англ. «случайный»). Во второй строке объекту «$грибы» будет присвоено произвольное значение от 0 до 12. Если выпадет 0, считаем, что нашему герою не удалось найти хороших грибов. А вот ягод ему удастся насобирать в любом случае. Макрос «random» в третьей строке установит значение объекта «$ягоды» в диапазоне от 0 до 10. В следующей строке это значение, какое бы оно ни было, сразу же увеличится на 5. Таким образом герой может насобирать от 5 до 15 горстей ягод.
Ссылки-переходы на другие сцены мы выделим в дополнительный служебный параграф «Лесные тропы», который при помощи макроса «display» показывается в двух предыдущих параграфах.
Лесные тропы
[[Идти дальше по тропе|Поляна]]
[[Свернуть на стежку|Стежка]]
[[Вернуться в старое село|Старое селение]]
Мы добавили два новых предмета, но в инвентаре их пока не видать. Сразу же это поправим.
Инвентарь
***
<<set $всего_предметов = 0>>
У меня с собой<<if $нож gt 0>><<display 'зпт'>>[[*нож|Описания предметов {$предмет = 'нож'}]]<<endif>><<if $клубок gt 0>><<display 'зпт'>>[[*клубок|Описания предметов {$предмет = 'клубок'}]]<<endif>><<if $грибы gt 0>><<display 'зпт'>>[[*гриб|Описания предметов {$предмет = 'гриб'}]] (<<print $грибы>> шт.)<<endif>><<if $ягоды gt 0>><<display 'зпт'>>[[*ягоды|Описания предметов {$предмет = 'ягоды'}]] (<<print $ягоды>> горстей)<<endif>><<if $всего_предметов eq 0>> ничего не было<<endif>>.
В отличие от предыдущих уникальных предметов, грибы и ягоды — предметы множественные. После названия каждого такого предмета мы будем показывать в скобочках и количество (при помощи макроса «print»). А вот описания предметов трогать не будем, пусть пока выводится описание по умолчанию.
Продолжение следует...Комментариев нет.
Профиль
Закрыть
Для того, чтобы оставлять комментарии, необходимо зарегистрироваться и подтвердить в профиле указанный
При использовании любых материалов блога обязательно указание ссылки на источник