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

Объявление

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

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

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



Альфа

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

1

Перевел разработку на этап "Альфа".

Новое в этой версии:
- заменил знак '@' на ':'
- заменил обозначение секций с '#' на '=='
- добавил мини-секции, начинающиеся с '--' (о секциях см. здесь);
- в интерфейсе в тэг <body> ввел 4 новых параметра для градиентного подцвечивания фоновой картинки;
+много мелких исправлений.

2

Опубликовал версию 2.0.1.1.

Добавил поддержку NPC.
В архиве кроме рюмочной есть еще одна демка с 2-мя энписями.

3

Опубликовал версию 2.0.1.2.

Много мелких доработок и исправлений. Самая существенная в работе функций.

Добавлена еще одна демка, демонстрирующая работу с многозначными глаголами и их синонимами.

4

версия 2.0.1.3.
В основном добавились операции со списками.

Свободное время как-то вдруг закончилось, решил выложить в том состоянии, в котором всё остановилось.

5

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

Свободное время как-то вдруг закончилось

Не у тебя одного. Я тоже как приехал, так и не появлялось. :(

6

Мдя, в ближайшие 3 месяца просвета точно не предвидится, а дальше там посмотрим...

7

А дальше новый год :)
Alexandr, с возвращением.

8

Потихоньку вернулся к работе над движком. Перекраиваю и допиливаю.

9

Хорошо. Ждём продолжения :)

10

версия 2.0.2.0 альфа.

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

Во вторых: расширил типы объектов (если угодно, это можно называть категориями).
Полный список типов теперь выглядит так:
//простые типы
bool, булево
number, число
spcvalue, спецзначение
string, строка
//объектные типы
object, объект
property, свойство
class, класс
location, локация //пока не используется
word, слово
preposition, предлог
//списки
and-list, и-список
or-list, или-список

создать объект теперь можно так:

Код:
класс мальчик //создали класс для всех мальчиков
свойство возраст //создали новое свойство
мальчик Вася //создали объект Вася и включили его в класс мальчиков
возраст = 10 //указали возраст Васи

11

ASBer написал(а):
Код:
мальчик Вася //создали объект Вася и включили его в класс мальчиков
возраст = 10 //указали возраст Васи

То-есть последняя операция применяется к последнему созданному объекту? Свойство "возраст" теперь есть у каждого класса или только у "мальчик"?

12

Последний созданный объект становится объектом по умолчанию.
Свойство "возраст" в данном случае присваивается объекту "Вася".

Код:
свойство возраст

Создает объект типа "свойство" без привязки к какому-либо классу.
У свойств могут быть свои собственные свойства, регулирующие их работу.
Свойства также могут иметь собственные классы.
Единственное отличие свойств от объектов: в операции X.Y; Y обязано иметь тип "свойство".
Проверка допустимости свойства у объекта будет реализована на уровне событий более гибко.
По умолчанию любому объекту можно присвоить любое свойство.

13

версия 2.0.2.1 альфа.

1. автоматизировано заполнение системного свойства объектов "title/наименование".
При создании объекта, если имя объекта совпадает с именем некоторого слова, это слово присваивается в качестве значения свойства title этого объекта.
Свойство title используется при выводе объекта в текст. Выражение "это объект книга - {книга}" равнозначно "это объект книга - {книга.title}".

2. Добавлена подсистема обработки событий.
Формат описания обработчика события: <имя события>(<список аргументов>){<код обработчика>}
<имя события> выбирается из списка событий, обрабатываемых платформой.
Пока есть только одно событие: "no_property/нет_свойства". Список событий будет расширяться.
<список аргументов> является перечислением типов, классов или имён значений, передаваемых в качестве аргументов события. Для различных наборов аргументов можно создать различные обработчики однотипного события - поддерживается полиморфизм.
Прямой вызов обработчика события из кода невозможен, события вызываются системно.
События внутри обработчика не генерируются. Вложенные вызовы обработчиков событий запрещены.

