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

Объявление

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

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

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



Альфа

Сообщений 61 страница 90 из 136

61

Да, парсерную составляющую там еще пилить и пилить ))
Эта игрушка хороший полигон для наполнения и обкатки стандартной библиотеки.

62

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

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

Из нового - консольный интерфейс (довольно сырой и требует тестирования).

Приложенная демо-игра - это тоже скорее полигон для обкатки платформы, нежели игра.

Список действий, доступных в этой версии:
- осмотри   
- осмотрись   
- потрогай   
- нажми   
- иди
- возьми   
- выбрось   
- поднимись   
- спустись   
Для всех действий, кроме "иди", прописано много синонимов, пробуйте =)

Действия
- открой   
- закрой
нужны в игре, но они не включены в библиотеку (не доделаны), поэтому прописаны в коде самой игры.

63

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

Исправления и дополнения.

Из нового - чтение файлов в кодировке UTF-8 и UTF-16.

64

Код:
//==========================================================================================
// строим сцену из локаций и объектов
subspace демо
//==========================================================================================

subspace - что ещё за подпространство?

Код:
class @контейнер{is @материальное

Что значат собачки перед именами классов?

Отредактировано Alexandr (2014-01-14 19:30:48)

65

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

subspace - что ещё за подпространство?

Концепция пространства

2. Локация должна иметь координаты вида Х.Y.Z + именованное подпространство
Следствия:
а) образуется обычное трёхмерное пространство;
б) можно легко определить что находится на западе или сверху от текущей локации.
Использование подпространств:
подпространства можно использовать для различных целей
- изменение масштаба (улицы в городе в одном пространстве, комнаты в домах в другом более мелком подпространстве);
- служебные пространства (например герой может блуждать в собственных мыслях).

Это как раз то именованное подпространство. Все локации, объявленные после "subspace демо" попадают в подпространство "демо".
А локации объявленные без подпространства считаются системными и к ним не применяются проверки перемещений.

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

Что значат собачки перед именами классов?

хм... это новые категории  8-) я знаю, тебе нравится это слово :flirt:
По сути это те-же классы но лишенные классового имени. Объект, унаследованный от класса "@контейнер" нельзя будет назвать словом "контейнер". Это позволяет создавать абстрактные классы высокого уровня обобщения, не ломая голову над тем как их назвать. При это "контейнер" и "@контейнер" - это разные классы, они друг-другу не мешают.

66

Новое в версии 2.а.3.16

Изменения в описании аргументов функций
Аргументы описываются внутри круглых скобок сразу после имени функции: fn_type ( arg_list ) { fn_body }
arg_list имеет следующий формат: arg_type [arg_name] [#arg_key] [, arg_type [arg_name] [#arg_key]] ...

Аргументы в списке разделяются запятой или точкой с запятой.
Описание аргумента состоит из типа, имени и ключа, обязательным является только тип, остальные элементы могут быть опущены.

arg_type
Тип влияет на подбор значений на роль аргумента функции. В качестве типа может быть указано одно из следующего:
- Тип значения: bool, string, number, course, spcvalue, object, attribute, class, location, word, preposition, and-list, or-list.
- Класс значения. Пример: "предмет", "существо" и т.п.
- Произвольный литерал - должен в точности совпасть со словом, введенным игроком. Пример: "трах-тибидох"

arg_name
Имя переменной, которой будет передано значение аргумента в контексте выполнения функции.
Если имя переменной не указано, значение в функцию не передаётся, но по прежнему влияет на подбор функций.

arg_key
Ключ, которому должно соответствовать значение аргумента.
Пример: #ВпЕч - значение должно находиться в винительном падеже единственного числа.
В состав ключа могут входить шаблоны '!' и '*'.
* - подходит любое свойство ключа;
! - в ключе не должно быть указанного свойства.
Пример: #*п!е - у значения должен быть любой падеж, и не должно быть отрицания.
Если ключ не указан, проверка значения на соответствие ключу не проводится.

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

67

И где, собственно, скачать можно?

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

! - в ключе не должно быть указанного свойства.
Пример: #*п!е - у значения должен быть любой падеж, и не должно быть отрицания.

Почему нельзя отрицать отдельные значения ключей? Например, нам не нужен только винительный падеж: !Вп, или не нужно множественное число: !Мч.

68

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

И где, собственно, скачать можно?

Это анонс =)

