Forum.iFiction.Ru

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

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

Вы не зашли.

Объявление

Перечень игр КРИЛ 2018 открыт! Можно играть, оставлять комментарии и ставить оценки!

   #1
21.11.2017 23:44

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

Конкурсант на КРИЛ-2017

Станислав Соловьев написал:

...я даже увлекся идеей попробовать свои силы в создании парсерной игры. В чем особенности этой идеи:
-- Я никогда не играл в такие игры.
-- Попробовал около трех штук, понял принцип и сделал для себя кое-какие выводы.
-- Мне это действительно интересно, а учитывая, что я больше рассказчик, чем игродел, то это еще и сложно.
-- Куча идей, которые я не смогу реализовать, но буду пытаться и скорее всего получится какой-то уродливый гибрид. Но ведь есть те, кого увлекает цирк уродов (щюточка)?

Вы в праве делать всё, что вам угодно, но поскольку вы явно спросили, то я вам отвечу (под спойлером советы, а не мат):

 спойлер…

В любом случае, с хобби всегда лучше делать то, что нравится и хочется, а не прогибаться. Для прогибания придумана работа. Так что если даже хочется писать нетрадиционный парсер на неспециализированной платформе, то пишите, кто вам может запретить? Просто другим никто не сможет запретить это оценивать и эмоционально комментировать, так что к этому лучше сразу подготовиться.
Ну и как учит история, классической механики INSTEAD в РИЛ когда-то тоже никто не знал, пока одному человеку не захотелось сделать по-своему. Вот бы он тогда посоветовался с кем-нибудь с URQ или RTADS, где бы теперь было всё это? Мы же не знаем, вдруг вы тоже способны на что-то такое в ИЛ.
Вместе с этим, если вам интересны меню, то плюньте на всех фанатов парсера, которые здесь ошиваются. Кто они такие, в конце концов, чтобы заставлять вас писать по-другому?

Отредактировано Nikita (21.11.2017 23:48)

Неактивен

   #2
22.11.2017 16:17

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

Re: Конкурсант на КРИЛ-2017

Станислав Соловьев написал:

Видимо, по не знанию вопроса я не слишком согласен с воздвижением парсеров в некий "сорокалетний монумент". Фактически, это менюшная игра, в которой варианты игроку нужно вводить самостоятельно, надеясь, что автор их предусмотрел.

Формально можно и так сказать, но в локации с тремя-пятью объектами число поддерживающихся команд на специализированной парсерной платформе из коробки уже будет больше 1000, так что это очень большое меню. К тому же существуют команды с аргументами, например, "спросить полицейского о чём-то" или "набрать на телефоне 1234567", варианты которых вообще не ограничены. Игроки ожидают, что в каждой игре, которую они запускают, будет тот самый стандартный набор вариантов взаимодействия, плюс дополнительные, вытекающие из логики происходящего.
В специализированных платформах число поддерживаемых действий может выходить за 100, часть из этих действий может применяться ко всем объектам игрового мира, а часть к комбинации из двух объектов игрового мира. Так и получается экспоненциальный рост возможных вариантов взаимодействия, приводящий к комбинаторному взрыву.

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

 спойлер…

В итоге:
Если у вас что-то очень высоко вариативное, то это надо делать текстовым вводом, но втискивать в традиционный протокол общения с парсерными играми. Качественно имплементировать этот протокол с нуля очень сложно, поэтому существуют специализированные платформы.
Если что-то на базе только 7-10 глаголов, применяемых к объектам игрового мира, то лучше делать глагольное меню.
Если поиск и комбинирование предметов с поиском правильного сочетания, но без выявления конкретного действия одного объекта на другой, то имеет смысл делать point-and-click или воспроизводить классический стиль INSTEAD.
Ну а если что-то с ситуативными хитрыми ходами, типа "повертеть пальцем у веска", то надо делать CYOA.

Неактивен

   #3
23.11.2017 00:01

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

Re: Конкурсант на КРИЛ-2017

Станислав Соловьев написал:

Почему-то очень хочется примеров. Примеров, где пять объектов создают сотню вариаций. Чем дальше я читаю достаточно увлекательные тексты касательно парсеров, тем сильнее во мне растет дух противоречия и отнюдь не потому, что я являюсь лютым приверженцем менюшных игр (я этот термин вообще только на КРИЛ-2017 услышал).

Хорошо, но давайте договоримся, что я это объясню один раз. Да, подробно и с примерами, но один раз, без последующих глупых холеваров. Это, в принципе, ко всем относится.

Например, в платформе RTADS 107 базовых действий. В строгом смысле их там больше из-за некоторых внутренних технических процедур, ну на пользовательском уровне будем считать что 107. Теперь берите калькулятор:

 спойлер…

