- Вывод текста
- Программирование
- Оформление
- Расширенные возможности
- Нюансы написания игр под разные плееры
-
- x AeroQSP
- Утилиты и средства разработки
Это старая версия документа.
Выполнение кода в плеере QSP происходит последовательно, команда за командой, сверху вниз и слева направо:
*pl "Первая команда" *pl "Вторая команда" *pl "Третья команда" *pl "Четвёртая команда" & *pl "Пятая команда" & *pl "Шестая команда"
Все команды в QSP составляются по общим принципам:
{оператор} [значение 1], [значение 2], ..., [значение 18]
Здесь вместо {оператор}
может и должен стоять любой оператор QSP из тех, что перечислены в разделе "Ключевые слова. Операторы". Если в команде нет {оператор}
, значит на самом деле на этом месте подразумевается неявный оператор.
! здесь используются явные операторы: *pl "Ехал Грека Через Реку" addobj "Рак" ! а здесь имеет место неявный оператор: 137+294 func('pow',3,3)
В качестве значений [значение 1]
, [значение 2]
, … ,[значение 18]
могут выступать строковые или числовые константы, переменные, значения функций, или целые выражения, а число таких значений зависит от назначения оператора. Например, для оператора *PL
может быть указано лишь одно значение, а для оператора ADDOBJ
от одного до трёх таких значений. Сами значения перечисляются через запятую.
*pl "Три в кубе это "+func('pow',3,3)+". Да, серьёзно. А ты не верил?"
Если необходимо, то для удобства чтения кода значения для операторов можно (но не обязательно) помещать в круглые скобки:
pl("Строка текста") addobj("Отвёртка","img/screwdriver.png",3)
Внимание! В одной команде не может быть более одного оператора! Равно так же не может быть команды совсем без оператора. Если в вашей команде нет оператора, то вы имеете дело с неявным оператором
.
Операция присваивания предполагает, что перед именем переменной стоит оператор SET
, хотя обычно этот оператор опускают, то есть его тоже можно назвать "неявным":
[имя_переменной] = [значение]
Здесь =
— это операция присваивания. Не путайте с операцией сравнения равно.
Вот несколько правил и рекомендаций для корректного написания кода:
*p "<table width=240>" *p "<tr>" *p "<td>Имя:</td>" *p "<td>" *p $name *p "</td>" *p "</tr>" *p "<tr>" *p "<td>возраст:</td>" *p "<td>" *p age *p "</td>" *p "</tr>" *p "</table>"
яблоко = 1 груша = 1 *pl 'Яблок' + яблоко *pl 'Груш' + груша
яблоко+=1 & *pl "У меня есть <<яблоко>> яблок." & яблоко_взял=1Без необходимости так делать не рекомендуется, поскольку это ухудшает читаемость кода, а так же повышает вероятность допустить баг. Подобное перечисление команд уместно в гиперссылках:
*pl '<a href="EXEC: яблоко += 1 & GT $CURLOC">яблоко</a>'В данном случае при нажатии на ссылку выполнится код:
яблоко += 1 GT $CURLOC
IF яблоки=0 : ADDOBJ 'Яблоко' яблоки = 1 END
Чтобы следующая строка считалась частью текущей, нужно в конце текущей строки дописать _
(пробел и символ подчёркивания):
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'Вместо разбиения строки рекомендуется видоизменить код так, чтобы разбивать строку не требовалось.
!
служит для комментирования кода и позволяет оставлять "заметки на полях", которые помогут впоследствии ориентироваться в коде. Всё, что следует за оператором комментария, плеер игнорирует.
Поскольку !
— это оператор (не путайте с операцией не равно), если вы пишете его на одной строке с другими командами, нужно обязательно ставить разделитель &
(амперсанд) между последней командой и оператором комментария:
<sxh qsp>
! это комментарий в отдельной строке
яблоки = 0 & ! а это комментарий в строке с командой
</sxh>
Так как весь текст после оператора комментария будет проигнорирован плеером, комментарий надо ставить всегда самым последним в строке из нескольких команд:
<sxh qsp>
! комментарий. Следующие команды не работают: & *pl "Первая команда" & *pl "вторая команда"
*pl "Эта команда работает" & ! а остальные нет & *pl "вторая команда" & *pl "третья команда"
*pl "Эта команда работает" & *pl "и эта работает" & ! а последняя нет & *pl "третья команда"
*pl "Все три" & *pl " команды" & *pl "работают" & ! а это комментарий
</sxh>
Комментарии бывают двух видов: однострочные и многострочные.
* Однострочный комментарий начинается от оператора комментария и заканчивается с концом строки:<sxh qsp>
! Однострочный комментарий
! и это однострочный комментарий
яблоки = 0 & ! и это однострочный комментарий
</sxh>
* Многострочный комментарий так же начинается от оператора комментария и заканчивается с концом строки, однако при использовании кавычек (" "
), апострофов (' '
) или фигурных скобок, он может захватывать так же и те строки, что размещены внутри кавычек, апсотрофов или фигурных скобок:<sxh qsp>
!'Многострочный
комментарий в апострофах'
яблоки = 1
сыр = 5 & ! А здесь "комментарий начинается
в той же строке, но" заканчивается 'сильно
позже'. Во всём виноваты {кавычки и скобки
}Кстати:
яблоки=0
!'Комментарии рекомендуется писать всё-таки
в отдельных строках, а не как бутерброд с "сыром"'
</sxh>
===== Запись констант =====
Константами в QSP можно назвать конкретные числовые или строковые значения. В следующем примере для операторов вывода текста указаны конкретные значения, это и есть константы:
<sxh qsp>
! вывод на экран числа 137. Можно назвать это число константой.
*pl 137
! вывод на экран строки текста. Эту строку можно назвать константой
*pl "На окошке крошку-мошку ловко ловит лапой кошка"
</sxh>
Для записи числовых констант (чисел) используются символы цифр без дополнительных обозначений:
<sxh qsp>
x = 145 & ! 145 здесь - константа
(137+299*2)/11-19 & ! целое выражение из числовых констант
</sxh>
Для записи строковых констант (строк) используются символы, отмечающие начало и конец такой строковой константы. Можно использовать кавычки (" "
), апострофы (' '
), или фигурные скобки ({ }
):
<sxh qsp>
*pl "Это строковая константа"
*pl 'И это строковая константа'
*pl {И даже это}
</sxh>
Более подробно о правилах записи строк в QSP можно почитать в разделе "Строки".
===== Операторы и функции =====
[:operatory_i_funkcii]
Оператор - ключевое слово (команда) языка QSP, выполняющее какое-либо действие. Оператор может иметь параметры (аргументы), которые задаются выражениями. Операторы не возвращают результат выполнения.
Как правило, операторы меняют состояние игры.
Каждая команда QSP содержит один оператор и его аргументы (параметры). Если вы написали команду без оператора, то в ней обязательно присутствует неявный оператор.
<sxh qsp>
!Примеры вызовов операторов:
ADDOBJ 'ключ','pics/key.png'
ADDOBJ ('ключ','pics/key.png')
PL ('текст')
CLEAR()
</sxh>
Функция - ключевое слово, которое используется для того, чтобы получить какое-либо значение. Например, сколько предметов игрок несёт в рюкзаке. Для этого, в коде мы указываем функцию, и необходимые для расчёта параметры (аргументы функции). Результат, "посчитанный" этой функцией, подставляется на её место в выражении. На языке программистов это звучит так:
"мы вызвали функцию, и функция вернула нам значение".
Как правило, при вызове функции состояние игры не меняется. Примеры вызовов функций:
<sxh qsp>
maximum = MAX(1, 2, 4)
случайное_число = RAND(4)
предметов_в_рюкзаке = COUNTOBJ
PL $STR(43)
</sxh>
В одной команде может быть вызвано несколько функций:
<sxh qsp>
*pl "Случайный предмет: "+$getobj(rand(1,countobj))
bcolor=rgb(func('hex_in_dec','ff'),func('hex_in_dec','34'),func('hex_in_dec','67'))
</sxh>
При использовании функций, возвращающих текстовое значение, настоятельно рекомендуется прописывать перед именем функции символ '$' для улучшения читаемости кода.
Максимальное число аргументов для операторов и функций в QSP: 20.
===== Базовые функции =====
[:bazovye_funkcii]
* $QSPVER
- возвращает версию библиотеки плеера в формате "X.Y.Z". Пример:<sxh qsp>
if $QSPVER<'5.8.0':
*pl "Ваша версия плеера не подходит для данной игры. Установите плеер версии 5.8.0."
end
</sxh>
* $CURLOC
- возвращает название текущей локации.
==== Математические функции ====
* RAND([#выр1],[#выр2]) - возвращает случайное число между числами [#выр] и [#выр2]. Параметр [#выр2] может отсутствовать, при этом он принимается равным единице (1). Примеры:<sxh qsp>
RAND(1,4) & ! вернёт случайное значение от 1 до 4
RAND(4,1) & ! вернёт случайное значение от 1 до 4
RAND(1000) & ! вернёт случайное значение от 1 до 1000
RAND 1000 & ! вернёт случайное значение от 1 до 1000
</sxh>
* RND
- возвращает случайное значение от 1 до 1000.
* MAX([выр1],[выр2], …) - возвращает максимальное из значений выражений-аргументов. Если передан один аргумент, то считается, что указано имя массива:<sxh qsp>
MAX(1,2,5,2,0) &! вернёт 5
MAX(a,b,c) &! вернёт максимальное из значений переменных a,b,c
MAX('aa','ab','zz') &! вернёт 'zz'
MAX('a') &! вернёт максимальное из числовых значений элементов массива "a"
MAX('$b') &! вернёт максимальное из текстовых значений элементов массива "$b"
</sxh>
* MIN([выр1],[выр2], …)** - возвращает минимальное из значений выражений-аргументов. Если передан один аргумент, то считается, что указано имя массива:MIN(1,2,5,2,0) &! вернёт 0 MIN(a,b,c) &! вернёт минимальное из значений переменных a,b,c MIN('aa','ab','zz') &! вернёт 'aa' MIN('a') &! вернёт минимальное из числовых значений элементов массива "a" MIN('$b') &! вернёт минимальное из текстовых значений элементов массива "$b"