Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

8    0    #1
03.05.2018 09:37

johnbrown
Участник (+221, -9)
Откуда: Москва
Зарегистрирован: 01.12.2013
Сообщений: 241

protoparser.js – простой веб-движок для парсерных игр

Protoparser.js – легковесный веб-движок (библиотека) для интерактивных текстовых игр с вводом команд («парсеров»).

Приставка «прото» в названии движка, в переводе с древнегреческого, означает «первый». Интерфейс командной строки протопарсера оперирует всего двумя понятиями: ГЛАГОЛ и СУЩЕСТВИТЕЛЬНОЕ. В этом он похож на первые текстовые игры-приключения. Вот основные особенности и возможности протопарсера:

  • Protoparser.js платформонезависимый. Вы можете запускать и писать игры на любом устройстве, в котором есть браузер с поддержкой JavaScript. Не нужно компилировать исходники, устанавливать интерпретаторы, библиотеки, и пр. Все, что нужно, чтобы начать писать игру – любая программа в которой можно набрать и сохранить текст. Протопарсер работает даже на старых устройствах.


  • При желании, вы можете писать игру прямо в браузере, переключившись в «режим разработчика», если ваш браузер поддерживает такой режим.


  • Законченную игру можно выложить на сайт, где она будет доступна онлайн. Вы также можете запускать ее локально.


  • В протопарсере есть система автотестирования, которая избавит вас от необходимости после каждой правки вручную вбивать команды и проверять как все работает. Кроме того, благодаря наличию во многих современных браузерах «режима разработчика» вы можете в реальном времени проверять и изменять состояние игровых объектов.


  • Если вы даже не собираетесь писать игры на протопарсере, вы, тем не менее, можете использовать его как инструмент для быстрого прототипирования.


  • Protoparser.js написан на чистом JavaScript'е и не использует иных библиотек или зависимостей. Protoparser.js является одним из самых легковесных парсерных движков на сегодняшний день. Его размер составляет всего несколько десятков килобайт.


  • В протопарсере доступны различные системы управления игрой помимо традиционного ввода команд: «горячие клавиши», делающие управление похожим на то, какое используется в традиционных компьютерных играх; история команд, дающая быстрый доступ к раннее введенным командам; а также сокращенный ввод, позволяющий использовать команды, состоящие всего из нескольких символов.


  • Поскольку protoparser.js является веб-приложением вы можете использовать все возможности HTML, CSS и JS в своих играх: вставлять картинки, музыку, звуки, видео; устанавливать стили оформления; подключать дополнительные js-библиотеки, и многое другое.


  • Protoparser.js выполняется полностью на стороне клиента, и там же хранит все данные.


  • Protoparser.js поддерживает мульти-сохранение и загрузку игр.


  • Игры для протопарсера пишутся на языке JavaScript. В настоящее время, это один из самых распространенных языков программирования. Даже если вы напишите всего одну игру, опыт приобретенный при ее написании, может помочь вам, если вы в дальнейшем захотите заняться программированием на этом языке.


  • Protoparser.js позволяет автору менять поведение стандартных команд и создавать новые.


  • Protoparser.js распространяется на условиях лицензии MIT. Вы можете изменять и использовать его в своих проектах.


🎮 Демо-игра «Фантазия» (онлайн)

📖 Руководство автора

📜 Список игр, написанных на protoparser.js

🗃️ protoparser.js в ifarchive (версия 8)

В архиве для скачивания есть руководство с примером создания игры, а также демо-игра.

Отредактировано johnbrown (03.09.2022 13:01)


Прикрепленные файлы:
protoparser.js_v8.zip, Размер: 197,428 байт, Скачано: 105

Неактивен

5    0    #2
20.12.2018 18:42

Nikita
Модератор (+404, -135)
Зарегистрирован: 29.10.2016
Сообщений: 139

Re: protoparser.js – простой веб-движок для парсерных игр

Двухочковый "Плащ тьмы" на protoparser.js 6(145):

Есть два нетривиальных момента, обусловленных ограничениями платформы: реализация суррогатной тёмной комнаты (см. events.beforeAll и foyer.walk) и реализация суррогатной поверхности в пазле для получения первого очка (см. events.beforeAll и cloak.hang).

Неактивен

2    0    #3
21.12.2018 15:40

Nikita
Модератор (+404, -135)
Зарегистрирован: 29.10.2016
Сообщений: 139

Re: protoparser.js – простой веб-движок для парсерных игр

johnbrown написал:

Никита, можно включить ваш скрипт в дистрибутив протопарсера?

