Предлагаю обсудить здесь направления по усовершенствованию парсера относительно классической его реализации.
Классическая реализация предполагает
Конструкции:
глагол
глагол + (объект)
глагол + (прямой объект) + (косвенный объект)
глагол + "строка"
глагол + число + (объект)
персонаж, (команда)
междометие
объекты описываются:
прилагательным или существительным отдельно, прил. + сущ., сущ. + связка + прил
перед существительным или прилагательным может стоять предлог, изменяющий действие или переназначающий прямой-косвенный объект . Ту же роль может иметь окончание (склонение) прилагательного или существительного.
В русском языке прилагательное, связанное с существительным, может идти за ним без связки предлогом (клок шерсти)
Не классическая:
-Наречия
-Вопросы (кто, что, зачем, как, почему, зачем) + конструкция следом (огр, зачем мне ключ?)
-предложение, начинающееся с объекта или из него состоящее (рычаг!) (не в уточнении)
-Три объекта в команде (прибить кошелек к полу молотком)
-Констатация факта (видимо, обращение к персонажу)
Нестандарт усложняет жизнь автору, но дружелюбен к новичкам. Правильно оформленный, он будет сводить все к стандартным действиям, которые мог предусмотреть автор, либо дать адекватный ответ.
Какие ещё нестандартные вещи любят пробовать игроки и оказываются обделенными? Как можно это реализовать?
Отредактировано GrAndrey (02.12.2010 15:18)
Неактивен
GrAndrey написал:
Предлагаю обсудить здесь направления по усовершенствованию парсера...
... Как можно это реализовать?
Реализовать средствами TADS-2?
Или средствами других существиющих платформ?
Или попытаться представить в идеале, без привязки к имеющимся на текущий момент платформам?
Прошу определиться с рамками дискуссии
Неактивен
Тогда вот примеры "простых" действий:
>выйди
Парсер требует уточнения, куда выйти, хотя для человека понятно, что находясь в комнате, выходим в единственную дверь, находясь в прихожей, выходим на улицу (если в комнату, то это будет "войди"). Находясь во дворе выходим на улицу и т.д.
>вернись
если зашли не туда, логично вернуться в предыдущую локацию, в не высчитывать с - ю - з - в.
>положи назад
>отдай назад
Взял не нужное - верни где взял. Парсер "не помнит" где мы это взяли всего лишь ход назад.
Если начали диалог (не менюшный), неестественно каждую фразу начинать с имени собеседника. Всё что вводим до выхода из диалога должно адресоваться персонажу с которым говорим.
Это для разминки...
Отредактировано ASBer (02.12.2010 17:25)
Неактивен
GrAndrey написал:
Чтобы игрок что-то вернул или положил обратно? Да ни в жизнь, эти клептоманы только карманы набивают
На этом можно делать загадки-ловушки - пока колечко на место не положишь, дверь не откроется ^_^ а вода всё прибывает....
Неактивен
Еще хотелось бы более точных глаголов в описаний действий:
Комната. На полу лежит монета, на стене висит пальто.
>возьми монету
Ты поднял монету
>возьми пальто
Ты снял пальто
Неактивен
Может. Платформа мечты фсё может...
Неактивен
Еще новички часто вводят
>иди дальше
>иди вперёд
ну или просто
>дальше
>вперёд
Неактивен
uux написал:
можно ввести специальные свойства-направления для локации.
Да это понятно что очень многое можно сделать прописав специальнае свойства и запрограммировав их обработку, только вся эта рутина опять навалится на автора, а ему и так не сладко.
Хотелось бы чтобы такие действия обрабатывались на уровне платформы/ст.библиотеки.
Неактивен
uux написал:
Как только игра начнет понимать "вперед", игрок начнет вводить "назад", "вправо" и "влево"
Ну да, про "вправо" "влево" много уже копий сломано, хотя я не понимаю почему.
Если игра будет помнить направление движения ГГ, вперед/назад/вправо/влево элементарно вычисляется из ю-в-с-з
Неактивен
uux написал:
В том-то и проблема.
Проблема в ТОМ, что естественный язык содержит в себе массу понятий (можно сказать переменных), значение которых меняется в зависимости от ситуации. Причём каждое по своим правилам...
"Парсер мечты" должен знать все эти понятия и постоянно отслеживать их значения.
Вот например команда:
>осмотри собеседника
Неактивен
uux написал:
"осм собеседника собеседника" вместо "осм себя".
Если уж говорить про действительно усложненный парсер, то возможен вариант, когда ваш собеседник в процессе диалога отвлёкся на другого собеседника, не прервав текущий диалог с вами.
Тогда "осм собеседника собеседника" вполне осмысленное действие.
Неактивен