Главное, что надо понимать, так это природу этой самой проблемы комбинаторного взрыва. Ну а к чему это всё приведёт, я вам только что показал.
Игроки от вашего парсера будут ожидать поддержку минимум нескольких десятков традиционных команд, причём, в разных синонимичных формулировках, а также корректную обработку их комбинаций.
Наскоком решить эту задачу на неспециализированной платформе пробовали многие, но на моей памяти ни один из них не вошёл в историю как успешный автор. Да и успешное решение будет выглядеть фактически как разработка новой платформы, что, разумеется, заслуживающий уважения путь, но вряд ли вы готовы подписаться именно на это.

Неактивен

   #4
23.11.2017 17:42

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

Re: Конкурсант на КРИЛ-2017

Станислав Соловьев написал:

Поэтому-то я и не могу понять, что же такого невероятного в парсере, кроме некоторых устоявшихся практик их написания и прохождения. Если в комнате есть шкаф, стол и комод, то очевидно, что ключ находится в одном из этих объектов. Вероятно ключей несколько и их нужно скомбинировать. В обоих случаях задача легко реализуема на разных платформах и как мне кажется(!), дело тут не в прохождении именно парсеров, а культуры ИЛ в целом.

Дело в том, что у вас явно очень серьёзный теоретический провал, поэтому мы уже дошли до того момента, когда вам трудно просто так что-то объяснить. Вам надо больше почитать по теме и вернуться к этому разговору уже после этого.
Парсеры пишутся вообще не как наборы реакций на конкретные строки текста. Вернее, есть попытки писать так, но это как раз путь вне куда.
Парсерная игра представляет собой моделирование мира в рамках объектно-ориентированного подхода. Самое простое объяснение этих принципов на русском языке есть в документации RTADS. Прочитайте там первые три главы, они небольшие. Ну и дальше можно главы 6 и 7 с более сложными примерами. Если абстрагироваться от конкретного синтаксиса и обращать внимание на принципы, то это даст более-менее универсальное понимание вопроса для всех основных парсерных платформ.
Парсерная игра выполняет синтаксический разбор введённой команды, выделяя там название действия, а также по ряду свойств тот или те объекты, к которым это действие надо применить. Дальше у этих объектов вызываются методы, соответствующие определённому действию с передачей им нужных параметров. Это совсем в общих чертах. В действительности каждый из этапов декомпозируется на более мелкие задачи, про каждую из которых можно написать целую статью.
В зависимости от реализации конкретной платформы есть также специфические задачи, типа наполнения словаря, генератора падежных форм слов и так далее.

Вот так будет выглядеть на RTADS игра с локацией, в которой есть шкаф, стол и комод, а также спрятанная в закрытом комоде книга:

 спойлер…

К этому сообщению я прикреплю архив с исходным кодом, а также с компилированной версией, которую можно запустить и попробовать.
Ну или вот on-line версия, чтобы попробовать в браузере.

Обратите внимание, никаких циклов с перебором образцов строк и прочего, потому что хорошие парсеры пишутся не так. Вместе с этим, здесь:

 спойлер…

Если вы по-прежнему считаете, что во всём этом нет ничего особенного и для парсеров не нужны специализированные платформы, а процесс их написания аналогичен процессу написания игры на большинстве менюшных платформ с процедурным ЯП, то давайте вы просто выложите сопоставимую по функциональности демку на AXMA, или на чём вы там хотели писать парсер. То есть теперь уже я предлагаю вам привести пример в подтверждение вашей точки зрения.
При этом, часть общих процедур (условный движок) может быть какой угодно, но вот именно код, моделирующий мир подобной комнаты, хотелось бы примерно аналогичного размера, а не десятки тысяч строк с циклами проверки по тысячам шаблонов. Плюс работать это всё должно достаточно быстро, что сомнительно, если делать плоские переборы шаблонов строк без каких-либо иерархий.
На мой взгляд, на этом обсуждение пока можно закончить до получения вашей демки, раз уж мы перешли в практическую плоскость вопроса.

Станислав Соловьев написал:

Думаю, мое желание пуститься в дискуссию возникло именно потому, что мне принялись доказывать исключительность парсера и его непод'емность. Скорее всего мне это только показалось.

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

Станислав Соловьев написал:

И по итогам возник такой вопрос: парсеры и меню делаются по одним и тем же принципам программирования или же это разные вещи? Я имею ввиду, зная все эти (не пренебрежение, а перечесление) массивы, об'екты, условия и основы разработки, можно одинаково успешно делать оба типа ИЛ или же нифига?

Есть такое понятие, как парадигма программирования. Парсеры, как правило, пишутся в чуть более сложной парадигме, чем большинство менюшных игр, которая, помимо перечисленных вами базовых процедур, подразумевает использование дополнительных концепций (классов и объектов, наследования и пр.). Конкретный пример кода я привёл выше.
Впрочем, есть и исключения, а именно менюшные платформы с ООП (INSTEAD, Salet) или парсерные вообще без прямого программирования (ЯРИЛ, ADRIFT).
Однако вы, насколько понимаю, пришли с AXMA. Знаний алгоритмов и понятий, которые используются там, для написания полноценного парсера будет недостаточно. Впрочем, как уже сказал, написание парсерных игр - это не бином Ньютона, так что никто не говорит, что научиться этому способны только избранные. Просто надо сразу брать правильный инструмент.

