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

Объявление

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

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

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



Редактор ТОМ от Alexandr-а

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

1

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

Редактор сохраняет и загружает проекты в виде файлов своего формата. И лишь при компиляции превращает их в программу для ТОМ-а. Функции декомпиляции нет и не будет, т.е. нельзя открыть уже готовую игру и начать её редактировать в редакторе. Всё это вызвано тем, что для сохранения и загрузки проекта в формате tom нужно было бы делать нехилый парсер языка tom. А я не собираюсь дублировать платформу ТОМ. По этим же причинам в редакторе не будет полноценной подсветки синтаксиса и поиска ошибок в коде.

Вот скринчик зачатков редактора:
http://savepic.ru/1553360m.png

На данный момент реализовано:
- Сохранение/Загрузка проекта.
- Отладочная компиляция проекта (намечается 2 режима компиляции: отладочная и чистовая. В отладочном режиме каждый объект помещается в отдельный файл. Это значительно ускоряет частую компиляцию больших проектов. Чистовая, соответственно, помещает всё в один или несколько файлов). Уже опробовано на игре To_Pawn - всё работает. :)
- Редактирование параметров локаций и объектов.
- Редактирование действий.

В разработке:
- Добавление/Удаление объектов.
- Поддержка классов.

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

2

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

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

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

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

P.S. Сама разработка весьма интересна, было бы здорово "пощупать"  :rolleyes:

3

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

свойства и методы объектов было бы неплохо отображать непосредственно в дереве объектов.

Методы уже отображаются непосредственно в дереве. При клике по методу справа появляется его код, который можно редактировать.
Свойств может быть очень много и, я думаю, они будут занимать много места в дереве. Да и смысла я в этом особого не вижу. Редактировать всё-равно проще все свойства одного объекта сразу в одном месте.

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

в этом же дереве было бы неплохо видеть унаследованные свойства и методы с возможностью их переопределения.

Классы пока не сделаны. Но я ещё до них доберусь. :D Хочу сделать, чтобы при перетаскивании класса в дерево объектов создавался объект этого класса. Все свойства, безусловно, будут наследоваться. А про методы я забыл :blush: Спасибо, надо будет учесть.

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

было бы здорово "пощупать"

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

4

Всё оказалось куда сложнее, чем казалось (извиняюсь за тавтологию). Разбирался с тем, как же лучше сделать редактор свойств. Перекопал множество стандартных и сторонних компонентов - так и не нашёл ничего стоящего. Пришлось взять стандартный ListView и прикрутить к нему несколько дополнительных компонентов. Но как мы все прекрасно знаем - из этого почти никогда ничего хорошего не получается. Этот случай не оказался исключением. Ошибки и баги полезли со страшной силой, и пришлось прыгать по коду и впопыхах подставлять заплатки, костыли и заглушки, чтобы хоть как-то снизить их количество. Программный код при этом стал очень быстро превращаться в свалку. Пришлось даже создать отдельный модуль, чтобы спихнуть туда некоторые заплатки. После всех этих мучений таблица свойств начала отдалённо напоминать то, что задумывалось. Но время уже было безнадёжно потеряно...

Вот, собственно, описание этого "чуда":
http://savepic.ru/1521527m.png

Описание элементов по цифрам:
1 - галочка, показывающая, является ли свойство своим. Если стоит, то свойство переопределено или создано в самом объекте. Если нет, то свойство унаследовано. Если поставить галочку у унаследованного свойства, то оно переопределится в объекте. Если снять галочку с унаследованного и переопределённого свойства, то оно примет значение, которое имеет это свойство у класса. (*не совсем понятно описал, но думаю, вы поняли суть этой галочки*)
2 - картинка, показывающая тип свойства. О типах см. ниже.
3 - имя класса-родителя. Если свойство своё, то родитель равен "this".
4 - имя свойства. Все эти "this." перед именами потом будут убраны, как только я точно определю закономерности их появления (*в примерах я насмотрелся такого, что все описания назначения слова this нарушаются*).
5 - значение свойства. При выделении какого-либо свойства здесь появляется элемент редактирования в зависимости от типа свойства: для логического - CheckBox (галочка), для строк и чисел - поле ввода, для лексем будет поле ввода и кнопочка, вызывающая мастер составления лексем.