Если считаете нужным, то да, конечно можно. Единственно там с крючком и тёмной комнатой скорей хаки, чем штатные возможности платформы, так что лучше "Плащ тьмы" приводить уже после пошагового объяснения "Фантазии" и с пометкой типа "Кстати, многое в ваших руках, если чего-то не хватает".

ASBer написал:

Вот еще бы хоть немного синонимов к глаголам; "вешать плащ" - это разве по-русски? smile)

Вешать это всего лишь дублирующий синоним. Основным и наиболее естественным вариантом команды я считаю "повесить".

Код:

        gameCommands.hang = ['hang', ['повесить', 'вешать'], 1]

Вообще обычно в реализациях "Плаща тьмы" на различных платформах крючок является поверхностью, а "повесить" добавляется просто синонимом к команде "положить", но поскольку protoparser.js не имеет встроенной функциональности поверхностей и контейнеров, то здесь мы пишем всё с нуля, бросая плащ в локации, но посредством дополнительной обработки флага прямой видимости делаем вид, что он на крючке. В "Фантазии" такой же условный контейнер - это доспехи, из которых выпадает ключ, только там это разовая реакция, поэтому реализовать чуть проще, а с плащом пришлось сделать имитацию для многоразового использования.

Неактивен

0    1    #4
07.01.2019 19:06

Nikita
Модератор (+404, -135)
Зарегистрирован: 29.10.2016
Сообщений: 139

Re: protoparser.js – простой веб-движок для парсерных игр

Madzi написал:

@johnbrown, посмотри пожалуйста что получилось после того, как я убрал библиотеку

Код:

terminal.js

Не сочтите за злонамеренную девальвацию ценности вашего вклада, но может быть использовать менее хипстерский JS, а то поддержка старых браузеров отваливается, например, Internet Explorer 11, который не может отрисовать такую страницу? С terminal.js всё работало даже в IE. Всё-таки это олдскульная текстовая игра, а не продвинутый браузерный 3D shooter, чтобы отцеплять старые браузеры, особенно если их поддержка дорого не обходится. Даже поисковый робот Google до сих пор ходит с движком Chrome 41 внутри и как сможет увидеть под ним, так и сохраняет в индекс, так что не все уж такие прогрессивные в реальном мире. Кому, как не авторам текстовых игр, заботиться о ретроградах?

johnbrown написал:

Кстати, если terminal.js больше не планируется использовать, нужно добавить в движок обработчик  хоткеев.

Кстати, по поводу горячих клавиш... Решение по перехвату многих из них игрой представляется не самым удачным. Например, в Windows F6 - это перемещение по панелям интерфейса, образующим отдельные кластеры клавиатурной навигации, в том числе во всех основных браузерах, и с многими другими командами также. То есть ряд стандартных горячих клавиш protoparser.js сейчас блокирует целый блок нативных команд, являющихся конвенцией на уровне операционной системы. Например, можно было бы по умолчанию добавить ко всем командам модификатор Alt, чтобы избежать этих неприятных коллизий.

Отредактировано Nikita (07.01.2019 19:07)

Неактивен

0    0    #5
07.01.2019 22:16

Nikita
Модератор (+404, -135)
Зарегистрирован: 29.10.2016
Сообщений: 139

Re: protoparser.js – простой веб-движок для парсерных игр

johnbrown написал:

Пп - такое же приложение, как Word или Excel, только ОС для него браузер. Ворд и Эксель не волнует, что там думает Windows или Mac по поводу F1. Почему с пп должно быть по-другому? Никто не запрещает пользователю переключиться в другую вкладку и сделать свои дела.

F1 в Windows - это резервированная команда для вызова справки именно приложения, так что с этим проблем особых как раз нет, если трактовать protoparser.js как приложение, но какой-нибудь F6 - это более тяжёлый случай. F6 - это один из нескольких распространённых способов попасть в адресную строку с клавиатуры во всех основных браузерах, а также перейти к избранному, закладкам и прочим общим элементам управления, важным на каждой вкладке. То есть клавиатурное управление protoparser.js блокирует ряд базовых пользовательских сценариев в браузере, например, когда я поиграл и теперь хочу пойти на ifiction.ru и написать комментарий, нажав F6 и введя адрес. По-моему это всё-таки слишком резко для web-приложения. Я понимаю позицию "лично я никогда этим не пользовался, но она не самая правильная в продуктовой разработке, там всё-таки надо соблюдать конвенции операционной системы, потому что кто-нибудь обязательно этим пользуется, если это стандартный способ управления. К тому же горячими клавишами в игре, в первую очередь, будут пользоваться как раз те, кто вообще по жизни привык с ними работать, так что этим пользователям с большой долей вероятности будут нужны и F6, и многое другое.