Сейчас более-менее актуальны 5 русскоязычных парсерных платформ:

 спойлер…

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

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


Прикрепленные файлы:
example.zip, Размер: 1,469,508 байт, Скачано: 47

Неактивен

   #5
24.11.2017 17:14

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

Re: Конкурсант на КРИЛ-2017

Станислав Соловьев написал:

Nikita, старался быть очень внимательным, но так и не нашел простых вещей: как установить русификатор на RTADS? Введение сразу начинается с создания игры, с первых строк кода, но хотелось бы еще более раннего вступления, для тех, кто вообще я.

Да, с RTADS в начале надо немного поприседать:
Локализованные библиотеки лежат на том же сайте rtads.org. Вот прямая ссылка на архив http://rtads.org/libr27.rar
Соответственно нужно распаковать и положить .t файлы куда надо. Стандартный вариант - это использование штатной среды разработки под Windows TADS Workbench, где .t файлы нужно класть по пути
C:\Program Files\TADS Tools
или
C:\Program Files (x86)\TADS Tools
для 64-разрядных систем.
Вы там увидите английские adv.t, std.t и т.д., вот к ним рядом и положить advr.t, stdr.t и т.д.
Среду разработки TADS Workbench лучше поставить вот этой версии http://sm-i-i.narod.ru/aksetup.zip
Тому, как работать со средой разработки, посвящено приложение E официальной документации.
Это основной вариант под Windows. Если нужны другие OS или хардкорные варианты с использованием plain text редактора и утилит командной строки, то пишите, будем разбираться.

Ну и для сохранения сбалансированности изложения:

Для разработки на RInform нужно скачать специальную сборку из документации, примеров и компилятора (вариант под Windows).
Для Метапарсера INSTEAD просто берётся интерпретатор и под запуск в нём пишется Lua-файл по документации. Дополнительных инструментов для компиляции или добавления ресурсов, как в RTADS и RInform, не нужно. Правда в своё время был какой-то специальный редактор для разработки под INSTEAD, но я не уверен, что он сохранил актуальность. Возможно кто-то другой прояснит ситуацию.
Для ЯРИЛ специальный редактор идёт вместе с плеером (для всего нужна Java).
У ТОМ2 все имеющиеся и открытые на сегодняшний день инструменты разработки также в общем комплекте поставки. Но там также язык интерпретируемый, а не компилируемый, так что просто пишем текстовый файл и запускаем в плеере.

Если хочется подсветки синтаксиса, то с этим проще всего у INSTEAD, так как там стандартный Lua, поэтому достаточно взять любой текстовый редактор с поддержкой раскраски этого языка. Для RTADS есть несколько вариантов схем подсветки для разных редакторов, лучшей из которых вроде считается вариант для UltraEdit, ну или можно раскрасить его по правилам C (будет что-то похожее на правду). По RInform либо ничего нет, либо я не знаю. У ЯРИЛа всё своё в специальном графическом интерфейсе, а у ТОМ2 вроде тоже ничего нет.

Ну и обсуждение конкретных технических вопросов по той или иной платформе лучше перенести в соответствующие разделы форума. Они тут есть почти для всех: RTADS, Метапарсер INSTEAD, ЯРИЛ и ТОМ2. По RInform "места силы" не знаю (можете сами создать ветку), ну и по Метапарсеру INSTEAD всё-таки лучше идти на форум самой платформы, где активность и концентрация знающих людей выше.

Неактивен

   #6
25.11.2017 23:26

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

Re: Конкурсант на КРИЛ-2017

uux написал:

Для "установки" русификатора достаточно скопировать файлы из архива rtads в каталог игры.

Да, но тогда подключать их надо не через угловые скобки, а через двойные кавычки:
#include <advr.t> // Подключает библиотеку advr.t из директории компилятора или из директории, заданной через параметр -i
#include "advr.t" // Подключает библиотеку advr.t из рабочей директории (как правило, директория игры, хотя могут быть нюансы)
Я бы всё-таки советовал положить .t файлы в системную директорию среды разработки, так будет универсально и не надо будет их носить из проекта в проект.
Ну а если надо будет что-то изменить в стандартной библиотеке, то лучше пользоваться директивами modify для модификации методов объекта и replace для замены функции, а основные файлы оставлять неизменными. И хотя новые релизы RTADS давно не выходили, но если выйдут, то за счёт этого пересборка с новой версией будет проще. В таких вещах всегда лучше сразу прививать высокую культуру разработки.

Неактивен

Powered by PunBB
© copyright 2001–2018 iFiction.Ru