ТОМ: язык программирования: различия между версиями
Содержимое удалено Содержимое добавлено
ASBer (обсуждение | вклад) |
ASBer (обсуждение | вклад) мНет описания правки |
||
| (не показано 49 промежуточных версий этого же участника) | |||
Строка 1:
Справочник по языку программирования платформы [[ТОМ]].
Страничка заморожена. Все особенности ТОМа, не описанные ниже, являются недокументированными.
{{Содержание справа}}
Строка 42:
Пустое значение.
Обращение к несуществующим свойствам, функциям и переменным всегда возвращает null.
В логических операциях null
В операциях сравнения null не равен ни одному значению, кроме себя самого.
Все остальные операции с null всегда возвращают null.
Строка 49 ⟶ 50 :
====object.form====
Объект с указанными аспектом и формой. При присвоении преобразуется в строку, содержащую наименование объекта в требуемой форме.
====object.item====
Строка 104 ⟶ 105 :
=== Логические операции ===
Значение null в логических операциях эквивалентно false.
====!, not, не (логическое отрицание)====
! null = true
====|,
true
true
false
====&, &&, and, и (логическое умножение)====
true && false = false
false && true = false
false && false = false
===Лингвистические операторы===
Строка 166 ⟶ 144 :
Пример:
unique Test //создаем объект и задаем текстовые свойства
}
Выводим аспекты объекта:
Строка 223 ⟶ 202 :
По умолчанию, если Obj не управляется игроком, сообщения парсера на экран не выводятся.
==Конструкции языка==
Строка 291 ⟶ 268 :
В отличии от локальных переменных, глобальные переменные могут иметь относительные значения также как свойства объектов.
====global.secret====
Строка 305 ⟶ 274 :
Это единственная переменная, которая сохраняет свое значение при рестарте, при загрузке новой игры или при загрузке модуля игры.
==Константы==
Строка 319 ⟶ 288 :
===frontend===
*Константа используется в выражениях. Возвращает строку с именем используемого интерфейса (исполняемого файла). Например "constom.exe" или "Milena.exe".
==Специальные контекстные значения==
===this===
''(только для чтения)''
Во время выполнения метода this указывает на объект, которому принадлежит выполняемый метод.
===act===
===actor===
===talker===
===addressee===
===told===
===addressed===
==Объекты==
Строка 330 ⟶ 312 :
===Свойства объектов===
Свойство объекта - это переменная, связанная с объектом. Все данные объекта хранятся в его свойствах. Доступ к свойствам осуществляется по их имени.
Синтаксис:
obj.prop = х //присваивает свойству 'prop' значение 'x'
var x = obj.prop //читает значение свойства 'prop'
Где:
*obj - любой объект
*prop - имя свойства объекта
====Относительные значения свойств====
Строка 345 ⟶ 334 :
obj.prop[i] = null //уничтожает относительное значениe свойства 'prop' для 'i'
var x = obj.prop //читает значение свойства 'prop' для актера. Эквивалентно x = obj.prop[actor]
var x = obj.prop[] //читает основное значение свойства 'prop' независимо от actor
var x = obj.prop[i] //читает относительное значение свойства 'prop' для 'i'
Где:
Строка 356 ⟶ 345 :
Основные отличия от массивов:
*нет такого понятия как размер массива
*могут быть "дыры" в заполнении. Например, если значение .prop[3] не задано, то x = obj.prop[3] вернет основное значение obj.prop;
*индекс i может быть не только числом, но и строкой, а также объектом
*если значение задано относительно класса, оно будет действовать для всех его элементов.
Строка 364 ⟶ 353 :
Пример использования:
class гном
unique великан
unique вход_в_шахту
//флаги
}
===Элементы объекта===
Строка 392 ⟶ 382 :
Корзинка.item:пирожок[1] //возвращает 1й пирожок из корзинки
Также возможно согласование вложенных объектов:
Корзинка.item*Пп //возвращает перечень предметов из корзинки в предложном падеже.
===Методы объектов===
Строка 410 ⟶ 403 :
Пример:
location комната //создаем новую локацию
}
или
локация комната //создаем новую локацию
}
Локация может содержать в себе другие локации, уникальные и счетные объекты, мыслимые объекты. Для [[TOM: язык программирования#Элементы объекта|элементов локации]] подразумевается что они находятся в этой локации.
Строка 448 ⟶ 443 :
=====Переменные в шаблоне=====
Шаблон может включать в себя переменные различных типов.
Переменная задается специальным знаком и именем роли после знака. После имени роли переменной может быть указан аспект и лингвистический ключ.
Например:
где:
*@ - символ, указывающий тип переменной;
*Объект - имя роли переменной;
*Предмет - аспект объекта;
*ВпЕч - лингвистический ключ.
Строка 470 ⟶ 465 :
Пример:
action NoSave
}
Мышонок.NoSave( ){ %сохранение запрещено! }
Строка 489 ⟶ 485 :
Метод объекта action, имя которого совпадает с именем переменной в шаблоне, и который имеет один аргумент, совпадающий с этой же переменной, является проверкой для значений этой переменной.
action Осмотреть //создаем действие осмотреть
{
{
if (Предмет == pers)
return "ты не можешь себя
}
}
=====комбинационные проверки=====
Строка 501 ⟶ 498 :
===phrase / фраза===
phrase - специальная категория, предназначенная для описания диалоговых фраз, распознаваемых парсером.
==Предопределенные объекты==
Строка 523 ⟶ 518 :
Персонажем может быть только уникальный объект.
При старте системы значением переменной pers
====Смена персонажа====
unique главный_герой //создаем уникальный объект
{
//... описание главного героя
}
pers = главный_герой //передаем управление на новый объект
Если смена персонажа приводит к изменению текущей локации, для новой локации вызывается обработчик события OnEnter().
==Предопределенные свойства==
[[Изображение:TOM_prop.gif]]
==Специальные поля значений==
Для любого [[TOM: язык программирования#Типы данных|типа данных]] возможен доступ к дополнительным полям.
(Но не для всех типов данных эти поля имеют смысл).
===
''(только для чтения)''
Строка 557 ⟶ 543 :
Работает для всех типов данных.
===
''(только для чтения)''
Строка 569 ⟶ 555 :
===
''(только для чтения)''
Строка 579 ⟶ 565 :
===
''(только для чтения)''
Возвращает "чистый" объект без примеси количества и положения.
===
''(только для чтения)''
===
''(только для чтения)''
Строка 600 ⟶ 586 :
Для прочих значений .pos возвращает null.
==
===
Возвращает программное имя объекта.
''(только для чтения)''
===
Возвращает локацию, в которой находится объект.
Строка 615 ⟶ 601 :
===
Синтаксис: O.cls
Строка 630 ⟶ 616 :
Где: C - объект категории class.
===
Синтаксис: O.ctg
Строка 639 ⟶ 625 :
''(только для чтения)''
===
''(только для чтения)''
===
Cвойство используется для установки [[TOM: язык программирования#Шаблоны|парсерных шаблонов]] для объектов категорий action, phrase и event.
Количество шаблонов для одного объекта не ограничено.
Строка 653 ⟶ 636 :
Пример
action осмотреть //создаем действие "осмотреть"
}
===
Свойство
===
===
Сообщения парсера хранятся в предопределенных глобальных переменных.
ТОМ инициализирует их при старте, затем они могут быть переопределены в любое время. Более того, свойства с этими же именами могут быть прописаны для актера, для действия или фразы, а также для объекта.
Строка 670 ⟶ 654 :
Для парсерных сообщений зарезервированы следующие имена:
*Это сообщение парсер выводит когда введенную команду не удалось сопоставить ни с одним шаблоном действий или фраз.
> подумай о сыре
Это предложение непонятно!
*Это сообщение выводится когда в шаблоне команды указана числовая переменная, а игрок ввел слово. Например, ''первый'' вместо 1, или ''пара'' вместо 2.
> возьми несколько горошин
Необходимо указать число.
*Это сообщение выводится когда в команде использовано слово, не соответствующие ни одному объекту в игре, или написанное с ошибками.
> возьми горохи из мешка
Слово <горохи> мне неизвестно.
*Это сообщение выводится когда слово в команде стоит в форме, не соответствующей форме, заданной в шаблоне команды.
> возьми горохом из мешка
"горохом" - слово в неверной форме.
*Это сообщение выводится когда найденный парсером объект находится вне текущей локации, при том что в шаблоне команды указано его обязательное присутствие.
> осмотри филина
Филин отсутствует.
* Это сообщение выводится когда найденный парсером объект не обладает свойством, указанном в шаблоне, или не принадлежит к классу, указанному в шаблоне.
> брось крота
Дядюшка-крот не годится для этого действия.
*Это сообщение выводится в случае, если парсинг команды требует перебора вариантов, количество которых превышает разумные пределы.
*Это сообщение выводится при устранении неопределенности перед списком неоднозначно распознанных объектов:
> взять еду
Строка 710 ⟶ 694 :
сушеные горошины в траве или малина на кустах;
*Это сообщение выводится когда введенная команда распознана, но для актера не задан метод для ее выполнения.
> Крот, осмотри мешок
Побойтесь бога! Крот слеп от рождения!
*Это сообщение выводится когда введенная строка распознана как фраза, но никто из присутствующих в локации на неё не ответил.
> расскажите мне про лес!
Строка 728 ⟶ 712 :
===menu() / меню()===
===
Метод вызывается перед попыткой перемещения объекта.
В этом методе можно разместить проверки на возможность перемещения.
Если метод возвратит true - перемещение выполняется, если false - отменяется.
===
Метод вызывается перед перемещением объекта.
===
Обработчик события вызывается в случае когда персонаж, управляемый игроком, входит в локацию.
Вызов происходит после перемещения персонажа в локацию, но до события AftMoveObj( ).
Строка 744 ⟶ 728 :
Метод OnEnter( ) должен быть определен для локации, но вызывается от имени управляемого персонажа.
===
Метод вызывается после перемещения объекта.
===
Метод используется для описания фоновых действий.
После каждого хода вызывается для объекта global, локации, в которой находится pers, и для всех объектов, находящихся в той же локации что и pers, за исключением самого объекта pers.
===
Метод используется для описания фоновых действий объекта pers.
Строка 758 ⟶ 742 :
==Функции==
===Преобразование типов===
===Работа со строками===
===Прочие функции===
====rnd() / шанс()====
Синтаксис: rnd( )
* Функция возвращает логическое значение ''да'' или ''нет'' с вероятностью 50/50.
Строка 767 ⟶ 754 :
* Функция возвращает случайное число в диапазоне от 1 до X включительно.
====set() / сет()====
====input() / ввод()====
====media() / медиа()====
==Теги==
| |||