Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
12.02.2009 12:55

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

3 плоскости парсерной игры

Это просто размышления о внутренней природе парсерных игр, их метафизике.
У меня постепенно проявилось четкое разделение всего что есть в коде игры на 3 плоскости:

1. Объектная плоскость
Здесь существуют объекты и пространства. Открываются и закрываются двери. Горят лампы и освещают темные подземелья. Здесь живут своей собственной жизнью NPS. Здесь прописаны все законы мира. Все отношения между объектами. Здесь даже может быть некоторая динамика и развитие событий, но только в той степени, в которой это определено все теми же общими механизмами мироустройства.

2. Языковая плоскость
Это царство слов. Здесь описывается все что происходит в объектной плоскости. Здесь каждому объекту дается его имя и именно под этим именем игрок узнает этот объект и так будет называть его. Здесь автоматически описываются происходящие события. Здесь есть Рассказчик и есть Слушатель. Здесь царствуют законы языка, которые практически не зависят от объектных законов (плоскость 1).

3. Сюжетная плоскость
Это вотчина автора. Именно здесь он строит свою уникальную для этого мира историю. Здесь он вправе вносить авторские отклонения в поведение объектов, навязывать NPS диалоги, не существующие в их мире (1 плоскость) и описывать происходящее собственными словами, а не так как это определено (2 плоскость).

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

Вобщем, если у кого есть что сказать по теме - Велком.

Отредактировано ASBer (12.02.2009 13:06)

Неактивен

0    0    #2
12.02.2009 16:43

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: 3 плоскости парсерной игры

Не понимаю этого разделения.

1 и 2:
Как это возможно, чтобы "автоматически описывающиеся происходящие события" "практически не зависели от объектных законов"? И какой смысл отсекать "названия" объектов от них самих? ООП для того и ввели в ИЛ, чтобы было к чему привязывать лексемы. Во всех ИЛ с ООП каждое известное системе слово либо приписано объекту, либо представлено абстрактной переменной. Предложенный языковый срез подразумевает свести всё ко второму варианту.

3:
сюжетный срез по данному определению - все правки и дополнения к стандартным шаблонам. Легко вычленяется с помощью программ типа diff.

Неактивен

0    0    #3
11.08.2009 14:17

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: 3 плоскости парсерной игры

GrAndrey написал:

какой смысл отсекать "названия" объектов от них самих? ООП для того и ввели в ИЛ, чтобы было к чему привязывать лексемы. Во всех ИЛ с ООП каждое известное системе слово либо приписано объекту, либо представлено абстрактной переменной. Предложенный языковый срез подразумевает свести всё ко второму варианту.

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

Отредактировано ASBer (11.08.2009 14:40)

Неактивен

0    0    #4
11.08.2009 14:38

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: 3 плоскости парсерной игры

ASBer написал:

Здесь царствуют законы языка, которые практически не зависят от объектных законов

GrAndrey написал:

Как это возможно, чтобы "автоматически описывающиеся происходящие события" "практически не зависели от объектных законов"?

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

Отредактировано ASBer (11.08.2009 14:39)

Неактивен

0    0    #5
13.08.2009 12:22

Eten
Участник (+9, -307)
Откуда: Балаково, Санкт-Петербург.
Зарегистрирован: 21.05.2007
Сообщений: 1416
Вебсайт

---

Re: 3 плоскости парсерной игры

есть ли смысл как-то разделять эти плоскости на уровне платформы?

Поддерживаю данную идею, но внесу некоторые поправки. Эта идея хороша, но реализация всегда внесет свои коррективы. Т.е., в момент реализации может возникнуть необходимость смешивать некоторые участки этих систем (плоскостей) для их же связи или по причине не возможности иначе связать разделенные системы. Иначе говоря, полного разделения не достичь.

В плане различия плоскостей, полагаю стоит разделять объекты от их имен. К тому же это не так сложно сделать на уровне платформы. Достаточно прописать в объектах ID (числовой идентификатор), обычно для удобства пользуются шестнадцатеричным числом, но можно и простым, типа длинной целой. С помощью этого ID можно будет привязываться к словам и прочее к языковой системе.

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

