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

Объявление

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

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

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



Содержимое словаря

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

1

Я так понимаю, словарь в ТОМ2 может содержать любые слова, даже те которые не будут использоваться в каком-то конкретном квесте? Тогда в идеале для удобного написания квестов надо что-бы словарь содержал все слова. Как тогда быть с омонимами (полными и не полными)? Они не помешают ТОМу? Как ТОМ поймёт, к какому слову квестописатель хочет отнести объект КОШКА, если в словаре будет два слова: кошка (животное) и кошка (насадка на ногу)? И если в словаре будут какие-нибудь отличительные флаги типа "кошка:1" и "кошка:2", то как квестописатель узнает, какую цифру надо подставить, чтобы ТОМ его понял?

Или всё-же словарь надо составлять индивидуально для каждого квеста свой?

В общем, можно узнать поподробнее о концепции словаря в ТОМ2 ?

2

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

В примере с кошкой будет одно слово - "кошка", т.к.  и для животного, и для устройства для лазанья по столбам, словоформы, ударения и грамматические признаки не отличаются. (за исключением одушевленности и винительного падежа множественного числа, про это см. ниже).
А вот объектов должно быть два:

Код:
слово кошка
{
   ...
}
объект кошка:мурка
объект кошка:для_лазанья_по_столбам

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

Другая ситуация когда слова отличаются: например замо`к и за`мок. Здесь должно быть 2 слова с различными ударениями:

Код:
слово замок:строение
{
   ...
}
слово замок:устройство
{
   ...
}
объект замок:строение:черного_рыцаря
объект замок:строение:белого_рыцаря
объект замок:устройство:на_воротах_черного_рыцаря
объект замок:устройство:на_воротах_белого_рыцаря

И если в словаре будут какие-нибудь отличительные флаги типа "кошка:1" и "кошка:2", то как квестописатель узнает, какую цифру надо подставить, чтобы ТОМ его понял?
Или всё-же словарь надо составлять индивидуально для каждого квеста свой?

Формат словаря не предусматривает просмотр его содержания, но в отладчике виден код каждого употребленного слова.
Чтобы узнать имена слов и понять чем они друг от друга отличаются квестописатель должен будет использовать отладчик.
Словарь будет единым для платформы. Для каждой конкретной игры словарь будет оперативно пополняться или, недостающие слова, если они редкие или специфичные, будут набиваться в самой игре по старинке.

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

доктор пришла и сказала - я опытный доктор

надо что-бы словарь содержал все слова.

Ни один словарь в мире не содержит ВСЕ слова.
Сейчас в словаре несколько тысяч слов и он пополняется по мере возможности и необходимости.

3

http://s1.uploads.ru/i/xnZog.png

4

Отлично. Значит словарь может и должен содержать как можно больше слов.
В приведённом примере со словом "замок", что должен возвращать словарь? Слова с пометками через двоеточие или можно прямо в названии слова указать ударение?

Код:
слово за`мок
{
   ...
}
слово замо`к
{
   ...
}
ASBer написал(а):

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

доктор пришла и сказала - я опытный доктор

Такие ситуации обрабатываются движком? Или это ложится на плечи стандартной библиотеки?

ASBer написал(а):

Ни один словарь в мире не содержит ВСЕ слова.

Ну конечно не содержит. Я специально сделал пометку "в идеале".

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

5

Alexandr написал(а):

В приведённом примере со словом "замок", что должен возвращать словарь? Слова с пометками через двоеточие или можно прямо в названии слова указать ударение?

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

Alexandr написал(а):

Такие ситуации обрабатываются движком? Или это ложится на плечи стандартной библиотеки?

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

Alexandr написал(а):

Сейчас к сути. Предположим, что у некоторого плагина-словаря есть большая база слов, но среди них встречаются такие, как приведённые в примерах. Что делать этому плагину при запросе таких слов?

Если речь об альтернативном словаре, то плагин должен вернуть то описание слова, которое в него "зашито".
Понятно, что игра написанная под конкретный словарь не будет работать с другим словарём, но зато у автора будет выбор.

6

Охренеть!