Здравствуйте, иферы, или как там правильно!
Собрался написать игру и наиболее сложным для себя считаю написание анализатора команд. Не подскажите ли, где можно найти литературу по теории написания таких анализаторов; что в данной области существует на русском языке и вообще с чего начинать? Или русских анализаторов нету и все первооткрыватели?
Как создать словарь и как его связать с анализатором? Ну это сразу такой конкретный вопрос...
Спасибо!filden@hot.ee
Неактивен
Структуру словаря сделать просто, но вот объясни, пожалуйста, что ты конкретно имеешь ввиду под анализатором?
Неактивен
Если это вызывает такой интерес, то могу попробовать подготовить материал о том, как я у себя его реализовал.
Что касается тем, где это затрагивалось, то это:
http://www.taplap.ru/cgi-bin/yabb/yabb. … =995175153
и
http://www.taplap.ru/cgi-bin/yabb/yabb. … =993509091
Неактивен
2Chipollino: Под анализатором имею ввиду такой мотор, который бы распознавал предложения и согласно им принимал какие-то действия. Чтобы анализировал согласно словарю глаголы, согласно им и предлогу требуемые падежи существительных. Короче, нормальный лингвистический анализатор.
2Olegus: Если можешь - подготовь какой-нибудь материал по своим разработкам. Интересно.
За ссылки спасибо, ещё не смотрел.
Неактивен
Предложение поделить на глагол, предлог, существительные и даже прилагательные вроде просто... если нет, то скажи в чём проблема.
После этого, у тебя есть уже распознанное предложение и вот тут вся сложность и кроется: обработка действий. Я пляшу в данном случае от глагола, т.е. для каждого из них пишется своя программа обработки, в которую как параметры передаются существительное и прилагательное.
Платформа на русском, думаю, и должна иметь такой формат построения, при этом подпрограммы глаголов должны быть написаны самим автором платформы... Муторно, но ничего не поделаешь.
Неактивен
По-моему, основная сложность кроется в приведении предложения в порядок с точки зрения компьютера, т.е. чтобы ему было понятно, где глагол (это самое легкое), а где основные и вспомогательные объекты.
У меня после подобного разбора определяется, основное предназначение глагола (манипуляции с предметами, передвижение и т.п.) и передается в зависимости от этого в следующую процедуру, где происходят уже сами действия, и где текст выглядит уже примерно следующим образом:
if N1='лопата' then
if verb='ударить' then
if N2='кролик' then RabbitMustDie();
elseif N2='лошадь' then HorseMustDie()
else if verb='копать' then print('Зачем? Лучше убьем ею кролика или лошадь!')
endif;
Фразы типа: "ударить лопатой кролика", "ударить кролика лопатой", "побить лопатой кролика", будут приводить к этому блоку.
Вот...
Неактивен
Не забывай ещё
if KrolikRoom==CurrentRoom
if not KrolikDead
if LopataRoom==InHand
if HvataetSil
if HorosheeNastroenieNePokinetBolsheVas
А это очень и очень муторно... ужасъ...
Неактивен
Само собой...
Неактивен
Хорошо, тогда такие вопросы. Как лучше всего реализовывать?
К объекту "предмет" привязывать все глаголы/действия, которые с ним можно сделать;
Или к глаголу/действию привязывать все объекты, с которыми этот глагол работает.
?
Неактивен
Нужно учитывать оба варианта. В некоторых ситуациях игрок может опускать название объекта. В этом случае необходимо, отталкиваясь от глагола, смотреть в какой ситуации этот глагол был произнесен.
P.S. Но все это реализуемо только тогда, когда анализатор выдал правильно разобранную на составляющие команду. То есть приходим к тому, с чего начали. К анализатору.
Неактивен
Анализатор - это, конечно, здорово, но я пишу не совсем игру, а платформу для написания игр. Поэтому меня и интересует, как в этом самом эдиторе связывать глаголы с объектами/субъектами. Список объектов, понятно, надо связывать с конкретными локациями. А глаголы? Расписать для каждой локации активные глаголы? Или просто список предметов, а уж у каждого предмета есть свой список активных глаголов? Мда... Это я пока всё в теории рассуждаю, так как до этого момента ещё не добрался. Пока я перед вопросом, какую динамическую структуру организации памяти выбрать. Достаточно ли построить всё на вложенных динамических массивах, или нужно использовать технологию ADO... Мда...
Неактивен
Что ж все так помешались на написании платформ? Начните с написания игры - и поймете, что и как нужно будет реализовывать в платформе. В противном случае - куда большие затраты времени на разработку, отладку и т.п.
Я вот, например, пишу игру на Паскале. Данные же для игры (локации, предметы, текстовые данные) подготавливаю в некой визуальной среде. Однако, чтобы избежать рутины, постепенно переношу некоторые куски кода в сами данные. Например, у меня описание локации может меняться в зависимости от значения переменной. Можно это, конечно, прописать и в Паскале, но это громоздко и пришлось бы делать это для каждой локации. Поэтому эти условия у меня вынесены в блок данных. То есть, паскалевская программа когда нужно вывести описание локации смотрит, а нет ли условий. Если есть, то в зависимости от того, какое из них выполняется, выводится то или иное описание.
Таким образом можно постепенно перетащить много чего, и получится платформа. Но к этому времени я уже точно буду знать, что и как нужно реализовывать, чтобы эта самая платформа отвечала моим желаниям.
Неактивен
А я в общем-то тем же самым занимаюсь. Типа пакета для создания, в котором есть редактор для создания локаций, редактор объектов, субъектов, редактор словаря и редактор реакций объектов на словарные записи. То есть в общем-то рождаются одновременно и платформа и игра, а точнее платформа, заточенная под одну конкретную игру. И всё это на ВБ.
Неактивен
В игре у тебя будет 3 объекта: предмет, действие и комната. У каждого из них свойства... Свойства предмета - действия, т.к. они являются их следствием. Прописываешь каждое действие, каждый предмет и свойства комнат, т.к. локации - немного другой объект, чем предмет. Вроде так:)
Неактивен
В общем нужно на паскале составить игру кроссворд, которая будет работать из заданных слов пользователя. Долго не тините я могу умереть от ожидания. Да еще чем меньше неиспользованного пространства тем лучше