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

Логин (e-mail)

Пароль

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

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

Пишем интерактивную историю вместе. Часть 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»). А вот описания предметов трогать не будем, пусть пока выводится описание по умолчанию.

Продолжение следует...

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

Профиль


Закрыть

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

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