Здесь показаны различия между двумя версиями данной страницы.
Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
help:dummy [2013/10/15 19:56] newsash |
— (текущий) | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | 5) Перед интерпретированием строки происходит удаление пробелов и символов табуляции в её начале, поэтому можете форматировать код локации. | ||
- | 6) В названиях действий и предметов не важен регистр букв, т.е. "ДеньГи" и "деньги" - одна и та же локация. | ||
- | |||
- | 7) Операторы разделяются либо символом "&", либо символом переноса строки. Пример: | ||
- | test = 65 | ||
- | d=8 & goto 'PPP' | ||
- | |||
- | 8) Максимальный индекс элемента массива - 2147483647. Не рекомендуется использовать большие индексы. | ||
- | |||
- | 11) Не обязательно записывать операторы / выражения в одной строке. Чтобы перейти на другую строку, нужно лишь в конце строки дописать " _" (пробел и символ подчёркивания). Строки | ||
- | |||
- | <sxh qsp> | ||
- | if a<5 and n-b>4+5+h/7*2 or t=4: p 'TTTTTTTTT' & cla & $f='Text Variable' & goto 'FFFF' | ||
- | </sxh> | ||
- | и | ||
- | <sxh qsp> | ||
- | if a<5 and n-b> _ | ||
- | 4+5+h/7*2 or _ | ||
- | t=4: p 'TTTTTTTTT' _ | ||
- | & cla & $f='Text Variable' _ | ||
- | & goto 'FFFF' | ||
- | </sxh> | ||
- | ЭКВИВАЛЕНТНЫ, т.е. воспринимаются движком одинаково. | ||
- | |||
- | 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 Soft''s 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 | ||
- | SET [название переменной]=[выражение], LET [название переменной]=[выражение] или [название переменной]=[выражение] - установка значения переменной. Если нужно установить текстовое значение переменной, то перед её названием ставится "$". | ||
- | |||
- | Примеры: | ||
- | SET A=123 | ||
- | SET $B='строка' | ||
- | LET C=A | ||
- | D=456 | ||
- | $D='ещё строка' | ||
- | $D='и ещё | ||
- | одна | ||
- | строка' | ||
- | |||
- | Функции | ||
- | 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. |