Естественно в плане языка менять ничего не надо, все это проделывается только на уровне платформы. По отношению к сюжету (или 3 плоскости) можно поступить по той же аналогии. Полагаю, что этим я ответил на твой вопрос ичерпывающе, хоть и не прямо. roll

возможно для описания 3х различных сущностей лучше подошли бы 3 различных языка в рамках одной системы?

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

Главное, чтобы языковые средства не были мудренными и у авторов может возникнуть некоторая дизориентация, т.к. в основном у нас привыкли пользоваться одной языковой системой, а не комбинированным вариантом. Но это все мелочи.

есть ли системы, где эти плоскости реально разделены?

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

К тому же, при более глубоком анализе, можно заметить, что разделение нескольких частей механизма ПО на отдельные системы приносит свои плоды и используются в многих программах в том числе и в современных игрушках (в тех же самых навороченных движках даже).

Как видишь, это идея уже давно применяется даже по аналогии. Использовать или нет, это уже на твое усмотрения. Я лично за, обеими руками. roll

Неактивен

0    0    #6
13.08.2009 22:46

noname
Участник (+36, -9)
Зарегистрирован: 04.04.2008
Сообщений: 729

noname

Re: 3 плоскости парсерной игры

идею топикстартера я понял так:

1-я плоскость- игра с т з сухого программинга. работа с объектами и переменными

2-я плоскость- языковое/описательное сопровождение/надстройка структур данных

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

и хотя хорошим тоном было бы стремиться к тому, что бы такое соответствие имело место быть ( я так понимаю- это мнение GrAndrey), но нутром чую, что если у квестописцев не будет возможности здорово себе упростить жизнь за счёт использования 'картонных подделок' объектов, то популяция этих и без того редких особей будет прирастать с большим трудом

3-я плоскость- это смысл, придаваемый всем этим словесным манипуляциям, за счёт введения некоторой истории. т е игрок не просто 'убил бородатого дядьку', а спас любимую, вселенную и т д и т п. игрок не просто 'вошёл в пещеру', а отправился туда, откуда никто ещё не возвращался, или туда, где скрывается безумный Доктор Зло, и т д и т п

---

думаю, создателям платформ стоит приложить все усилия, чтобы создание 1-й плоскости (кодинг) было максимально простым делом

ради этого можно допустить и отсутствие формального соответствия структур данных и происходящего в игровом мире

впрочем, это- вопрос спорный и может быть решён только приведением убедительных примеров случаев, где это можно и нужно допускать

либо- убедительной демонстрацией того, что проще(а не только возможно) всё же соблюдать строгое соответствие

Неактивен

0    0    #7
23.10.2009 10:33

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: 3 плоскости парсерной игры

noname, ты прав, по сути ты пересказал мою мысль своими словами.
Касаемо связи между слоями могу предложить такую аналогию:

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

Отредактировано ASBer (23.10.2009 10:38)

Неактивен

0    0    #8
23.10.2009 13:49

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: 3 плоскости парсерной игры

...А теперь представьте гигантского человекоподобного боевого робота, который создан на основе тех же трех слоев. wink

А серьезно: словесный слой - это отражение той же объектной модели, существующей в воображении автора и игрока. Задача не отделить компьютерную объектную модель от человеческой, а наоборот, привести их к одной. Одно из решений - программа на естественном языке.
При этом, словесное описание не самое практичное. Поэтому существует огромное количество "технических языков", форм записи и условных обозначений. Например, таблицы и схемы воспринимаются в разы проще сплошного текста данных того же содержания.  Можно привести ещё много примеров. Развитие этой мысли приводит к "визуальной среде разработки для чайников", о которой давно все мечтают, но отчаялись увидеть в толковом исполнении.
Видимо, идеал - визуальная система со скриптами на естественном языке.

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

П.С. перечитал более ранние сообщения, и вспомнил, что "словесный слой" ещё и включает парсер. А парсер вообще страшный зверь, это аналог нашей внутренней программы(обычно мы воспринимаем речь на автомате, без осмысливания процесса). Это вообще очень интересная тема для изучения.

Отредактировано GrAndrey (23.10.2009 14:06)

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru