ТОМ: язык программирования: различия между версиями

Содержимое удалено Содержимое добавлено
м Отмена правки № 4785 участника ASBer (обсуждение)
мНет описания правки
 
(не показана 41 промежуточная версия этого же участника)
Строка 1:
Справочник по языку программирования платформы [[ТОМ]].
 
Страничка заморожена. Все особенности ТОМа, не описанные ниже, являются недокументированными.
страничка в разработке...
 
{{Содержание справа}}
Строка 42:
Пустое значение.
Обращение к несуществующим свойствам, функциям и переменным всегда возвращает null.
В логических операциях null выполняетэквивалентно рользначению 3го логического значения "неизвестно"false.
В операциях сравнения null не равен ни одному значению, кроме себя самого.
Все остальные операции с null всегда возвращают null.
 
Строка 104 ⟶ 105 :
 
=== Логические операции ===
Значение null в логических операциях эквивалентно false.
====! / не====
Логическое отрицание
 
====!, not, не (логическое отрицание)====
не true = false
 
не! falsetrue = truefalse
 
не! nullfalse = nulltrue
 
! null = true
 
====|, /||, or /, или (логическое сложение)====
Логическое сложение
 
true или|| true = true
 
true или|| false = true
 
truefalse или|| nulltrue = true
 
false или|| truefalse = truefalse
 
====&, &&, and, и (логическое умножение)====
false или false = false
 
falsetrue или&& nulltrue = nulltrue
 
true && false = false
null или true = true
 
false && true = false
null или false = null
 
false && false = false
null или null = null
 
 
====& / and / и====
Логическое умножение
 
true и true = true
 
true и false = false
 
true и null = null
 
false и true = false
 
false и false = false
 
false и null = false
 
null и true = null
 
null и false = false
 
null и null = null
 
===Лингвистические операторы===
Строка 166 ⟶ 144 :
Пример:
unique Test //создаем объект и задаем текстовые свойства
.{ title = "тестов% объект%; Мр; Ип; Ип=ы,; Рп=ого,а;"
. description = "описание тестового объекта"
. add_property = "дополнительное свойство"
}
 
Выводим аспекты объекта:
Строка 223 ⟶ 202 :
По умолчанию, если Obj не управляется игроком, сообщения парсера на экран не выводятся.
 
 
==== - описание события====
Оператор "-" позволяет описать событие, которое может спровоцировать реакцию персонажей находящихся в локации.
Событие может быть введено только программно.
 
==Конструкции языка==
Строка 291 ⟶ 268 :
В отличии от локальных переменных, глобальные переменные могут иметь относительные значения также как свойства объектов.
 
====global.token[]====
При разборе команды парсер помещает в эту переменную отдельные слова, которые могут быть использованы для более точного анализа и выполнения команды.
Как пример, следующий код последовательно выводит на экран все слова введенной команды:
for(var i=1; token[i]; i=i+1)
{
%{token[i]}
}
 
====global.keyword[]====
 
====global.secret====
Строка 305 ⟶ 274 :
Это единственная переменная, которая сохраняет свое значение при рестарте, при загрузке новой игры или при загрузке модуля игры.
 
 
====global.description====
 
==Константы==
Строка 319 ⟶ 288 :
===frontend===
*Константа используется в выражениях. Возвращает строку с именем используемого интерфейса (исполняемого файла). Например "constom.exe" или "Milena.exe".
 
==Специальные контекстные значения==
===this===
''(только для чтения)''
 
Во время выполнения метода this указывает на объект, которому принадлежит выполняемый метод.
 
===act===
===actor===
===talker===
===addressee===
===told===
===addressed===
 
==Объекты==
Строка 371 ⟶ 353 :
Пример использования:
class гном
{ ... }
unique великан
{ ... }
unique вход_в_шахту
{ //описание
.описание = "Круглая дыра в скале"
.описание[гном] = "Вход в шахту. Сделан гномами и для гномов" //действует для всех гномов
.описание[великан] = "Маленькая мерзкая дыра в скале. Тебе туда не залезть. Пахнет гномами."
//флаги
.можно_пройти[гном] = да //действует для всех гномов
.можно_пройти[великан] = нет
}
 
===Элементы объекта===
Строка 420 ⟶ 403 :
Пример:
location комната //создаем новую локацию
.{ title = "маленькая комната" //задаем наименование
. description = "это светлое и уютное помещение." //задаем описание
}
или
локация комната //создаем новую локацию
.{ наименование = "маленькая комната" //задаем наименование
. описание = "это светлое и уютное помещение." //задаем описание
}
Локация может содержать в себе другие локации, уникальные и счетные объекты, мыслимые объекты. Для [[TOM: язык программирования#Элементы объекта|элементов локации]] подразумевается что они находятся в этой локации.
 
Строка 460 ⟶ 445 :
Переменная задается специальным знаком и именем роли после знака. После имени роли переменной может быть указан аспект и лингвистический ключ.
Например:
.шаблон = "осмотреть @Объект:Предмет*ВпЕч"
где:
*@ - символ, указывающий тип переменной;
Строка 480 ⟶ 465 :
Пример:
action NoSave
.{ шаблон = "save=сохранить"
}
Мышонок.NoSave( ){ %сохранение запрещено! }
Строка 499 ⟶ 485 :
Метод объекта action, имя которого совпадает с именем переменной в шаблоне, и который имеет один аргумент, совпадающий с этой же переменной, является проверкой для значений этой переменной.
action Осмотреть //создаем действие осмотреть
{ .pat = "осмотреть @Предмет" //добавляем шаблон с переменной "Предмет"
.Предмет(Предмет) //добавляем проверку для переменной "Предмет"
{
if (Предмет == pers)
return "ты не можешь себя увидетьосмотреть!" //сообщение об ошибке
}
}
 
=====комбинационные проверки=====
Строка 511 ⟶ 498 :
===phrase / фраза===
phrase - специальная категория, предназначенная для описания диалоговых фраз, распознаваемых парсером.
====.keyword / .ключ====
 
 
===event / событие===
event - специальная категория, предназначенная для описания произошедших событий, распознаваемых парсером.
 
==Предопределенные объекты==
Строка 533 ⟶ 518 :
Персонажем может быть только уникальный объект.
 
При старте системы значением переменной pers ==является объект global.
 
 
Управление персонажем:
 
====Смена персонажа====
unique главный_герой //создаем уникальный объект
{
//... описание главного героя
}
pers = главный_герой //передаем управление на новый объект
 
Если смена персонажа приводит к изменению текущей локации, для новой локации вызывается обработчик события OnEnter().
===this / это===
Во время выполнения метода, this указывает на объект, которому принадлежит выполняемый метод.
 
===actor / актер===
actor указывает на объект, от имени которого выполняется действие.
actor не изменяется при вызове методов других объектов.
По умолчанию значения всех относительных свойств возвращаются относительно объекта actor.
 
===act / акт===
act указывает на объект категории action и соответствует действию, выполняемому в данный момент.
act имеет смысл в методах, вызываемых парсером и после парсера. Во всех остальных случаях значение act равно null.
 
==Предопределенные свойства==
[[Изображение:TOM_prop.gif]]
==Специальные поля значений==
===Свойства всех типов===
Для любого [[TOM: язык программирования#Типы данных|типа данных]] возможен доступ к дополнительным полям.
 
(Но не для всех типов данных эти поля имеют смысл).
 
====.typ / .тип====
''(только для чтения)''
 
Строка 567 ⟶ 543 :
Работает для всех типов данных.
 
====.str / .строка====
''(только для чтения)''
 
Строка 579 ⟶ 555 :
 
 
====.num / .число====
''(только для чтения)''
 
Строка 589 ⟶ 565 :
 
 
====.obj / .объект====
''(только для чтения)''
 
Возвращает "чистый" объект без примеси количества и положения.
 
====.key / .ключ====
''(только для чтения)''
 
 
====.pos / .поз====
''(только для чтения)''
 
Строка 610 ⟶ 586 :
Для прочих значений .pos возвращает null.
 
===СвойстваСпециальные свойства объектов===
====.name / .имя====
Возвращает программное имя объекта.
 
''(только для чтения)''
 
====.loc / .лок====
Возвращает локацию, в которой находится объект.
 
Строка 625 ⟶ 601 :
 
 
====.cls / .класс====
Синтаксис: O.cls
 
Строка 640 ⟶ 616 :
Где: C - объект категории class.
 
====.ctg / .категория====
Синтаксис: O.ctg
 
Строка 649 ⟶ 625 :
''(только для чтения)''
 
====.synlex / .синоним=лексема===
''(только для чтения)''
 
====.lexpat / .лексема=шаблон===
''(только для записи)''
 
====.pat / .шаблон====
Cвойство используется для установки [[TOM: язык программирования#Шаблоны|парсерных шаблонов]] для объектов категорий action, phrase и event.
Количество шаблонов для одного объекта не ограничено.
Строка 663 ⟶ 636 :
Пример
action осмотреть //создаем действие "осмотреть"
.{ pat = "осмотреть" //задаем 1й шаблон
. pat = "осмотреть @объект" //задаем 2й шаблон
. pat = "осмотреть @какой @объект" //задаем 3й шаблон
}
 
====.item / .элемент====
Свойство .item предоставляет доступ к [[TOM: язык программирования#Элементы объекта|вложенным объектам]].
 
====.title / .наименование====
 
====.menu_name / .заголовок_меню====
 
====Сообщения парсера====
Сообщения парсера хранятся в предопределенных глобальных переменных.
ТОМ инициализирует их при старте, затем они могут быть переопределены в любое время. Более того, свойства с этими же именами могут быть прописаны для актера, для действия или фразы, а также для объекта.
Строка 680 ⟶ 654 :
 
Для парсерных сообщений зарезервированы следующие имена:
=====is_not_recognized=====
*Это сообщение парсер выводит когда введенную команду не удалось сопоставить ни с одним шаблоном действий или фраз.
> подумай о сыре
Это предложение непонятно!
 
=====number_is_expected=====
*Это сообщение выводится когда в шаблоне команды указана числовая переменная, а игрок ввел слово. Например, ''первый'' вместо 1, или ''пара'' вместо 2.
> возьми несколько горошин
Необходимо указать число.
 
=====unknown_word=====
*Это сообщение выводится когда в команде использовано слово, не соответствующие ни одному объекту в игре, или написанное с ошибками.
> возьми горохи из мешка
Слово <горохи> мне неизвестно.
 
=====incorrect_form=====
*Это сообщение выводится когда слово в команде стоит в форме, не соответствующей форме, заданной в шаблоне команды.
> возьми горохом из мешка
"горохом" - слово в неверной форме.
 
=====object_not_found=====
*Это сообщение выводится когда найденный парсером объект находится вне текущей локации, при том что в шаблоне команды указано его обязательное присутствие.
> осмотри филина
Филин отсутствует.
 
=====unusable_object=====
* Это сообщение выводится когда найденный парсером объект не обладает свойством, указанном в шаблоне, или не принадлежит к классу, указанному в шаблоне.
> брось крота
Дядюшка-крот не годится для этого действия.
 
=====too_difficult_statement=====
*Это сообщение выводится в случае, если парсинг команды требует перебора вариантов, количество которых превышает разумные пределы.
 
=====object_select=====
*Это сообщение выводится при устранении неопределенности перед списком неоднозначно распознанных объектов:
> взять еду
Строка 720 ⟶ 694 :
сушеные горошины в траве или малина на кустах;
 
=====сan_not_execute=====
*Это сообщение выводится когда введенная команда распознана, но для актера не задан метод для ее выполнения.
> Крот, осмотри мешок
Побойтесь бога! Крот слеп от рождения!
 
=====no_reply=====
*Это сообщение выводится когда введенная строка распознана как фраза, но никто из присутствующих в локации на неё не ответил.
> расскажите мне про лес!
Строка 738 ⟶ 712 :
===menu() / меню()===
 
===.ChkMoveObj( ) / .ПроверкаПеремещенияОбъекта( )===
Метод вызывается перед попыткой перемещения объекта.
В этом методе можно разместить проверки на возможность перемещения.
Если метод возвратит true - перемещение выполняется, если false - отменяется.
 
===.BefMoveObj( ) / .ПередПеремещениемОбъекта( )===
Метод вызывается перед перемещением объекта.
 
===.OnEnter( ) / .НаВход( )===
Обработчик события вызывается в случае когда персонаж, управляемый игроком, входит в локацию.
Вызов происходит после перемещения персонажа в локацию, но до события AftMoveObj( ).
Строка 754 ⟶ 728 :
Метод OnEnter( ) должен быть определен для локации, но вызывается от имени управляемого персонажа.
 
===.AftMoveObj( ) / .ПослеПеремещенияОбъекта( )===
Метод вызывается после перемещения объекта.
 
===.background( ) / ФоновыеДействия( )===
Метод используется для описания фоновых действий.
 
После каждого хода вызывается для объекта global, локации, в которой находится pers, и для всех объектов, находящихся в той же локации что и pers, за исключением самого объекта pers.
 
===.persbackground( ) / ФоновыеДействияПерсонажа( )===
Метод используется для описания фоновых действий объекта pers.
 
Строка 768 ⟶ 742 :
 
==Функции==
===Преобразование типов===
===rnd() / шанс()===
===Работа со строками===
===Прочие функции===
====rnd() / шанс()====
Синтаксис: rnd( )
* Функция возвращает логическое значение ''да'' или ''нет'' с вероятностью 50/50.
Строка 777 ⟶ 754 :
* Функция возвращает случайное число в диапазоне от 1 до X включительно.
 
====set() / сет()====
====input() / ввод()====
====media() / медиа()====
 
==Теги==