6 - дерево классов. Отображает дерево стандартных классов и их методов в иерархии по наследственности. При перетаскивании класса в дерево объектов (7) создаётся объект, унаследованный от этого класса.
7 - дерево объектов. Основное дерево, в котором происходит создание и редактирование локаций, объектов и их методов.
8 - дерево действий (action). В будущем намечается сделать в виде дерева, чтобы можно было распределять однотипные действия по папкам (т.к. действий может быть очень много). При перетаскивании действия на объект в дереве объектов (7), в объекте будет создаваться одноимённый метод.

При клике на свойстве правой кнопкой мыши, открывается контекстное меню, в котором можно выбрать тип свойства:
http://savepic.ru/1529480.png
* Строка - строковый тип. При компиляции значение закавычивается.
* Число - целое или вещественное число (*я лишь потом узнал, что в ТОМ числовой тип определяет только целые числа*)
* Логический - да или нет
* Лексема - строка определённого формата.
* Неопределённый - Все типы не попадающие под заданные, становятся неопределёнными. В неопределённый тип можно написать что угодно. При компиляции он не закавычивается, поэтому вся ответственность за "правильность" значения ложится на пользователя.

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

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

P.S. Я не слишком много расписываю о своих "программерских приключениях"? А то может быть это неприлично на подобных форумах.

5

В целом структура интерфейса вполне рабочая.  :cool:
Как и что реализовать конкретно, советовать не возьмусь - разработчику "по месту" должно быть виднее.

Мелкие замечания:
- Колонку "Родитель" лучше переименовать во "Владелец"
- Один и тот-же объект может присутствовать в различных ветках дерева объектов. Это нужно как-то предусмотреть.

6

Интересная штука вроде по описанию... Жду.

7

На несколько дней пропало настроение программировать, затем обнаружил, что данная архитектура редактора совершенно не приспособлена к удобному редактированию локаций. Все локации отображаются в дереве в виде списка и отображение всех локаций неудобное. Попытка создания лабиринта 3х3х2 (из примера Мышей) приводит к полному загромождению проекта. В связи с этим был придуман новый способ наглядного отображения и редактирования локаций и других объектов. Первая попытка "с лёту" сделать движок отображения оказалась неудачной. Сейчас заполняю дыры в знаниях в некоторых специфических областях (оказывается за 6 лет программирования на Delphi я ещё не изучил её вдоль и поперёк). В дальнейшем намечается сделать поддержку встроенной библиотеки стандартных классов со своими визуальными редакторами свойств, на основе которых можно будет создавать свои объекты и классы. В общем идей очень много. Цели запредельные. Если удастся всё это реализовать, то получится, как минимум, шедевр среди редакторов парсерных платформ. Только потяну ли я это один на чистом энтузиазме?  :dontknow: В любом случае, придётся подождать.

Отредактировано Alexandr (2010-08-20 19:18:20)

8

Alexandr, успехов, упорства и немного вдохновения! :)

9

Серый Волк написал(а):

Alexandr, успехов, упорства и немного вдохновения!

Спасибо, очень воодушевляет. :)