F3 занята функцией "Искать далее", F4 в ряде браузеров открывает адресную строку, F5 везде обновляет страницу, F6 в Windows переходит по панелям приложения, F7 в ряде браузеров отвечает за дополнительную клавиатурную навигацию, F8 в ряде браузеров управляет выделением, F10 в Windows является одним из способов для входа в строку меню приложения, F11 в ряде браузеров отвечает за включение и выключение полноэкранного режима, F12 в ряде браузеров открывает панель разработчика. Я бы не советовал ломать ничего из этого. Фактически безболезненно доступны только F2 и F9, ну и в какой-то мере F1, по крайней мере, я ничего такого там для браузеров не помню, так что в крайнем случае можно перейти на них, например, выбросив непомещающуюся команду "версия" с F2, для которой горячая клавиша всё равно не очень нужна.

Неактивен

1    0    #6
08.01.2019 18:07

Nikita
Модератор (+404, -135)
Зарегистрирован: 29.10.2016
Сообщений: 139

Re: protoparser.js – простой веб-движок для парсерных игр

Oreolek написал:

Есть 3 стандарта клавиатурных сокращений для веба (для ссылок, но здесь не важно), выбирайте по вкусу: http://htmlbook.ru/html/a/accesskey

Нет, в данном случае это не подходит. Атрибут accesskey должен быть привязан к какому-то существующему в DOM элементу страницы, так что для реализации горячей клавиши для вывода истории команд по простому нажатию использован быть не может. Для этого нужно где-то на странице делать ссылку или кнопку для целевого действия, которой и назначать accesskey. Кроме того, реализация горячих клавиш через accesskey имеет дополнительные недостатки: во-первых, в разных браузерах такие команды обрабатываются по-разному (где-то элемент сразу активируется, а где-то только фокусируется, так что активировать его надо будет дополнительным нажатием Enter или Space), а во-вторых, срабатывание accesskey зависит от раскладки, то есть accesskey="x" не сработает при активной русской раскладке, так что относительно удобно и предсказуемо для пользователя можно использовать только 10 цифр.

Хотя если вы имеете ввиду просто взять за ориентир набор модификаторов, то да. Но лично я бы предпочёл самый простой - только Alt, как уже здесь предлагалось.

Кстати, с F8 я вчера погорячился - в браузерах она также свободна, так что её в принципе можно занимать. Выделение с её помощью - это локальная история из области Microsoft Office и браузеры не затрагивает.

Отредактировано Nikita (08.01.2019 18:20)

Неактивен

3    0    #7
09.02.2019 20:33

Nikita
Модератор (+404, -135)
Зарегистрирован: 29.10.2016
Сообщений: 139

Re: protoparser.js – простой веб-движок для парсерных игр

Вообще повелительное наклонение имеет смысл, если платформа поддерживает функциональность управления персонажами, то есть для грамотного написания команд "трактирщик, дай водки". В ситуации базового управления и типового повествования от второго лица мы командами в инфинитиве отвечаем на вопрос "что делать?", а не отдаём приказ персонажу, так как персонаж - это мы сами.

В любом случае, стоит учитывать, что добавление повелительного наклонения предполагает утроение, а не удвоение глагольных словоформ, потому что необходимо добавлять форму единственного и множественного числа: "трактирщик, дай водки", "господа, дайте вина". Контекст может побуждать игрока обращаться во множественном числе даже к единичному персонажу: "сударь, откройте дверь". Если сильно придираться, то можно ставить вопрос и об упятерении глагольных словоформ за счёт частицы "ка": "трактирщик, дай-ка водки", "господа, дайте-ка вина".

Однако вместо добавления конкретных словоформ можно выполнять неточное распознавание с проверкой схождения только начала строки или внедрить процедуру препарсера, которая будет отбрасывать у названия действия на концах символы "те", "-ка" и "те-ка", превращая множественное число в единственное и вычищая "-ка", тогда можно обойтись указанием только словоформ единственного числа.

Отредактировано Nikita (09.02.2019 20:37)

Неактивен

1    1    #8
09.02.2019 22:15

Nikita
Модератор (+404, -135)
Зарегистрирован: 29.10.2016
Сообщений: 139

Re: protoparser.js – простой веб-движок для парсерных игр

johnbrown написал:

В тадсе 2 это работает и для управления протагонистом, на других платформах не проверял.

Да, в TADS и Inform просто нет разницы, потому что у действия общий список синонимов в разных формах, но причина появления повелительного наклонения именно в наличии функции управления персонажем. У Владимира просто специфический взгляд на этот вопрос сквозь призму натянутых холеварных сравнений с его собственными разработками, так что следующим баг репортом от него будет что-то вроде ошибки на команде "начну, пожалуй, с того, что осмотрю плащ, который на мне".

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru