ТОМ2 - платформа для парсерных игр

Объявление

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

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ТОМ2 - платформа для парсерных игр » Дневник разработчика » Текущее состояние дел


Текущее состояние дел

Сообщений 1 страница 18 из 18

1

Всем приветы!

Наверное нужно описать текущее положение платформы ТОМ2.
Я действительно долго отсутствовал, и даже почту часто не читал.
Последние полгода никаких существенных работ не велось, можно сказать что проект заброшен. Но не факт что навсегда, для меня такие паузы в порядке вещей, а в разработку вложено слишком много, что бы её просто так взять и похоронить.

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

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

В 1м ТОМе было 2 парсера: первый занимался разбором кода, второй анализировал пользовательские команды в процессе игры.
Во 2м ТОМе была объявлена возможность писать код на языке близком к естественному, поэтому я посчитал что и с командами на ЕЯ и с кодом может справиться один универсальный парсер. Это было ошибкой:

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

- Для игры важна адаптивность парсера к игровой ситуации и его вариантность. Если парсер выполнит команду совсем не так как ожидал игрок, это в плюс для игры. Но для выполнения кода это огромный минус! Код всегда должен выполняться однозначно, иначе его работа становится непредсказуемой, а отладка невозможной.

Напрашивается очередной глобальный рефакторинг.
Из парсера нужно выкинуть всё, что связано с обработкой кода, а интерпретатор кода взять из 1го ТОМа.
Задача весьма глобальная, но необходимая.
Развивать дальше ошибочную концепцию смысла не вижу...

2

ура, подул ветер надежды...

3

дать Маше мяч если у неё его нет

Значит Маше всё-таки не удастся дать мяч?
Не думаю, что программирование на ЕЯ невозможно. Да, надо хорошо проработать взаимодействие программиста с интерпретатором, хорошо объяснить правила и систему уточнений в случае неоднозначностей, но мне кажется это вполне реально. В ТОМ2 я видел значительный уход от программирования на ЕЯ (например, "лестница:каменная", а не просто "каменная лестница"; "снаружи ты" вместо "снаружи тебя" или даже "на тебе"). Чувствовалось, что оперируешь не словами, а объектами, прям как в обычном программировании. Не знаю, на каких проблемах застрял ТОМ2, но я не исключаю что возможно создать интерпретатор, который бы понимал язык близкий к естественному.
Ну да ладно, тебе виднее, ASBer. Что же касается именно ТОМ2, то я не против разделения парсера на два: для кода и для разбора команд. Более того, мне так будет даже удобнее писать на этом языке и понять его структуру (я ведь программист). Что до остальных, не могу говорить точно, но думаю что научить кого-либо правильно использовать интерпретатор на ЕЯ сложнее, чем на языке со строгим синтаксисом. Единственное за что я боюсь, это чтобы парсер команд не потерял в качестве и остался бы таким же "понимающим". ;)
Успехов в рефакторинге! :flag:

4

В настоящий момент переписываю ст.библиотеку с учетом использования новых возможностей act и synonym.
Новых действий пока не добавляю, но у старых действий появляется много альтернативных имён и форматов вызова.
Как только закончу с библиотекой, выложу релиз 2.a.4.1.

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

5

Как обычно бывает, после рефакторинга возникло несколько дыр в функциональности и несколько мелких багов, незамеченных сразу.
Одна дыра ликвидирована, получилось даже лучше чем было. Остальные дыры пока не критичны, борюсь с багами.
Параллельно развивается инструментарий для словаря, потихоньку переписываются и расширяются действия.
http://sa.uploads.ru/t/cwEaN.png

6

Разработка платформы в очередной раз ушла в подполье.
Новых версий в ближайшем будущем не предвидится, но это не значит что работа остановилась.

7

Осваиваю встраиваемый редактор кода ACE, пока всё нравится =)
С возможностями редактора можно ознакомиться тут: https://ace.c9.io/build/kitchen-sink.html

8

Черновой (чёрный-причёрный) вариант web IDE TOM2.
http://s7.uploads.ru/t/zjEYx.png

9

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

10

Отчет за прошедший месяц:
Получилось довольно сильно переделать работу со словарём. Перенос функций чтения словаря внутрь движка дал много возможностей для оптимизации и дальнейшего расширения функционала.
Оптимизация была направлена в основном на то, чтобы не грузить лишних словарных статей, не пропуская при этом нужного. Переделана упаковка синонимов, и самое главное, сделана поддержка кросс-статей, что планировалось очень давно.
Кросс-статьи, в отличии от обычных словарных статей, привязаны к 2-м словам и грузятся только при упоминании обоих.
В словаре осталось переделать поиск словоформ на хеш-таблицу, и со словарём на этом пока всё. Получилось найти довольно эффективный метод отсечения окончаний и генерации хеша по слову, осталось только внедрить это в словарь.

Улучшена генерация словоформ при согласовании объекта с ключом. Теперь в этом процессе задействованы и синонимы. Т.е. если у основного слова требуемая форма отсутствует, она может быть взята от синонима.
Также ко всем словам добавлен метод _get_form, в котором требуемую форму можно сформировать программно.

Также доработаны альтернативные вычисления, для которых теперь действует двойной синтаксис:
<выражение 1>|<выражение 2>|...|<выражение N> //альтернатива
<выражение 1>&<выражение 2>&...&<выражение N> //рандом
Альтернатива начинает вычисления всегда с первого выражения, если оно неудачно - переходит к следующему  и т.д.
Рандом начинает вычисления со случайного выражения, если оно неудачно - перебирает оставшиеся, начиная с первого точно также как и альтернатива.

Также было сделано множество мелких доработок и исправлений.
Дело движется к очередному релизу.

11

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

12

Вот примерно так будет выглядеть анализ синтаксиса:
http://sf.uploads.ru/VW3d6.png
Здесь видно, что для разбора команды были последовательно применены 2 функции. Также видны аргументы и результаты функций, их веса, типы и ключи.

Этот инструмент поможет увидеть как именно была разобрана введенная команда.
Но, к сожалению, он совершенно бесполезен для не разобранных команд.

13

Запустил онлайн-версию платформы. Пока в тестовом режиме, посмотрим что получится.

14

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

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

Вторая доработка - адаптация парсера под команды NPC. Там всё несколько сложнее, но интереснее и вполне реализуемо.
После этих двух доработок планирую релиз. Версия поменяется на 2.a.5.0, т.к. изменения довольно основательные.

15

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

16

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

17

Методом проб и ошибок нашел приемлемую форму отображения стандартной библиотеки:
http://s6.uploads.ru/t/I8cTP.png

Не знаю как других, а меня визуальное представление очень мощно стимулирует наполнять, исправлять и добавлять))
(на картинке хорошо видно, что ничерта еще не готово  :tomato: )

18

В следующей версии в стандартную библиотеку добавится простенькая боевая система, так что с гоблином можно будет не только говорит, но и побить его (или он вас :hobo:).


Вы здесь » ТОМ2 - платформа для парсерных игр » Дневник разработчика » Текущее состояние дел