- Вывод текста
- Программирование
- Оформление
- Расширенные возможности
- Нюансы написания игр под разные плееры
-
- x AeroQSP
- Утилиты и средства разработки
Это старая версия документа.
5) Перед интерпретированием строки происходит удаление пробелов и символов табуляции в её начале, поэтому можете форматировать код локации.
6) В названиях действий и предметов не важен регистр букв, т.е. "ДеньГи" и "деньги" - одна и та же локация.
7) Операторы разделяются либо символом "&", либо символом переноса строки. Пример: test = 65 d=8 & goto 'PPP'
8) Максимальный индекс элемента массива - 2147483647. Не рекомендуется использовать большие индексы.
11) Не обязательно записывать операторы / выражения в одной строке. Чтобы перейти на другую строку, нужно лишь в конце строки дописать " _" (пробел и символ подчёркивания). Строки
if a<5 and n-b>4+5+h/7*2 or t=4: p 'TTTTTTTTT' & cla & $f='Text Variable' & goto 'FFFF'и
if a<5 and n-b> _ 4+5+h/7*2 or _ t=4: p 'TTTTTTTTT' _ & cla & $f='Text Variable' _ & goto 'FFFF'ЭКВИВАЛЕНТНЫ, т.е. воспринимаются движком одинаково.
PS:
1) Группа строк, разделённых " _", считается ОДНОЙ строкой (сообщения об ошибках также выводятся с учётом того, что это одна строка).
2) После "OR" стоит не один, а ДВА пробела - первый пробел воспринимается движком как пробел, а второй - как часть " _". Это сделано для того, чтобы движок правильно обрабатывал операцию "OR" - не как "4+5+h/7*2 ort=4", а как "4+5+h/7*2 or t=4".
PS: При использовании операторов "KILLALL, KILLVAR" удаляются также все системные переменные.
Числовая константа записывается числом (например, 4535), а текстовая берётся с двух сторон в кавычки. Кавычками могут быть либо апострофы ('), либо прямые кавычки ("). Две подряд идущие кавычки считаются кавычкой, включённой в текстовую константу. Т.е. после выполнения строк
*PL 'Byte Softs QSP'
*PL "Byte Soft's ""QSP"""
вы увидите строки
Byte Soft's QSP
Byte Soft's "QSP"
Существует возможность использования преформатированных текстовых констант. Для таких констант сохраняются переносы строк и отступы. Примеры:
'Данный текст
будет расположен на
нескольких строках'
$a='И этот
текст
также'
a=2 & act 'Многострочное
название':gt 'next'
PS:
Строки, содержащие преформатированную текстовую константу, считаются ОДНОЙ строкой (сообщения об ошибках также выводятся с учётом того, что это одна строка).
В зависимости от результата вычисления выражения могут быть либо строковыми, либо числовыми.
Примеры числовых выражений:
3+4*3*4
(val('25')*4)/(2*5)
был_в_комнате = 0
$был_в_комнате = 'нет'
1 AND 1 OR 0
A=B AND (C<>D OR 2=E+3)
$str1 = $str2 AND $str2 <> $str3
Примеры строковых выражений:
'строка'
"проверка"
"преформатированная
текстовая
константа"
mid("строка",1,2)
$VAR
$VAR + ' строка '
Складывать с помощью "+" можно не только числа (значения числовых выражений), но и объединять текстовые константы (значения строковых выражений). Также для объединения строковых значений можно использовать символ "&", при этом такое объединение должно быть заключено в скобки. Например,
*PL 'The '+'door '+'is closed.'
и
*PL ('The '&'door '&'is closed.')
выведут одно и то же: "The door is closed.".
Возможна ЛЮБАЯ комбинация констант, переменных, функций.
При вычислении значений выражений движок (по возможности) конвертирует типы данных автоматически.
В строковые константы, в базовые описания локаций и названия базовых действий существует возможность вставлять значения выражений.
Такие "подвыражения" должны находиться между двойных угловых скобок: "«" и "»", до и после которых может идти любой текст, включая подобные "подвыражения".
Например, вместо оператора
pl 'i='+str(i)
можно написать
pl 'i=«i»'
Ещё примеры:
число_гоблинов=5
'Тебя окружили «число_гоблинов» гоблинов!'
pl 'Вас зовут «$PlayerName», вы находитесь в «$curloc».'
Примеры использования вложенных "подвыражений":
pl val('«val("«i»")»«j»')
pl val('«str(val("«i»"))»')
Так как "подвыражения" вычисляются внутри строковых констант, то для вычисления вложенного "подвыражения" необходимо присутствие вложенной строковой константы.
PS:
Смотрите раздел "Использование массивов" этой части документации, чтобы получить дополнительную информацию о возможных выражениях.
Оператор - ключевое слово, выполняющее какое-либо действие. Оператор может иметь аргументы (параметры), необходимые для выполнения. Аргументы операторов задаются выражениями. Операторы не возвращают результат выполнения.
Пример вызова оператора:
ADDOBJ 'ключ','pics/key.png'
Здесь "ADDOBJ" - название оператора, а 'ключ' и 'pics/key.png' - аргументы оператора.
Вызов оператора также может быть записан со скобками:
ADDOBJ ('ключ','pics/key.png')
PL ('текст')
CLEAR()
Базовые операторы языка QSP
! - оператор комментария. То, что находится в данной строке после оператора комментария, и до конца строки игнорируется интерпретатором. Оператор комментария позволяет "закомментировать" (выключить) ненужный временно оператор / функцию во время отладки игры. Кроме того, написание комментариев к коду программы является одним из признаков хорошего стиля программирования.
В операторе комментария поддерживаются преформатированные строки. Примеры:
! это комментарий без преформатированных строк
!"а этот комментарий
содержит преформатированную
строку"
!"
и этот
тоже
"
a = 3 & ! а также 'вот
этот'
DYNAMIC [$строка кода],[параметр 1],[параметр 2], … - выполнение кода. Данный оператор позволяет динамически генерировать код игры. Переданные параметры хранятся в массиве ARGS. После выполнения кода предыдущие значения ARGS восстанавливаются. Примеры:
DYNAMIC '$a="string«$b»"'
DYNAMIC '$a'
DYNAMIC 'if $a="string":
text!'''
DYNAMIC "
$args[0]
addobj $args[1]
",'Текст','Вилка'
Функции Top Previous Next Функция - ключевое слово, выполняющее какое-либо действие, учитывая свои аргументы (параметры) и возвращающее результат. Аргументы функций задаются выражениями.
Пример вызова функции: MAX(1,2,4) Здесь "MAX" - название функции, а 1, 2 и 4 - аргументы функции. При вызове функций без аргументов или с одним аргументом скобки можно не записывать: A=RAND 4 B=COUNTOBJ Перед функциями, которые могут возвращать строковые значения, можно ставить символ "$". Т.е, к примеру, можно написать "pl str(43)" или "pl $str(43)". Эта возможность настоятельно рекомендуется к использованию, так как улучшает читаемость кода.
Базовые функции языка QSP CURLOC - возвращает название текущей локации. RAND([#выражение 1],[#выражение 2]) - возвращает случайное число между числами [#выражение 1] и [#выражение 2]. Параметр [#выражение 2] может отсутствовать, при этом он принимается равным 0. RND - возвращает случайное значение от 1 до 1000. MAX([выражение 1],[выражение 2], …) - возвращает максимальное из значений выражений-аргументов. Если передан один аргумент, то считается, что указано имя массива - в этом случае поиск максимального элемента происходит среди строковых (если название массива указано со знаком "$") или среди числовых значений элементов массива. Например: MAX(1,2,5,2,0) - вернёт 5 MAX(a,b,c) - вернёт максимальное из значений переменных MAX('aa','ab','zz') - вернёт 'zz' MAX('a') - вернёт максимальное из числовых значений элементов массива "A" MAX('$b') - вернёт максимальное из строковых значений элементов массива "B"
MIN([выражение 1],[выражение 2], …) - возвращает минимальное из значений выражений-аргументов. Если передан один аргумент, то считается, что указано имя массива - в этом случае поиск минимального элемента происходит среди строковых (если название массива указано со знаком "$") или среди числовых значений элементов массива. IIF([#выражение],[выражение_да],[выражение_нет]) - возвращает значение выражения [выражение_да], если [#выражение] верно, иначе значение выражения [выражение_нет].
QSPVER - возвращает версию интерпретатора в формате "X.Y.Z". FUNC([$выражение],[параметр 1],[параметр 2], …) - обработка локации с названием [$выражение]. Указанные параметры передаются в массиве ARGS. Результат функции равен значению $RESULT при возврате строкового значения или RESULT при возврате числового значения. Если при обработке локации были установлены и RESULT, и $RESULT, то предпочтение отдаётся строковому значению. После обработки локации предыдущие значения ARGS и RESULT восстанавливаются. Примеры: PL 4 + FUNC('функция') - обработка локации "функция" как функции. Массив ARGS пуст. Результат передается через $RESULT или RESULT, в зависимости от кода обрабатываемой локации. PL FUNC($name, 1) * 78 - обработка локации с названием в $name как функции. ARGS[0] равен 1. MSG "text" + FUNC($name, "строка", 2) - обработка локации с названием в $name как функции. $ARGS[0] содержит строку "строка", ARGS[1] равен 2. DYNEVAL([$выражение],[параметр 1],[параметр 2], …) - возвращает значение указанного выражения. Функция позволяет вычислять значения динамически сгенерированных выражений. Указанные параметры передаются в массиве ARGS, а после вычисления выражения предыдущие значения ARGS восстанавливаются. Примеры: DYNEVAL('3+4') PL DYNEVAL('mid("abcd",2,1)+"qwerty"') PL DYNEVAL($test + ' + val("«$test»")') проход=DYNEVAL(" $args[0] <> 'текст' ", 'строка')
Системные переменные Системные переменные - переменные, значения которых обрабатываются интерпретатором специальным образом. Системные переменные используются как обычные переменные, т.е. в них можно заносить и считывать из них значения (правда стоит помнить, что в результате вы можете получить, например, чёрный цвет текста на чёрном же фоне - и ничего не будет видно).
Базовые системные переменные - основные переменные. Переменные, задающие обработчики событий - позволяют обрабатывать такие события, как выбор предмета, переход на новую локацию, ввод строки в поле ввода… Переменные настройки интерфейса - позволяют настраивать цвета, шрифт, а также использовать в описаниях HTML.