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

Объявление

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

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

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



Альфа

Сообщений 31 страница 60 из 142

31

Can't connect to MySQL server on 'localhost' (10061)
Да, что-то не так с сервером MySQL...

32

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

Сделал небольшое сжатие словаря,
Исправил ошибку со словом "улица". Как оказалось интерфейс вылетал на словах с ударением на первую букву.

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

Фразы с "не" работают. "Осмотри не запотевшую рюмку" даёт правильную реакцию.
Вопрос же "рюмка не запотевшая?" неоднозначен, так как рюмки там 2! и вот с этим надо еще поработать :)

33

версия 2.a.3.0 альфа.
Вообще выкладывать такую версию ужасно рано. Переписано не более 50% кода от предыдущей версии. Всё остальное до сих пор еще закомментировано.
В этой версии нет:
- наследования
- признаков
- атрибутов
- отношений
- функций и методов (выражений, действий и фактов)
- и многого другого.

Но зато есть то чего вообще не было в предыдущей версии, или было, но теперь полностью переделано.

Комментарии и описания нового функционала постараюсь дать завтра.

34

Итак, в чём же суть этого рефакторинга?

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

В версии 2.а.3.0 в первую очередь имеет смысл обратить внимание на то, что сделано заново. То что и так прекрасно работало в этой версии отсутствует, т.к. переписано только около 50% функционала.

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

Код:
локация A
{ //...
  объект Б
  {
    //...
  }
  //...
}

Объекты и локации можно переносить в новое место оператором "+", так же как это было в 1м ТОМе:
A + B
К объектам, локациям и переменным можно обращаться как к атрибутам объекта, их содержащего, через оператор ".":
X.Y
Узнать где находится объект можно через спец.свойство "pos", "position", "положение":
A.pos
Узнать локацию объекта можно через спец.свойство "loc", "location", "локация":
A.loc

Текущая локация, "фокус" игры
Узнать текущую локацию можно через ключевое слово "loc", "location", "локация":
location
Переход у другую локацию происходит по команде "goto", "иди":
goto A

Переключатель режима "в игре"/"вне игры"
Планировался давно, наконец сделан.
Режим "в игре" предназначен для игрока, режим "вне игры" для игрописателя. Режим "в игре" автоматически включается после загрузки файла с игрой. Переключение между режимами осуществляется командами:
>в игре
>вне игры

В игровом режиме многие программные команды, ключевые слова и др.возможности не действуют.

Зона видимости объектов и переменных
изменится в следующем релизе, пока рано описывать...

35

А можно будет делать объекты, содержащиеся в нескольких локациях сразу, как это было с ментальными в ТОМ1 ? Например, чтобы небо было видно одно и тоже из нескольких локаций. Или например есть две локации: "возле моста" и "на поляне", и из них обоих виден "старый дуб". Можно описать этот дуб один раз и отображать его из этих двух локаций? Ну, чтобы изменения с этим дубом были видны из двух локаций сразу.

36

Код:
object мост_и_поляна
{ object старый_дуб
   {
      var описание = "очень старый, старый дуб"
      //...
   }
   location возле_моста
   {
      //...
   }
   location на_поляне
   {
      //...
   }
}

Должно быть примерно так.
Правда в версии 2.а.3.0 это не будет работать как должно.

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

37

версия 2.a.3.1 альфа.
- восстановлена работа предлогов;
- добавлены ключевые слова pers и this;
- окончательно сформировалась система расположения локаций и объектов

P/S Александр, загляни в личку плиз

38

версия 2.a.3.2 альфа.
- восстановлены и усовершенствованы классификация и наследование.

39

версия 2.a.3.3 альфа.
Восстановлены функции
- изменен формат описания аргументов функций, теперь он стал ближе к классическим языкам;
- в очередной раз переименованы виды функций, теперь это действие (action), факт (fact) и выражение (expression)

Расширена функциональность предлогов
- теперь можно легко и естественно обращаться к значениям с именами "на:крыше", "под:землёй", "перед:домом";
- можно образовывать падежи, в чистом виде не встречающиеся в русском языке, например Аблатив, Иллатив или Пролатив (а они будут нужны=)

Переписана демо-игра

40

Да, демка хоть и маленькая, но проработана хорошо. Можно осмотреть почти все необязательные объекты: траву, росу, крышу башни и т.д.
Правда, я долго подбирал слова чтобы спуститься по ступеням в зал. Набирал "иди по ступеням", "иди в спуск" и т.п., а оказалось надо было "иди в зал", хотя в описании локации ничего про "зал" сказано не было.
Но это ведь демка, так-что ок.

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

А если набрать "потолок", находясь в зале под землёй, мы увидим "Здесь нет потолка". Звучит странно  :D , придётся в каждом закрытом помещении описывать декоративный потолок? Ах да, это ведь решается стандартной библиотекой.

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

Пойду копаться в исходниках...

41

А программки простым перетаскиванием на tom2.exe так и не запускаются. :no: Рррр...

42

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

А программки простым перетаскиванием на tom2.exe так и не запускаются.  Рррр...

Странно, а у меня всё перетаскивается и всё запускается...

43

Если в пути есть пробелы, то ошибка.

Не в тему: если не набирать команду и просто нажать Enter, то парсер выдаст "Абзац." Многозначительно! :)

44

версия 2.a.3.4 альфа.
- Добавлен счетчик выполнения строки, показывающий сколько раз строка кода была выполнена. Позволяет удобно отслеживать 1, 3 и 125 заходы игрока в локацию.
- Исправлен запуск файлов с пробелами в имени или пути.
- Описания предлогов убраны в словарь.
- Много нужных, но не особо заметных исправлений и заделов на будущее.

45

версия 2.a.3.5 альфа.
- Восстановлена работа логических операторов И и ИЛИ.
- Восстановлена работа признаков объектов, в словарь добавлено более 700 признаков.
- Добавлена механика для тёмных помещений и освещения.

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

46

версия 2.a.3.6 альфа.
Добавлена возможность создавать синонимы функций
Теперь работают такие команды как:
>посмотри на башню
>посмотри на запад
>иди на запад
>посмотри на дверь
>посмотри в дверь
>иди в дверь
>посмотри наверх
>иди вверх по лестнице
и многие подобные.

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

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

47

версия 2.a.3.7 альфа (bugfix).
- Исправлены некоторые ошибки;
- Добавлены сокращения для сторон света: сзюв;
- Расширены сообщения для непонятых команд.

48

Перестала работать команда "выход". До старта демо-игры работает, а после - нет.
И ещё, почему осмотреть себя получается, а "осмотреть свою ногу" - нет. Даже "осм твою ногу" не получается.

Отредактировано Alexandr (2013-04-16 20:56:30)

49

http://s2.uploads.ru/t/YEO1h.png

50

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

1. расширение надо =)
2. "Ок, факт принят" - это результат выполнения последней команды загруженного файла. Если в последней строке файла поставить "файл загружен", будет выводиться "файл загружен".
3. "Слово "run" мне не известно" - после загрузки файла платформа автоматом переходит в режим "в игре". В этом режиме не доступны большинство команд. Что должно быть доступно, а что нет, еще будет уточняться =)
Нужно ввести:
>вне игры
>run test.txt

51

Перестала работать команда "выход". До старта демо-игры работает, а после - нет.

Аналогично, "выход" работает только "вне игры", в игре эта команда скорее всего будет работать как "осмотри выход".

И ещё, почему осмотреть себя получается, а "осмотреть свою ногу" - нет. Даже "осм твою ногу" не получается.

А это еще не делал ;)

52

версия 2.a.3.8 альфа.

Ключевое слово this заменено на self (сам).

Добавлены вычисляемые переменные. Формат:
var X = { ..код.. }

Таким образом можно реализовать вычисляемые свойства объектов или методы. При вычислении self ссылается на объект-владелец переменной, если таковой имеется.

В стандартную библиотеку добавлено вычисление 2х признаков - темно и видно.
Темно - признак класса "место", используется для локаций и равен истине если локация тёмная и в ней нет светящих источников света.
Видно - признак класса "всё:видимое", равен истине если в локации не темно и объект находится в пределах видимости.

Исправлены некоторые ошибки.

53

версия 2.a.3.9 альфа.

Добавлена обработка связки наречий с глаголами, например: высоко сижу, далеко гляжу;
Добавлены 3 признака месторасположения объектов: далеко:находится, высоко:находится, глубоко:находится;
Добавлен черновой вариант действия "потрогай";
Действия "осмотри" и "иди" перенесены в словарь;
Добавлена возможность переопределять в игре библиотечные функции и модифицировать библиотечные классы.

54

версия 2.a.3.10 альфа.

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

Кроме того добавлен новый синтаксис:
X.внутри - возвращает список объектов, находящихся внутри объекта Х;
Х.снаружи - возвращает список объектов, закреплённых снаружи объекта Х;
Англоязычные синонимы ключевых слов: inside, in и outside, out.

Добавлена новая команда "инвентарь".

55

версия 2.a.3.11 альфа.
Добавлены динамические описания персонажей:

> осмотри себя
Ты выглядишь как обычно, одет в брюки и рубашку и держишь факел

Добавлено несколько новых хорошо забытых старых операций;
Исправлено несколько серьёзных багов.

Как именно формируются описания опишу чуть позже.

56

версия 2.a.3.12 альфа.
- Много изменений;
- Игра "Остров" в качестве бонуса;

57

Красиво сделано изменение цвета фона при проигрыше. Портированная игра - это конечно хорошо для теста, но остров... уж слишком сложная она Х_х
Будет время, поковыряюсь в коде, но не думаю, что там какие-то кардинальные изменения.
Как идёт наполнение стандартной библиотеки? Какие команды уже есть? Помнится, раньше их было крайне мало (осмотреть, идти, потрогать).

58

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

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

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

59

версия 2.a.3.13 альфа.
Все исправления в основном носят поверхностно-декоративный характер:
- затемнение фона под текстом;
- запись лога игры;
- работает команда "заново";
- заменена иконка программы.

Также небольшие изменения в коде игры, например работает код такого вида:

Код:
  если компас не у тебя
  { %После вынесенного вождем приговора тебя убивают на месте.
    goto die
  }

P.S. Также запускаются файлы с длиной пути > 100 символов. Теперь ограничение где-то в районе 1000 символов, надеюсь этого достаточно =)

60

Как же я долго пытался убежать от индейцев. Так и пришлось кликнуть на "кнопку" :)

> убежать
Нет, не получается убежа`ть...
> вернуться назад
Слово "назад" мне неизвестно...
> вернуться
Нет, не получается верну`ться...
> назад
Слово "назад" мне неизвестно...
> восток
Здесь нет восто`ка
> иди на восток

Побег - не лучшее средство от толпы разъяренных индейцев.
Они слишком умело управляются со своими копьями.
Первое брошенное тебе вслед оружие намертво прибивает тебя к ближайшему бамбуку.