Событие "нет_свойства" вызывается когда у объекта отсутствует запрашиваемое свойство.
Событие необходимо для реализации "виртуальных" свойств, значения которых рассчитываются, а не хранятся в объекте.
Формат описания: нет_свойства(<объект>, <свойство>){<код обработчика>}
<объект> - объект, у которого запрашивается свойство
<свойство> - свойство, запрашиваемое у объекта.
Результат возвращается как значение запрашиваемого свойства (см. примеры в демо).

14

версия 2.0.2.2 альфа.
Добавлен модуль стандартной библиотеки для работы с признаками объектов.

15

Шикарно. Все эти абсолютные и относительные признаки, встроенный автоответчик на открытые и закрытые вопросы, всё это очень хорошо. Но мне кажется ТОМ уже вышел из ряда парсеров текстовых игр и стремится к полноценному анализатору и синтезатору фраз на ЕЯ. Хорошо это или плохо? Для игрока - хорошо: он сможет действительно окунуться в игру (хорошо проработанную) и общаться с парсером не обращая внимания на какие-либо ограничения. Но как же авторы игр? Я всё больше сомневаюсь в том, что ТОМ смогут и будут осваивать авторы ради написания текстовых игр.
Лично я с нетерпением жду того момента, когда я смогу всерьёз сесть и разобраться с тем, что уже реализовано в ТОМе (сейчас свободного времени мало), но я программист и хочу изучать его ради интереса. Сейчас я смотрю на строки кода как на нечто неподдающееся закономерностям. ТОМ меняется очень быстро и с каждым билдом переворачивает у меня какие-то стереотипы программирования.

16

Мне кажется ТОМ уже вышел из ряда парсеров текстовых игр и стремится к полноценному анализатору и синтезатору фраз на ЕЯ.

Тут не нужно путать причину и следствие :) Парсеры текстовых игр всегда использовали посление новейшие технологии на момент их создания. Никто никогда не понижал уровень парсинга в играх искуственно. Технология развивается - парсеры умнеют :)

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

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

Сейчас я смотрю на строки кода как на нечто неподдающееся закономерностям.

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

ТОМ меняется очень быстро и с каждым билдом переворачивает у меня какие-то стереотипы программирования.

Угу, и мои тоже :D

17

версия 2.0.2.3 альфа.
Ура! свершилось то чего я так давно хотел и боялся одновременно :)
В интерпретатор добавлена логика бинарных отношений!

Добавлен новый объектный тип "отношение", необходимый для указания отношений между объектами.
Выражение отношения строится по шаблону [A - R - B], или [A - R - p - B], где:
A - субъект отношения, допустимо любое объектное значение.
B - объект отношения, допустимо любое объектное значение.
R - отношение, допустимо только значение типа "отношение".
p -  предлог.

Значение типа отношение создаётся по шаблону [отношение R] или [отношение R флаги], где:
отношение - ключевое слово
R - имя отношения
флаги - неразрывная строка, определяющая специальные свойства этого отношения. Может включать символы:
- 11 - отношение один к одному
- 18 - отношение один ко многим
- 81 - отношение многие к одному
- 88 - отношение многие ко многим
- t или т - транзитивность
- s или с - симметричность
- as или ас - антисимметричность
- r или p - рефлексивность
- ar или аp - антирефлексивность
указание флагов такой строкой, видимо, простое временное решение.

Добавлено событие нет_отношения(), которое позволяет вычислять те отношения, которые не указаны напрямую.

Логика отношений - тема крупная, пока сделано гораздо меньше чем хотелось бы...
В частности:
Предлоги распознаются, но их смысл игнорируется. "Яблоко лежит на столе" и "яблоко лежит под столом" пока что для системы одно и то же.
Отношения не являются полиморфичными. А должны бы...

В общем смотрите демку. Теперь работают вопросы вида:
>в рюмочной есть водка?
>ты находишься на улице?
>в полной рюмке водка?
>водка содержится в запотевшей рюмке?
>на тебе салфетка?
и т.п.