Редактор упорно не хочет делаться быстро. Чтобы совсем не теряться, решил описать хоть то немалое, что удалось сделать.
Как я уже говорил, был придуман способ визуального отображения проекта в редакторе. И он до безобразия банален - это блок-схемы. Я понимаю, что можно было-бы завернуть что-то по оригинальнее, и у меня были даже неплохие идеи, но эти "идеи" мне явно не потянуть. Так-что я решил не заморачиваться с запредельными вещами и ограничился земными прелестями. :)
Среди готовых компонентов не было найдено подходящего (да и не особо искалось) и было решено сделать свой. Вот на него то и ушли эти несколько дней. Компонент вышел, как всегда, и на половину не дотягивающий до того, как я его представлял в начале, но это всё-же лучше, т.к. разрабатывался он именно для этого редактора. Вот некоторые особенности редактора блок-схем:
* неограниченное кол-во вложенности блоков друг-в-друга.
* неограниченное пространство для их размещения.
* управление всеми тремя кнопками мыши.
* возможность проводить связи (стрелки) между блоками, находящимися в совсем разных блоках-владельцах и на разных уровнях (не путать с локациями).
* возможность рисовать непосредственно на блоках (такой забавный прибамбас, вдруг сгодится).
Вот пока всё. Этот "движок" сейчас осталось встроить в редактор. Но при этом придётся переделать его почти весь, так-что на это уйдёт ещё уйма времени. А свободного времени у меня с каждым днём становится всё меньше.  :'(
http://savepic.ru/1617632m.png
Только не пугайтесь скриншота - на самом деле не всё так страшно. Просто программа, в которой тестировался движок, не позволяет использовать все его возможности.

Ну вот пока всё. Не теряйте. :flag:

10

что-то давно нет новостей  :flirt:
как процесс движется?  :question:

11

Ну как бы помягче сказать то... :blush:
Занялся тут другим проектом и уже неделю даже не притрагиваюсь к этому редактору. Неделю назад занимался автоматическим генератором лексем, ещё до этого редактором... в общем обо всём по порядку:

Редактор

Наверно, я сильно загнул его в сторону визуального проектирования. Звучит глупо: создавать текстовые игры в визуальной среде, где каждый объект - это блок, действия - это стрелки с триггерами...  :insane:  Ну не всё, конечно, так визуально. Есть и редактор кода, но нельзя просмотреть весь код целиком, только отдельных функций и методов по отдельности. :'( Вот несколько скринов, если кому-нибудь интересно:
http://savepic.org/723484m.png
Это главное окно в режиме редактирования общей "картины мира". :) Здесь можно создавать объекты, локации в виде блоков, помещать их друг-в-друга. Почти можно рисовать на блоках. Стрелочек с триггерами пока нету, но должны быть.
http://savepic.org/744991m.png
Это редактирование кода метода.
Хоть язык и имеет по несколько вариантов написания слов как на русском, так и на английском языке, хоть и создаётся впечатление того, что на нём можно писать по русски, в нем не был учтён тот факт, что для того, чтобы напечатать {} или [], всё-равно придётся переключиться на английскую раскладку. А эти скобки употребляются в нём достаточно часто. Поэтому редактор кода здесь позволяет печатать скобки {} двойным нажатием на обычные скобки, а [] - тройным нажатием. При этом не надо переключаться туда-обратно между раскладками. Были, конечно, задумки поинтереснее, но эта оказалась более просто реализуемой. Так-же есть желание (но нет времени) повесить на кнопку Tab несколько полезных функций, таких как быстрое перемещение по параметрам метода, на котором сейчас стоит курсор. Быстрое перемещение на нужный участок кода при вставке шаблона... но это сейчас трудно описать, т.к. сначала надо объяснить, что за шаблоны будут в редакторе (если вообще будут).
http://savepic.org/773662m.png
Здесь показан редактор свойств объекта. Он не сильно изменился.
http://savepic.org/725535m.png
Это редактор шаблонов для действий и фраз. В нём можно писать не только простые шаблоны, но и более сложные. Например, шаблон "*стрелять (@Гр:Горох*Тп|) (из @Weapon:Рогатка*Рп|) (в @Цель*Вп|по @Цель*Дп|)" при компиляции (условно назовём этот процесс компиляцией) переведётся в 55 простых шаблонов путём различных перестановок. Надеюсь, это временная мера и платформа ТОМ в будущем будет сама понимать какие-нибудь более сложные шаблоны. Иначе она захлебнётся в таком количестве простых шаблонов (а может и нет, автору виднее  :) )

Автоматический генератор лексем

Т.к. новый генератор будет встроен непосредственно в редактор, буду писать о нём здесь.
Неделю назад я усиленно разрабатывал его, но чуть-чуть не доделав как-то неожиданно переключился на другие дела :dontknow: А проделана была довольно большая работа по переводу словаря АОТ в другой формат. Причиной этому послужила, в основном, медленная загрузка старого словаря (около 20 секунд) и большой размер словаря (6-7 Мб). Ладно, про размер я пошутил :) , но загрузка в 20 секунд - это никуда не годится. Так вот, после некоторых манипуляций был придуман новый формат для этой базы. Результат: 1,8 Мб и загрузка за... менее одной секунды! И это 174785 лексем общим потенциалом в 5 миллионов словоформ! Генератор тоже был начат, уже начал генерировать лексемы для словосочетаний без помощи пользователя: необходимо только набрать словосочетание и нажать Enter, как он выдавал сгенерированную лексему. Но так и не доведён до готовности...

Вот и всё на текущий момент. :whistle:

12

Ах да. Забыл добавить про то, что в редакторе уже можно сделать, откомпилировать и запустить простенькие игры. В частности, была воссоздана тестовая игра "To Pawn" и удачно запустилась. Спелеологиста не удалось сделать, т.к. он использует ВСЕ модули из стандартной библиотеки, а Мыши содержат объекты категорий Счётное и Мыслимое, которые пока не поддерживаются редактором. Но работа в таком сыром и ограниченном редакторе не доставляет ни какого удовольствия.

13

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

Результат: 1,8 Мб и загрузка за... менее одной секунды! И это 174785 лексем общим потенциалом в 5 миллионов словоформ! Генератор тоже был начат, уже начал генерировать лексемы для словосочетаний без помощи пользователя: необходимо только набрать словосочетание и нажать Enter, как он выдавал сгенерированную лексему.

Вот это здорово! Можно оформить как plug-in к ТОМу, тогда лексемы можно будет задавать непосредственно в коде через вызов внешней функции генератора лексем.

14

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

Наверно, я сильно загнул его в сторону визуального проектирования. Звучит глупо: создавать текстовые игры в визуальной среде

Главное чтобы было удобно! :)
Работа проделана огромная, очень надеюсь что дойдет до релиза.
Alexandr, а не думал выпустить версию "лайт"?  :yep:

15

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

Можно оформить как plug-in к ТОМу

Ну с плагинами я так и не разобрался, несмотря на показанный пример плагина. Оказалось, я слишком плохо знаю Си. Да и лексемы генератор выдаёт правильные не в 100% случаев, а отлавливать такие ошибки в квестах будет крайне сложно. И таскать с каждой готовой игрой файл в 1,8 Мб с почти всеми словами русского языка, а использовать только крошечную часть из них - по крайней мере нерационально. В общем, не смотря на хорошие плюсы, у этого метода хватает и минусов.

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

а не думал выпустить версию "лайт"?

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

16

Спасибо за скрины, любопытно. ТОМ стал казаться чуть-чуть менее страшным )

17

Редактор впечатляет! :) Ничего подобного не видел для РИЛ.

18

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

ASBer, возник вопрос по поводу проверки на корректность имён объектов, свойств и методов. На сколько я понимаю, общие правила именования действуют и в ТОМе: может состоять из букв, цифр, земли, начинаться только с буквы или земли. Имена объектов не должны пересекаться друг с другом. Имена свойств не должны пересекаться внутри одного объекта. Имена методов тоже не пересекаются внутри одного объекта. Так-же все имена (или только объектов?) не должны перекрывать зарезервированные слова ТОМа: операторы(if, while...), константы (true, false, да, нет...), команды (debug, run, include...), имена типов (number, bool, object...), категории (class, unique...), функции (rnd, set, input, media...), а так-же свойства не должны перекрывать "предопределённые свойства" объектов (ctg, name, cls, loc...). Список всех этих зарезервированных слов я не знаю. ASBer, не мог бы ты уточнить эти слова, а так-же поправить меня, если я где-то не прав. Чем подробнее, тем лучше :). Хочется, что-бы редактор не позволял задавать неправильные имена.
Ещё в ТОМе есть какие-то функции вроде ChkMoveObj, BefMoveObj, OnEnter, background... Нельзя ли и о них узнать поподробнее?

19

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

Разработка разморожена.

Ура! :cool:

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

а так-же поправить меня, если я где-то не прав.

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

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

Список всех этих зарезервированных слов я не знаю. ASBer, не мог бы ты уточнить эти слова

Сейчас попробую собрать... (кстати в исходниках все эти слова есть :smoke: )

20

Что-то после НГ совсем тихо стало на форуме. Напишу хоть что-нибудь, чтобы разбавить затянувшееся молчание. Со времён последнего сообщения было полностью переделано внутренне представление объектов, причёсаны тонны кода, ампутирована блок-схема (вызвала конфликты с новым представлением объектов). Было решено вынести все вспомогательные редакторы в модальные окна (плохо, конечно, но так проще). С нуля переделан редактор свойств. Теперь он не похож на тот убогий километровый список свойств с кучей багов. Теперь редактирование свойств объекта происходит в отдельном окне с расфасованными по вкладкам свойствами. Теперь даже новичок не затеряется в них. Свойства имеют типы, несколько отличные от типов ТОМа. Типизация идёт по способу редактирования, а не по внутреннему представлению. Например, для строк - поле ввода, для логического - CheckBox (галочка), для типов с ограниченным кол-вом вариантов значения - выпадающий список этих вариантов и т.д. Всё это легко редактируется, комментируется и настраивается как душе угодно.
Ой, всё-таки не удержался и выложил скринчик:
http://savepic.ru/2109901m.png
Это и есть редактор свойств (вернее его небольшая часть). За кнопками скрывается ещё диалоговые окна и настройки.
Разумеется, это не все новшества. Практически для каждого (даже самого маленького) элемента, который так или иначе компилируется в итоговый файл добавлен пункт меню или кнопочка "Показать код", при нажатии на которые отображается итоговый код этого элемента в том виде, в котором он будет скомпилирован. Это позволяет быстро и удобно отлаживать и находить проблемы.
Сейчас идёт полное перелопачивание блок-схемы. Она сначала была криво сделана :(. Вот осталось разобраться с блок-схемой, достроить компиляцию и сделать нормальный редактор лексем и можно будет выпускать жутко урезанную версию редактора (типа лайт). Мдя, ещё бы попреукрасить его немножко, а то не смотря на функциональность выглядит как-то убого.
Пока нереализованными функциями, сильно ограничивающими возможности ТОМа, являются:
Невозможность работы с категориями Счётное и Мыслимое. Если честно, даже не знаю как реализовать эти категории. Они могут содержаться в нескольких объектах сразу, а это противоречит текущему представлению объектов. Да и отображать в дереве и на блок-схеме их как?
Невозможность работы с относительными свойствами (объект_по_месту[комната] = "корова"). Ну это не большая проблема. Рано или поздно будет сделано.
Ну и отсутствие триггеров, отсутствие которых не ограничивают возможности, но требует от пользователя хороших знаний ТОМа. Если удастся их реализовать в том виде, в котором я их представляю в мечтах, то для начала работы в редакторе не надо будет знать язык ТОМ. Запускай и создавай простенькие игры, постепенно, по мере необходимости изучая "внутренности" языка ТОМ. :)

кстати в исходниках все эти слова есть

Копаться в чужих исходниках на малознакомом языке довольно трудно. Пока оставил без проверки. Проверка только на пересечение имён.