Почему нельзя отрицать отдельные значения ключей? Например, нам не нужен только винительный падеж: !Вп, или не нужно множественное число: !Мч.

Невозможно всё предусмотреть в описании аргументов, для более хитрых случаев есть секция ==parsing==

Код:
action(test, предмет Обж)
{ ==parsing==
  fail, if Обж.key = #Вп
  fail, if Обж.key = #Мч
  ==execute==
  Ok
}

69

Новое в версии 2.а.3.16

part (часть)
Объектам добавлен еще один встроенный список - part (часть).
Всего теперь 3 списка:
- inside (внутри) - объекты находятся внутри и не недоступны снаружи, если содержащий объект закрыт и непрозрачен;
- outside (снаружи) - объекты находятся на поверхности содержащего объекта и доступны;
- part (часть) - объекты являются частью содержащего объекта и прикреплены к нему.
(для сравнения в первом ТОМе был всего 1 список на все случаи жизни - item)

Синтаксис такой-же как у 2-х предыдущих списков:

Код:
Б часть А // объект Б становится частью А 
Б часть А? // =да если Б является частью А 
А.часть // возвращает список всех частей объекта А

Примеры:
Рубашка внутри сундука //лежит в сундуке
Замок снаружи сундука //висит на сундуке
Крышка часть сундука //является частью сундука

В частности, новый список необходим для описания объектов по их принадлежности - "крышка сундука", "пистолет пирата".
Для одушевленных существ отношение владения распространяется на все 3 списка, всё что на вас, внутри ваших карманов и все части тела принадлежат вам.
Для неодушевлённых предметов владение распространяется только на их части.

70

версия 2.a.3.16 альфа.
Основные новшества описаны выше.
Кроме того много исправлений, и возможно добавлены новые ошибки.

71

Новое в версии 2.а.3.17

Морфологические формы теперь могут крепиться не только к словам, но и к любым именованным значениям, кроме предлога.
Это в частности нужно для таких нестандартных падежей как Лп, Ап, Бп, Сп, которые отсутствуют в большинстве слов.
Пример:

Код:
location в_башне
{
  form Лп = "в башне" 
  form Ап = "в башню"  
  form Бп = "из башни" 
  form Сп = "через башню" 
  var башня = в_башне //локальный синоним
  var title = word башня
}

Таким образом для значения "в_башне" мы достигаем возможность использования полного спектра всех падежей.

72

версия 2.a.4.0 альфа.
Рефакторинг завершен. УРА!
К движку прикручен новый (хорошо забытый старый от v.0.9.4.12) интерпретатор.
Внешних изменений в работе и в демо-игре нет, вполне возможно что даже что-то отвалилось, а я и не заметил.

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

Очень надеюсь что дальнейшее развитие движка будет идти легче, так как теперь интерпретатор кода почти никак не связан с парсером ЕЯ.

73

Какие странные комментарии. Начинаются на звёздочки, заканчиваются на тирэшки...

Кстати, мучал меня один вопрос. Что произойдёт в этом случае:

Код:
class класс1
{ var переменная = да, "переменная";
}
class класс2
{ var переменная = нет, "поле";
}
object коллапс
{ это класс1
  это класс2
  %Что же это? {переменная}
}

Теперь я знаю ответ на этот вопрос (да, сам проверил  :yep: ). В данном случае будет значение из первого класса (да, "переменная"). Порядок объявления классов в объекте не имеет значения. Имеет значение именно объявление самих классов в коде. Что несколько странно. Мне казалось приоритет должен браться именно по объявлению имён классов в объекте.

Отредактировано Alexandr (2014-09-25 17:45:00)

74

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

Теперь я знаю ответ на этот вопрос (да, сам проверил   ).

http://se.uploads.ru/sNaPq.png
Вообще, это считается ошибкой.
Ответ будет зависеть от распределения памяти и может быть совершенно случайным.

(в версии 2.a.4.0 параноидальный режим не работает :( )

75

В версии 2.a.4.1 добавляется новый тип объектов - act.
Этот тип является описателем действия и предназначен заменить глаголы в функциях-действиях.
Act может наследоваться от классов и от других объектов с типом act. Может содержать собственные свойства и методы.
Основная цель нового объекта - сделать функции еще более гибкими и универсальными и сократить объёмы кода стандартной библиотеки.

76

Ох как всё усложняется... даже не знаю как с этим сейчас разбираться.

77

В версии 2.a.4.1 добавляется новое специальное свойство объектов - synonym.
Свойство предназначено (как можно догадаться) для добавления синонимов к объектам.

Код:
location торговая_площадь
{ synonym = рынок 
  synonym = базар
  synonym = ярмарка
}

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

78

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

Новое ключевое слово: property, свойство, prp.
Синтаксис как у переменной.

Да! глобальные переменные тоже необходимо объявлять как свойства, иначе могут пропасть.

79

Похоже, у меня всё-же получилось сделать описание действий настолько гибким, как я и хотел с самого начала.
Конечно, есть еще косяки и баги, но глобальный способ написания ст.библиотеки видимо меняться больше не будет. Дальше только наращивание объёма.
Ждём релиза =)

80

Очень хорошо. Лишь бы потом другие люди  смогли понять эту гибкость и навороченность.

81

Да там всё логично и системно организовано (на мой взгляд).
И другие люди смогут пользоваться стандартными действиями (я надеюсь) не особо вникая в то как это работает.
:tomato:

82

версия 2.a.4.1 альфа.
- добавлен новый тип объектов act для описания действий;
- добавлен новый способ описания синонимов;
- добавлено ключевое слово "property" для описания свойств объектов;
- стандартная библиотека переработана с учетом использования новых возможностей act и synonym.

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

83

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

- добавлено ключевое слово "property" для описания свойств объектов;

http://funportal.info/smiles/smile275.gif

84

Хм..., а в чем проблема?
Те же  variable, вид с боку.

85

Просто всё время понятия меняются. Ладно, property будут в свойствах (что и должно быть изначально), а var вообще не будет на вкладках в редакторе. Пусть пользователь непосредственно в коде секции или в конструкторе объявляет и пользует.

86

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

Просто всё время понятия меняются.

:D  :D  :D
А как же без этого?
Если бы изначально знал как должно быть, уже давно бы сразу всё сделал...

87

версия 2.a.4.2 альфа.
- доработка движка, заделаны дыры, оставшиеся после рефакторинга, почищены баги;
- доработка ст.библиотеки, переработаны некоторые действия, добавлено несколько новых;

-------------
SQL база была переделана для генерации документации по действиям. Осталось написать сам генератор =)

88

версия 2.a.4.2 альфа (веб-интерфейс).

Разработан полнофункциональный веб-интерфейс, призванный заменить предыдущий графический.
Тестировался на браузерах ИЕ8 и Хром 40.0.2214.115 m. Как будет вести себя на других браузерах даже не представляю...

Для запуска используем ярлык "Demo", или запускаем "webtom.exe" и вводим команду: run demo.

Сам движок от предыдущей версии.

http://se.uploads.ru/t/bjIdm.png

89

Firefox 36.0 - работает.
Только когда появляется надпись press any key... на нажатия клавиш не реагирует. Реагирует только на клик мыши в область текста.

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

Отредактировано Alexandr (2015-03-05 21:25:21)

90

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

когда появляется надпись press any key... на нажатия клавиш не реагирует. Реагирует только на клик мыши в область текста.

Чтож, будем считать это допустимыми потерями.

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

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

Это тогда лучше сделать как модуль к апачу, наверное. Но и в этом случае большая часть наработок пригодится.