18

версия 2.0.2.4 альфа.

1.Пересмотрен формат создания нового отношения.

2.Пересмотрен формат записи отношения.
Отношение "Ваня любит Маню" в предыдущей версии записывалось бы как

Код:
Ваня -любит- Маню

теперь записывается:

Код:
/Ваня любит Маню/

что на мой взгляд удобнее и нагляднее.

3.Убрано событие нет_отношения()

4. добавлены правила для отношений

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

19

Очень здорово. Про предикатную логику я слышал, а вот про логику отношений нет. Надо бы почитать, а то интересно стало как у тебя всё так складно получается.

20

версия 2.0.2.5 альфа.

Дальнейшее развитие отношений, логика работает почти как надо.

21

версия 2.0.2.6 альфа.

Инструкция по установке:
1. скачать дистрибутив версии MySQL-5.0
2. Установить сервер MySQL-5.0, указать пароль "root" для пользователя root.
(пошаговую установку сервера распишу завтра...)
3. Создать базу "tomdic". Это можно сделать в редакторе tombase.exe меню->база->создать базу.
4. Остановить сервер MySQL.
5. Удалить каталог базы tomdic (папка C:\Program Files\MySQL\MySQL Server 5.0\data\tomdic)
6. Распаковать в C:\Program Files\MySQL\MySQL Server 5.0\data\ архив tomdic.rar.
7. Запустить сервер MySQL.
(с бэкапами в MySQL пока не разобрался, поэтому загружаем базу таким варварским способом)  :tomato:

далее запускаем игрушку, а там всё как обычно, за исключением того что слова на лету подгружаются из sql-базы tomdic.

22

Ого как всё усложнилось. MySQL обязательно? Я базы делал Microsoft Access, там таких плясок не надо. Кидаешь файл .mdb рядом с прогой и работай. А плагин-словарь сейчас уже не будет поддерживаться?

23

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

24

версия 2.0.2.7 альфа (SQL).

Сделать файловый вариант не успел, но зато накопилось много полезных изменений.
Еще раз выкладываю SQL- версию. Устанавливать так-же.

25

версия 2.0.2.8 альфа.

Добавлен файловый словарь. Работает без mySQL.
Формат словаря пока еще сырой, совсем нет сжатия данных, но работает быстро. Будет доделываться в следующих версиях.

26

Я смотрю файл словаря имеет не обычный текстовый формат. А редактор какой-нить есть для него?
И фразы с "не" пока не понимает, на сколько я понял. "рюмка не запотевшая?" не работает.
Вылетает на команде "улица".
И почему он на любое одиночное слово возвращает его же?

> Запотевшая
Запотевшая.
> словик
Словик.

27

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

Я смотрю файл словаря имеет не обычный текстовый формат. А редактор какой-нить есть для него?

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

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

И фразы с "не" пока не понимает, на сколько я понял. "рюмка не запотевшая?" не работает.

да, не доделано...

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

Вылетает на команде "улица".

посмотрим, починим :)

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

И почему он на любое одиночное слово возвращает его же?

Всё просто, платформа возвращает результат вычисления введенного выражения:
>2*2
4
Для любой одиночной строки результатом вычисления будет эта же строка :)
Слова лучше проверять командами:
> Запотевшая.тип //возврашает тип значения
> Запотевшая.имя //возвращает программное имя слова или объекта
> словик.тип
> словик.имя

28

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

Да, редактор есть, работает только с mySQL, смотри посты выше.

Тот редактор я уже видел и даже пытался установить MySQL, но из этого ничего путного не вышло. Там при установке много каких параметров просит, может криво поставил. Кароче этот редактор не видит базы.

29

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

Кароче этот редактор не видит базы.

а что именно пишет?

30

Can't connect to MySQL server on 'localhost' (10061)

И ваабще не реагирует на "Загрузить из файла"