21

Классно, что работа не останавливается :cool: так держать!

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

Копаться в чужих исходниках на малознакомом языке довольно трудно.

Ок, в очередной раз обещаю покопаться и выдать списки нагора.  :hobo:

22

Разморозил разработку. Теперь на досуге продолжаю что-то ваять. Полностью переписал движок блок-схем. На вид ничего не изменилось, но внутренне стало немного понятнее и гибче. Так-же почти ввёл поддержку счётных и мыслимых объектов. Реализовал их в виде зеркал (отражений). Добавилось ещё одно дерево, содержащее список всех мыслимых и счётных объектов, а блоки и листья в деревьях объектов - лишь отражения этих объектов (отсюда и название). Поэтому их может быть сколько угодно копий, но изменяя один, изменения отражаются на сам объект, а следовательно все его отражения меняются вместе с объектом. Вот как-то так :)
В результате всех этих изменений произошла полная рассинхронизация средств отображения. Сейчас пытаюсь восстановить по крупицам. Синхронизация нужна для одновременного редактирования игрового мира в разных элементах управления: меняя что-то на блок-схеме это тут-же отображается в дереве. Так-же и наоборот.
Так-же скачал новую версию стандартной библиотеки. Даааа, изменений там много. Сейчас пытаюсь переложить её в редактор. Уже столкнулся с несколькими проблемами: например, редактор пока не поддерживает относительные свойства, а в библиотеке они уже во всю используются Х_х

23

ASBer, нашел тут в стандартной библиотеке страшную вещь:

Код:
action вышел_куда //синоним действия "войди": "войди на площадь" vs "выйди на площадь"
{ cls = вошел
  this.инфинитив="выйти"

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

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

24

С возвращением!  :flag:  :jumping:

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

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

P.S. да, похоже, второй ТОМ с первым будет иметь мало общего...

25

Ну что-ж. Модуль main.tml перенесён почти без искажений. Опущены только относительные свойства и та строчка "cls = вошел".
Поначалу я думал немного стандартизировать объявление имён классов и добавить ко всем приписку "кл". Например, "состояние" -> "клСостояние". Ведь во всех языках высокого уровня есть рекомендуемые стандарты. Например все типы начинаются с T, интерфейсы с I и т.д. Это должно упрощать определение объекта прямо по названию. Так и объявил, но оказалось что в библиотеке во многих функциях употребляются эти названия классов. Сейчас есть два пути: отказаться от такого именования и вернуть всё как было, либо переименовать все названия классов и внутри методов, закончив тем самым применение этого "стандарта" хотя-бы к стандартной библиотеке.
ASBer, как ты вообще относишься к такого рода "неестественным" стандартам?

Вот скриншотик, на котором видно часть получившихся деревьев и редактор свойств:
http://savepic.org/1775488m.png

Думаю, остальные модули пока трогать не буду. Осталось допилить Drug&Drop между деревьями и можно будет выкладывать.

P.S. да, похоже, второй ТОМ с первым будет иметь мало общего...

Там хоть категории останутся прежними?

26

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

оказалось что в библиотеке во многих функциях употребляются эти названия классов. Сейчас есть два пути: отказаться от такого именования и вернуть всё как было, либо переименовать все названия классов и внутри методов, закончив тем самым применение этого "стандарта" хотя-бы к стандартной библиотеке.
ASBer, как ты вообще относишься к такого рода "неестественным" стандартам?

Применительно к классическим языкам программирования (C, C++, Pascal), отношусь положительно.
Применительно к ТОМу - скорее отрицательно.
Даже в первом ТОМе программное имя объекта иногда может вылезти наружу в качестве его названия (если не задан Title).
Во втором ТОМе с приближением стиля программного кода к ЕЯ такие имена вообще будут смотреться коряво...

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

Там хоть категории останутся прежними?

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

27

Ох, сколько можно возиться... выкладываю как есть. К тому-же мне кажется, что всё это мартышкин труд, ведь грядёт ТОМ2, в котором реальность и фантазии сливаются воедино, квесты создаются одним движением мысли и т.п. :) Редактор там уже не нужен будет.
Из самых крупных недоделок:
- Блок-схема не синхронизирована. Её не трогать, иначе можно запороть проект. Можно конечно потрогать, но после этого лучше не сохраняться, т.к. проект уже может оказаться рассинхронизированным.
- Отражения введены не полностью. Так-что создать мыслимое или счётное можно, но добавить его отражение не получится (нет элементов управления, позволяющих это сделать).
- "Отладочное меню" не скрыто. Лучше там ничего не трогать. Самый безопасный пункт в нём: "Обновить деревья". Остальные уже давно валяются и не проверялись, поэтому могут вызвать сбой в работе программы и порчу открытого проекта (если не самих файлов программы Х_х).
- Работает в режиме отладки (на блоках рисуются циферки вместо названий).
- Компиляция отсутствует, зато почти везде есть кнопка "Показать код", при нажатии на которую отображается скомпилированный код указанного объекта.
- Много-много мелких недоделок :blush:
- Название программы звучит крайне банально. Как будет фантазия, придумаю что-нить другое (если будет необходимость).
0.3.0.238

