Интерактивные истории, текстовые игры и квесты
Регистрация / Вход
Посетите наш новый сайт AXMAJS.RU
Пишем интерактивную историю вместе. Часть 7-я
Борис Семёнов (Morych), 26.03.13 | Практика ASM
Улучшенное оформление инвентаря
Сейчас у нашего списка предметов есть некоторые недостатки. Во-первых, если читатель нажмёт «инвентарь» до того, как герой заполучит первый предмет, на экран будут выведены только три звёздочки. Это может сбить с толку. Лучше было бы в этом случае выводить пояснение, что предметов пока нет. Другой недостаток состоит в том, что при большом количестве предметов, список займёт значительную часть экрана. Решим две эти проблемы, немного изменив оформление инвентаря. Теперь все предметы будут выводиться в одном предложении, через запятую. При отсутствии предметов предложение будет завершаться соответствующим образом.Инвентарь
***
<<set $всего_предметов = 0>>
У меня с собой<<if $нож gt 0>><<display 'зпт'>>[[*нож|Описания предметов {$предмет = 'нож'}]]<<endif>><<if $клубок gt 0>><<display 'зпт'>>[[*клубок|Описания предметов {$предмет = 'клубок'}]]<<endif>><<if $всего_предметов eq 0>> ничего не было<<endif>>.
Обратите внимание, что все макросы и ссылки после фразы «У меня с собой» следует писать в одну строку. Новый параграф «Инвентарь» ссылается в макросах «display» на служебный параграф «зпт», который выглядит следующим образом:
зпт
<<if $всего_предметов eq 0>>:<<else>>,<<endif>> <<set $всего_предметов++>>
Мы создали объект «$всего_предметов» для подсчёта количества предметов, которыми обладает герой. Перед выводом каждой ссылки увеличиваем значение этого объекта на 1. Кроме того, в параграфе «зпт» мы проверяем, сколько ссылок с предметами уже выведено. Если ни одной, выводим двоеточие. В противном случае выводим запятую. Не забываем и пробел после каждого знака препинания. Для наглядности я поставил его перед макросом «set».
Работая над историей, всегда лучше концентрироваться в первую очередь на основной сюжетной линии. А такие мелочи, как описания некоторых предметов, можно будет придумать и позже. Кроме того, добавив очередной предмет, можно просто забыть добавить соответствующее описание. Давайте немного подправим параграф «Описания предметов».
Описания предметов
***
<<if $предмет eq 'нож'>>
Нож этот нашёлся в золе. Рукоять была деревянная, и, конечно, сгорела, но главное, клинок уцелел.
<<elseif $предмет eq 'клубок'>>
Небольшим клубком тонких шерстяных ниток василькового цвета меня на прощанье одарил дед Закром.
<<else>>
Просто <<print $предмет>>. Чего ж тут непонятного?
<<endif>>
Мы добавили, так сказать, описание предмета «по умолчанию». Теперь можно не отвлекаться от нашей главной задачи.
Приведённые способы оформления инвентаря обладают следующей особенностью: предметы всегда выводятся в определённом порядке вне зависимости от очерёдности их получения. Эту особенность можно использовать, например, для сортировки предметов по алфавиту.
К предметам мы ещё вернёмся. В частности посмотрим, как сделать их перемещаемыми. Предоставим герою возможность поднимать предметы на одной сцене и оставлять их на любой другой. А ещё у нас будут предметы-контейнеры, содержащие в себе другие предметы.
Продолжение следует...Комментарии: 7.
Профиль
Закрыть
Показать все комментарии
29.12.16 22:33
С запятыми, классная идея! Только у меня почему-то предметы в игре не хотят в одну строку отображаться, хотя код пишу в одну строчку. А предметы и запятые выводятся каждый раз с новой строки :( Уже и в <<nop>> пробовал код загнать, тоже не помогает :(Повторяющийся фрагмент у меня такой: <<if $флешка eq "флешка">><<display 'зпт'>><<print $флешка>><<endif>><<if $фонарик eq "фонарик">><<display 'зпт'>><<print $фонарик>><<endif>> ...и т.д.Параграф "зпт" такой: <<if $штук eq 0>> <<else>>,<<endif>> <<set $штук++>>Не пойму где ошибка :(
29.12.16 22:34
Версия программы 5.0.2
01.01.17 20:34
Удалось решить проблему, если кому-то это интересно :)Попробовал вместо макроса <<display 'зпт'>> вставить напрямую содержимое самого параграфа 'зпт'. В итоге предметы в игре стали выводиться в одну строку, как и положено. Конструкция кода, правда, стала очень громоздкая, но зато работает :)Похоже, в версии программы 5.0.2 применение в такой конструкции макроса <<display >> разрывает строку, причём даже макрос <<nop>> не может её склеить.
Для того, чтобы оставлять комментарии, необходимо зарегистрироваться и подтвердить в профиле указанный
При использовании любых материалов блога обязательно указание ссылки на источник
Отлично! Борис, я твой должник за алгоритм!