Предлагаю обсудить здесь направления по усовершенствованию парсера относительно классической его реализации.
Классическая реализация предполагает
Конструкции:
глагол
глагол + (объект)
глагол + (прямой объект) + (косвенный объект)
глагол + "строка"
глагол + число + (объект)
персонаж, (команда)
междометие
объекты описываются:
прилагательным или существительным отдельно, прил. + сущ., сущ. + связка + прил
перед существительным или прилагательным может стоять предлог, изменяющий действие или переназначающий прямой-косвенный объект . Ту же роль может иметь окончание (склонение) прилагательного или существительного.
В русском языке прилагательное, связанное с существительным, может идти за ним без связки предлогом (клок шерсти)
Не классическая:
-Наречия
-Вопросы (кто, что, зачем, как, почему, зачем) + конструкция следом (огр, зачем мне ключ?)
-предложение, начинающееся с объекта или из него состоящее (рычаг!) (не в уточнении)
-Три объекта в команде (прибить кошелек к полу молотком)
-Констатация факта (видимо, обращение к персонажу)
Нестандарт усложняет жизнь автору, но дружелюбен к новичкам. Правильно оформленный, он будет сводить все к стандартным действиям, которые мог предусмотреть автор, либо дать адекватный ответ.
Какие ещё нестандартные вещи любят пробовать игроки и оказываются обделенными? Как можно это реализовать?
Отредактировано GrAndrey (02.12.2010 15:18)
Неактивен
ASBer написал:
Тогда вот примеры "простых" действий:
>выйди
ГрАнд прав, тут никаких проблем. Просто специальное свойство комнаты.
>вернись
Можно определить в классе, соответствующем комнатам, два свойства. Одно будет определять предыдущую локацию, а другое - возможность возвращения туда. Затем для глагола прописать реакции на сочетания значений этих свойств.
>положи назад
>отдай назад
Это действительно сложнее. Но в принципе можно прописать свойство с последней локацией и для класса предметов. Правда, здесь есть много сложностей - например, если мы взяли из шкафа зонтик, раскрыли его и пытаемся положить обратно в шкаф, а он не лезет;).
Мои предложения рассчитаны, конечно, не только на ТАДС, но платформа должна быть объектно-ориентированной.
Отредактировано uux (03.12.2010 06:28)
Неактивен
ASBer написал:
Еще хотелось бы более точных глаголов в описаний действий:
Комната. На полу лежит монета, на стене висит пальто.
>возьми монету
Ты поднял монету
>возьми пальто
Ты снял пальто
Ну, опять-таки можно ввести для объектов свойство, отмечающее, висит ли объект, лежит ли на полу, вставлен ли куда и т. п., и анализировать это свойство при взятии объекта.
Неактивен
noname написал:
и я не понимаю, с чего вообще можно было подумать, что новичок станет вводить что-то типа "рычаг!",
"давай-ка", и другой подобный нестандарт.
Это офф-топ, конечно;) - пытливому новичку может прийти в голову не только это, а вообще такие вещи, что и представить себе трудно.
Отредактировано uux (04.12.2010 07:05)
Неактивен
Для "дальше" и "вперед" можно ввести специальные свойства-направления для локации.
Либо, как вариант, продолжать двигаться по этим командам в том направлении, в котором до этого шел игрок.
Впрочем, в данном случае ИМХО нет однозначно правильного решения, все будет зависеть от конкретной игры.
Неактивен
ASBer написал:
Да это понятно что очень многое можно сделать прописав специальнае свойства и запрограммировав их обработку, только вся эта рутина опять навалится на автора, а ему и так не сладко.
Хотелось бы чтобы такие действия обрабатывались на уровне платформы/ст.библиотеки.
Это работа, которую по идее достаточно сделать один раз, а потом использовать везде.
Кстати, пришла свежая мысль про "вперед": тут не все так гладко. Как только игра начнет понимать "вперед", игрок начнет вводить "назад", "вправо" и "влево". Правда, на этот случай можно ввести такой ответ:
> вправо
Шаг вправо-влево считается побегом.
Отредактировано uux (07.12.2010 20:54)
Неактивен
ASBer написал:
Если игра будет помнить направление движения ГГ, вперед/назад/вправо/влево элементарно вычисляется из ю-в-с-з
В том-то и проблема. Представляешь, какой это гемор для автора 9игры или платформы - неважно)? Хорошо, если игрок просто перемещается, а если он еще и поворачивается, стоя в локации?
Отредактировано uux (09.12.2010 00:11)
Неактивен
ASBer написал:
>осмотри собеседника
Надо просто давать всем персонажам в игре, с кем можно поговорить, очень короткие имена, чтобы игроку не взбрело в голову такое набирать;).
И еще одна мысль: самые отпетые извращенцы могут додуматься в момент диалога с кем-нибудь набрать "осм собеседника собеседника" вместо "осм себя".
Отредактировано uux (10.12.2010 00:44)
Неактивен
Dark[Ol(U23)leneri] написал:
А как в парсерах герой реагирует на команду
> сделай уже сам что-нибудь
?)
Сделать реакцию адекватнее, чем она может быть в реальной жизни, все равно не получится.
Неактивен