28

Скачал, ковыряюсь.
Первое впечатление - ВПЕЧАТЛЯЕТ!

29

Напишу небольшой ликбез по редактору свойств, т.к. там чёрт ногу сломит.
Редактор свойств открывается по двойному клику по объекту в дереве (должно ещё и на блок-схеме, но пока нету).
Вот так он выглядит:
http://savepic.net/1192226.png
Список разделов слева (1) и вкладок сверху (2) идентичны. Кому как удобнее переключать. Кстати переключаться между вкладками можно по Ctrl+Tab / Ctrl+Shift+Tab (сам удивился, видимо виндовс поддерживает). Пункт "Шаблоны" должен присутствовать в объектах категорий "Действие" и "Фраза". Если он отображается в других объектах - это глюк.
Галочки (3) слева от свойств обозначают собственное свойство. Если галачка стоит, значит свойство присутствует непосредственно в этом объекте, а если нет, то значит свойство унаследовано от класса. При наведении курсора на галочку показывается объект, в котором в данный момент описано это свойство. Можно поставить или снять галочку, при этом реакция будет разной: от простого разобъявления свойства до его полного удаления. В зависимости от ситуации.
Кнопка "Закрыть" (4) закрывает редактор свойств.
Поле класса (5) отображает класс, от которого унаследован объект, а так-же позволяет сменить его (кнопка "Изменить").
Кнопка "Добавить" (6) позволяет добавить новое свойство на текущую вкладку.
Кнопка "Редактор групп свойств" (7) открывает редактор групп, в котором посредством перетаскивания свойств можно распределить их по вкладкам. Там же можно создать новые группы (вкладки). Что-бы удалить группу, нужно просто оставить её пустой.
Кнопка "Скрытые параметры" (8) открывает окно редактирования скрытых параметров объекта:
- Комментарий.
- Категория порождаемого объекта. Используется для классов. При перетаскивании класса на дерево объектов создаётся объект указанной категории. Если указана категория "Неопределённый", то при создании нового объекта от этого класса будет выдан запрос на выбор категории. Это удобно, например, для класса "Место". Там установлена категория "Локация" и все объекты, порождаемые из класса "Место" берут эту категорию без запроса.
- Приписки к имени. Это мне было нечего делать Х_х. При создании нового объекта стандартное имя типа "Новый объект" мне показалось слишком банальным. В этом поле для класса можно задать перечень слов в столбик, из которых будет генерироваться случайное имя при создании объекта.

Кнопки справа от свойств показывают пиктограмму типа свойства и открывают меню редактирования:
http://savepic.net/1227067.png
Тип. Позволяет выбрать один из типов свойства:
- Неопределён - любое значение. Компилируется без изменений.
- Строка - однострочный текст. При компиляции заключается в кавычки.
- Текст - многострочный текст. Аналогично Строке, только позволяет писать большие тексты с переносами.
- МорфКод - В данной версии не реализован. Аналогичен строке.
- Лексема - Не реализовано. Поле редактирования ваабще отсутствует О_о. В будущем здесь будет зверский редактор лексем ^.^ Я надеюсь на это.
- Число - Число.
- Логический - Принимает форму галочки. Имеет сверхъестественные свойства, описанные ниже, где описывается пункт "Доп. параметры".
- Объект - Позволяет выбирать объект из списка или написать самому.
- Лист - Позволяет выбирать значение из списка или написать другое. Список задаётся в "Доп. параметрах".
- Фикс. лист - Позволяет выбрать значение из фиксированного списка. Задать другое значение не получится. Список задаётся в "Доп. параметрах".
Удалить. Удаляет свойство.
Относительные значения. Не реализовано.
Доп. параметры. Открывает окно редактирования дополнительных параметров свойства:
- Комментарий - всем понятно.
- Маска - позволяет применять дополнительное форматирование значения после компиляции. Например маска "{*}" (без кавычек) заставить скомпилировать строку "здравствуй, мир!" в параметр: this.helloworld = {"здравствуй, мир!"}. Можно поэкспериментировать, меняя маску и выбирая пункт "Показать код" у свойства.
- Список значений - задаёт список значений, которые будут появляться в списках "Лист" и "Фикс. лист". А так-же позволяет переделать банальные надписи "да"/"нет" у логического свойства на свои. Достаточно ввести тут две строчки.

Ну вот и всё про свойства. Осталось рассказать о двух необычных вкладках: "Синонимы" и "Шаблоны".
Вкладка Синонимы пока не сделана, поэтому и рассказывать о ней нечего.
Вкладка Шаблоны присутствует у объектов категории "Действие" и "Фраза", и позволяет задавать список шаблонов (pat) для этих объектов. Тоже обладает немного бОльшими способностями: если написать строчку "*(застрели|пристрели) (корову) (из рагатки|рогаткой)", то при компиляции это перевернётся в набор всех сочетаний:

Код:
// ===== Шаблоны =====
// *(застрели|пристрели) (корову) (из рагатки|рогаткой)
pat = "застрели корову из рагатки"
pat = "пристрели корову из рагатки"
pat = "застрели корову рогаткой"
pat = "пристрели корову рогаткой"
pat = "застрели из рагатки корову"
pat = "пристрели из рагатки корову"
pat = "застрели рогаткой корову"
pat = "пристрели рогаткой корову"
pat = "корову застрели из рагатки"
pat = "корову пристрели из рагатки"
pat = "корову застрели рогаткой"
pat = "корову пристрели рогаткой"
pat = "из рагатки застрели корову"
pat = "из рагатки пристрели корову"
pat = "рогаткой застрели корову"
pat = "рогаткой пристрели корову"
pat = "корову из рагатки застрели"
pat = "корову из рагатки пристрели"
pat = "корову рогаткой застрели"
pat = "корову рогаткой пристрели"
pat = "из рагатки корову застрели"
pat = "из рагатки корову пристрели"
pat = "рогаткой корову застрели"
pat = "рогаткой корову пристрели"

Это можно тут-же посмотреть, нажав кнопку "Показать код".
Все строчки без звёздочки в начале строки скомпилируются без развёртки.

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

30

Молодец, Саша. В правильном направлении движешься. Есть такая фраза из Левши Лескова "Англичане ружья кирпичем не чистят, а мы чистим." Плиз, установи себе английские платформы Адрифт 3.9 и последний Адрифт 5 и посмотри, как там реализован редактор. Нужно взять там всё, что может пригодиться и приспособить к ТОМу. Можно даже взять за основу, и добавить нужное.