- Вывод текста
- Программирование
- Оформление
- Расширенные возможности
- Нюансы написания игр под разные плееры
-
- x AeroQSP
- Утилиты и средства разработки
Это старая версия документа.
Выражение - это набор значений, констант, переменных, функций, связанных между собой различными операциями. Программа выполняет (интерпретирует) такое выражение, вычисляя его значение.
Для изменения приоритета операций в выражении могут присутствовать круглые скобки.
[выр]
- выражение может быть как текстового, так и числового типа.[$выр]
- выражение текстового (строкового) типа (но при необходимости движок автоматически переведёт число в строку).[#выр]
- выражение числового типа (если возможно, движок автоматически переведёт строку в число).
Примечение. Символ #
использован в справке только чтобы разделить выражения произвольного и числового типов. К синтаксису QSP данный символ отношения не имеет.
Операции в выражении выполняются в порядке приоритета. Операции с одинаковым приоритетом выполняются по порядку слева направо.
Вот список операций для плееров QSP версии 5.8.0 в порядке повышения приоритета (от меньшего к большему):
OR
AND
NO
=
, <
, >
, !
, <>
, <=
, >=
, =<
, =>
(операции сравнения)OBJ
, LOC
&
(конкатенация)+
, -
(сложение, вычитание)MOD
*
, /
(умножение, деление)-
(унарный минус)([выр])
- выражения в скобкахВыражения в QSP должны удовлетворять следующим условиям:
Важно! Поскольку в QSP нет булевого типа данных, истинность или ложность выражения определяется по его числовому значению. Верным считается числовое выражение, значение которого отлично от 0
. При значении 0
выражение считается ложным. Для значения "верно" настоятельно рекомендуется использовать число 1
, т.к. операции сравнения и логические операции возращают именно это значение в случае истинности выражения.
-[#выр]
- унарный минус. Можно поставить перед числовым выражением и таким образом поменять знак этого выражения на противопложный:x = -12 *pl -x & ! выведет на экран число 12 *pl -(123*12/-10) *pl -10/-5
+
, -
, *
, /
- сложение, вычитание, умножение, деление соответственно.[#выр1] [операция] [#выр2]
:15+2*5 &! 15+2*5 = 15+10 = 25 15*2+5 &! 15*2+5 = 30+5 = 25 15*5/2 &! (15*5)/2 = 75/2 = 37 15/2*5 &! (15/2)*5 = 7*5 = 35
[#выр1] MOD [#выр2]
- остаток от деления. Это операция, которой нас учат ещё в начальной школе. Если мы вычисляем, сколько раз число делится нацело на другое число, то в результате может остаться некая неучтённая часть. Например, если мы хотим разделить 10 на 3, то число 10 нацело делится на 3 только три раза. Но 3 умножить на 3 - это 9. Значит, от десяти осталась часть, которая не делится на 3, это 1 (10 - 9 = 1). Эта часть и называется остатком от деления. Для числа 12 остаток от деления на 3 составляет ноль, поскольку двенадцать делится на 3 ровно четыре раза. Примеры:10 mod 2 & ! 10/2 = 5 -> 2*5=10 -> 10-10 = 0 -> остаток от деления 10 на 2 равен 0 10 mod 3 & ! 10/3 = 3 -> 3*3=9 -> 10-9 = 1 -> остаток от деления 10 на 3 равен 1 10 mod 4 & ! 10/4 = 2 -> 4*2=8 -> 10-8 = 2 -> остаток от деления 10 на 4 равен 2 10 mod 5 & ! 10/5 = 2 -> 5*2=10 -> 10-10 = 0 -> остаток от деления 10 на 5 равен 0 10 mod 6 & ! 10/6 = 1 -> 6*1=6 -> 10-6 = 4 -> остаток от деления 10 на 6 равен 4 10 mod 7 & ! 10/7 = 1 -> 7*1=7 -> 10-7 = 3 -> остаток от деления 10 на 7 равен 3
[выр1] = [выр2]
- операция равно. Верно, если значения рядом стоящих выражений равны. Данную операцию не стоит путать с операцией присваивания, хотя на первый взгляд они похожи. Чтобы операция равно корректно вернула значение, она должна быть записана после ключевого слова IF
, ELSEIF
, WHILE
или в первом аргументе функции IIF
, или стоять после явного оператора вывода текста вроде *PL
, или если используется с неявным оператором, быть заключённой в скобки. Примеры:! операция сравнения **равно** с явным указанием оператора перед ней: *pl 6+12 = 6*3 & ! 6+12 = 6*3 -> 18=18 -> на экране мы увидим число 1, что означает, что значения выражений равны *pl 226 = 15*15 & ! 226 = 15*15 -> 226=225 -> на экране увидим **0**, так как 226 не равно 225. ! операция сравнения **равно** с неявным оператором ('ab'+'cd' = 'abc'+'d') & ! на экране увидим 1, так как 'ab'+'cd' равно 'abc'+'d' (13*9 = 19*3) & ! на экране увидим 0, так как 13*9 не равно 19*3 ! операция сравнения в условии if x = y: *pl "Числа равны" else *pl "Числа не равны" end
[выр1] < [выр2]
- операция меньше. Верно, если значение выражения слева меньше значения выражения справа.*pl 37<56 & ! на экране будет число 1, так как 37 меньше 56 *pl 45<23 & ! на экране будет число 0, так как 45 не меньше 23 *pl 45<45 & ! на экране будет число 0, так как 45 не меньше 45 if x < y: "X меньше Y" elseif y < x: "Y меньше X" else "Числа равны" end
[выр1] > [выр2]
- операция больше. Верно, если значение выражения слева больше значения выражения справа.*pl 37>56 & ! на экране будет число 0, так как 37 не больше 56 *pl 45>23 & ! на экране будет число 1, так как 45 больше 23 *pl 45>45 & ! на экране будет число 0, так как 45 не больше 45 if x > y: "X больше Y" elseif y > x: "Y больше X" else "Числа равны" end
[выр1] ! [выр2], [выр1] <> [выр2]
- операция не равно. Верно, если значения рядом стоящих выражений не равны.! операция сравнения **равно** с явным указанием оператора перед ней: *pl 6+12 ! 6*3 & ! 6+12 = 6*3 -> 18=18 -> на экране мы увидим число 0, что означает, что значения выражений не равны *pl 226 ! 15*15 & ! 226 = 15*15 -> 226=225 -> на экране увидим **1**, так как **226** не равно **225**. ! операция сравнения **равно** с неявным оператором *pl 'ab'+'cd' <> 'abc'+'d' & ! на экране увидим 0, так как 'ab'+'cd' равно 'abc'+'d' *pl 13*9 <> 19*3 & ! на экране увидим 1, так как 13*9 равно 19*3 ! операция сравнения в условии if x <> y: *pl "Числа не равны" else *pl "Числа равны" endПримечание. Во избежание путаницы с оператором комментария
!
лучше не использовать для записи операции не равно восклицательный знак.[выр1] <= [выр2], [выр1] =< [выр2]
- операция меньше либо равно. Верно, если значение выражения слева меньше или равно значению выражения справа.*pl 37<=56 & ! на экране будет число 1, так как 37 меньше 56 *pl 45<=23 & ! на экране будет число 0, так как 45 не меньше и не равно 23 *pl 45<=45 & ! на экране будет число 1, так как 45 равно 45 if x <= y: "X меньше либо равно Y" else "Y меньше X" endПримечание. Запись
=>
редко применяется в других языках программирования, поэтому рекомендуем не привыкать к её использованию, хотя в QSP это ошибкой не будет.[выр1] >= [выр2], [выр1] => [выр2]
- операция больше либо равно. Верно, если значение выражения слева больше или равно значению выражения справа.*pl 37>=56 & ! на экране будет число 0, так как 37 не больше и не равно 56 *pl 45>=23 & ! на экране будет число 1, так как 45 больше 23 *pl 45>=45 & ! на экране будет число 1, так как 45 равно 45 if x >= y: "X больше либо равно Y" else "Y больше X" endПримечание. Запись
=>
редко применяется в других языках программирования, поэтому рекомендуем не привыкать к её использованию, хотя в QSP это ошибкой не будет.OBJ [$выр]
- операция проверки наличия предмета в Инвентаре. Верно, если в Окне предметов есть предмет с названием [$выр]
.addobj "Отвёртка" *pl obj "Отвёртка" & ! на экране будет число 1, так как предмет **Отвёртка** есть в окне предметов *pl obj "Апельсин" &! на экране будет число 0, так как предмета **Апельсин** нет в окне предметов if obj "Отвёртка": *pl "У вас есть отвёртка." else *pl "У вас нет отвёртки." end
LOC [$выр]
- операция проверки наличия локации в игре. Верно, если в игре есть локация с названием [$выр]
.! в игре создана локация "Густая чаща" *pl loc "Густая чаща" & ! на экране мы увидим число 1 if loc "Дом": *pl "Вы можете войти в дом." else *pl "Вы не можете войти в дом." end
NO [#выр]
- операция отрицания, логическое отрицание, или логическая инверсия. Если [#выр]
верно, операция возвращает 0, а если [#выр]
не верно, операция возвращает 1. Примеры:*pl no 1 & ! на экране увидим 0, так как 1 соответвует верному выражению *pl no 7 & ! на экране увидим 0, так как 7 соответвует верному выражению *pl no 0 & ! на экране увидим 1, так как 0 соответствует неверному выражению addobj "Отвёртка" if no obj "Отвёртка": "У вас нет отвёртки." else "У вас есть отвёртка." end
[#выр1] OR [#выр2]
- операция логического "или". Всё выражение верно, если хотя бы одна из его частей верна: [#выр1]
или [#выр2]
. Примеры:*pl 1 or 1 & ! на экране увидим 1, так как обе части выражения равны 1 *pl 1 or 0 & ! на экране увидим 1, так как левая часть равна 1 *pl 0 or 1 & ! на экране увидим 1, так как правая часть равна 1 *pl 0 or 0 & ! на экране увидим 0, так как обе части выражения равны 0 ! обе части выражения верны, значит и всё выражение верно (2=2) or (3<>2) & ! выражение вернёт 1 (правда) ! одна часть выражения верна, значит всё выражение верно (2<>2) or (3<>2) & ! выражение вернёт 1 (правда) ! обе части выражения не верны, значит и всё выражение не верно (2<>2) or (3=2) & ! выражение вернёт 0 (ложь)Если
[#выр1]
верно, значение [#выр2]
не вычисляется.[#выр1] AND [#выр2]
- операция побитового "и". Всё выражение верно, только если обе его части верны: и [#выр1]
, и [#выр2]
. Примеры:*pl 1 and 1 & ! на экране увидим 1, так как обе части выражения равны 1 *pl 1 and 0 & ! на экране увидим 0, так как только левая часть равна 1 *pl 0 and 1 & ! на экране увидим 0, так как только правая часть равна 1 *pl 0 and 0 & ! на экране увидим 0, так как обе части выражения равны 0 ! обе части выражения верны, значит и всё выражение верно (2=2) and (3<>2) & ! выражение вернёт 1 (правда) ! одна часть выражения не верна, значит всё выражение неверно (2<>2) and (3<>2) & ! выражение вернёт 0 (ложь) ! обе части выражения не верны, значит и всё выражение не верно (2<>2) and (3=2) & ! выражение вернёт 0 (ложь)Если
[#выр1]
не верно, значение [#выр2]
не вычисляется.[$выр1] & [$выр2]
- операция объединения строковых выражений. Подробнее см. Строки. Не путайте с символом перечисления команд. Примеры:! в данном случае на экран будут последовательно выведены строки "26" и "27" "26" & "27" ! в данном случае на экран будет выведена строка "2627" ("26" & "27")Во избежание путаницы, для объединения строк используйте операцию
+
, она работает точно так же.[$выр1] + [$выр2]
- операция объединения строковых выражений. Подробнее см. Строки. Примеры:! в данном случае на экран будет выведена строка "2627" "26" + "27"
x=5 y=6 (x ! y) OR (x <> y) &! Результат 1 x OR y &! Результат 1 x AND y &! Результат 1 y MOD x &! 6/5 -> остаток 1 Результат 1 OBJ 'стул' &! Если в инвентаре есть предмет 'стул', то результат 1, если нет, то 0 LOC 'дом' &! Если в игре есть локация 'дом', то результат 1, если нет, то 0 res = x*y + y*-x/2 &! (5*6) + (6*(-5)/2)=15 -> в res запишется число 15 res = NO x = y &! NO 5 = 6 -> NO 0 -> в res запишется число 1
[:sokraschennye_operacii_s_prisvoeniem]
Помимо обыкновенной операции присваивания в QSP существуют так же совмещённые математические операции с присваиванием.
+=
— операция "сложение с присваиванием", сочетающая в себе операции присваивания и сложения. Прибавляет к текущему значению переменной указанное значение. Общая запись:имя_переменной+=[выражение]Эквивалентно конструкции:
имя_переменной=имя имя_переменной+[выражение]Пример:
! мы заменяем две операции: присвоения и сложения warrior=warrior+15 ! на одну (действие аналогично) warrior+=15Примечание: данную операцию можно использовать и для склейки строк. При этом строка "приклеивается в конец уже существующей строки":
$text='Вечное слово в остывшей' $text+=' золе...'
-=
— операция "вычитание с присваиванием", сочетающая в себе операции присваивания и вычитания. Вычитает из текущего значения переменной указанное значение. Общая запись:имя_переменной-=[#выражение]Эквивалентно конструкции:
имя_переменной=имя имя_переменной-[#выражение]Пример:
! мы заменяем две операции: присвоения и вычитания warrior=warrior-15 ! на одну (действие аналогично) warrior-=15
/=
— операция "деление с присваиванием", сочетающая в себе операции присваивания и деления. Делит текущее значение переменной на указанное значение. Общая запись:имя_переменной/=[#выражение]Эквивалентно конструкции:
имя_переменной=имя имя_переменной/[#выражение]Пример:
! мы заменяем две операции: присвоения и деления warrior=warrior/2 ! на одну (действие аналогично) warrior/=2
*=
— операция "умножение с присваиванием", сочетающая в себе операции присваивания и умножения. Умножает текущее значение переменной на указанное значение. Общая запись:имя_переменной*=[#выражение]Эквивалентно конструкции:
имя_переменной=имя имя_переменной*[#выражение]Пример:
! мы заменяем две операции: присвоения и умножения warrior=warrior*2 ! на одну (действие аналогично) warrior*=2