Инструменты пользователя

Инструменты сайта


help:conditional

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:conditional [2015/04/12 07:09]
123.139.156.66 старая ревизия восстановлена (2013/10/20 02:32)
help:conditional [2024/12/01 10:35] (текущий)
aleks_versus
Строка 1: Строка 1:
- insurance needs <a href="http://cheapautoinsurancebyzip.info/cheap-auto-insurance-alabama.html">auto insurance qoutes Alabama</ahim steer clear <a href="http://​myautoinsurancequote.us/​auto-insurance-quote-louisiana.html">New Orleans auto insurance</apolicy guidelines ​<a href="http://autoinsurancequotesmi.us">Michigan car insurance quotes</aask abut more blood <a href="http://cialisdm.com">purchase cialis online</​a> ​ticketed most important ​<a href="http://mycarinsurancequotes.xyz">auto insurance</auncover+[[help:​tuples|Назад:​ Кортежи]] 
 + 
 +====== Условия ====== 
 + 
 +Условия — это такие особые конструкции в **QSP**, которые позволят сделать вашу игру по настоящему интерактивной. Они позволяют разветвлять события,​ происходящие в игре в зависимости от уже сложившихся условий,​ и таким образом вносить разнообразие в игровой процесс. Операторы,​ которые используются в конструкциях условий,​ в программировании называются **операторами ветвления**. 
 + 
 +===== Операторы условий ===== 
 + 
 +  * ''​%%IF%%''​ — основной оператор для записи конструкций условий. Конструкции,​ записываемые с помощью этого оператора (назовём их "​простыми условиями"​),​ имеют две формы: однострочную и многострочную,​ — и в общем виде выглядят так: ​<sxh qsp> 
 +! однострочная форма записи 
 +IF [#​выражение]:​ {команда 1} & {команда 2} & … 
 +! многострочная форма записи 
 +IF [#​выражение]:​ 
 +  {команда 1} 
 +  {команда 2} 
 +  … 
 +END 
 +</​sxh>​ В данном случае,​ если верно условие ''​[#​выражение]'',​ выполняются команды ''​{команда 1}'',​ ''​{команда 2}''​ и т.д. Для однострочной формы записи это будут только те команды,​ которые идут в той же строке,​ что и оператор ''​IF''​ до конца строки;​ а для многострочной формы записи это будут те команды,​ которые идут в последующих строках после двоеточия и до специального ключевого слова ''​END''​. 
 +    * В качестве условия могут выступать операции сравнения,​ логические операции и иные выражения,​ возвращающие числовые значения. 
 +    * Ключевое слово ''​%%END%%''​ при многострочной форме записи должно стоять отдельной строкой. 
 +    * Если условие ''​%%[#​выражение]%%''​ не верно, команды выполнены не будут. 
 +    * Примеры однострочной формы записи условий:​ <sxh qsp> 
 +! если сумма ​и b равна двум, 
 +! переменной c присваивается значение 30 
 +if a+b=2: c=30 
 +! Если в инвентаре нет апельсина,​ выводится текст 
 +if no obj "​Апельсин": ​pl "У Вас нет апельсина."​ 
 +! это тоже простая однострочная форма 
 +if ((a+b)/c)=45+54 or (b<5 or c>45) and no obj '​лопата'​ and $f=$vvv+'​RRRRR':​ p '​OK'​ & goto '​Next'​ 
 +</sxh> 
 +    * Примеры многострочной формы записи условий:​ <sxh qsp> 
 +if библиотека = 0: 
 +  узнал_о_тусовке = 0 
 +  библиотека_вернулся = 1 
 +  gt '​библиотека'​ 
 +end 
 +if a+b=2: 
 +  c=30 
 +end 
 +</sxh>  
 +    * **Обратите внимание!!!** При многострочной форме записи после двоеточия в той же строке,​ в какой находится оператор ''​%%IF%%'',​ не должны идти никакие команды,​ иначе плеер посчитает такой оператор условия однострочным,​ и команды в последующих строках будут выполняться в любом случае,​ независимо от того, верным окажется условие или нет. Пример такой ошибочной записи:​ <sxh qsp> 
 +if библиотека = 0: узнал_о_тусовке = 0 
 +  библиотека_вернулся = 1 &! эта строчка будет выполняться в независимости от верности условия 
 +  gt '​библиотека'​ &! и эта 
 +end &! ключевое слово end просто игнорируется 
 +</​sxh>​ 
 +  * ''​%%ELSE%%''​ — ключевое слово, использующееся совместно с оператором ''​%%IF%%'',​ и которое служит для предоставления альтернативы,​ если условие не выполненоКлючевое слово ''​%%ELSE%%''​ так же имеет две формы записи:​ однострочную и многострочную. Многострочную форму записи ''​%%ELSE%%''​ можно использовать только в многострочной конструкции оператора ''​%%IF%%'',​ тогда как однострочную форму записи можно использовать как в однострочной,​ так и в многострочной,​ конструкции оператора ''​%%IF%%''​. Общая форма записи:​ <sxh qsp> 
 +! однострочная форма записи 
 +IF [#​выражение]:​ {команда д1} & {команда д2} & … ELSE {команда н1} & {команда н2} & … 
 + 
 +! в многострочном IF 
 +! многострочная форма ELSE 
 +IF [#​выражение]:​ 
 +    {команда д1} 
 +    {команда д2} 
 +    ... 
 +ELSE 
 +    {команда н1} 
 +    {команда н2} 
 +    ... 
 +END 
 +! однострочная форма ELSE 
 +IF [#​выражение]:​ 
 +    {команда д1} 
 +    {команда д2} 
 +    ... 
 +ELSE {команда н1} & {команда н2} & ... 
 +    ! команды в следующих строках 
 +    ! до END игнорируются 
 +END 
 +</sxhЗдесь, если условие''​[#​выражение]''​ верно, выполняются команды от двоеточия до ключевого слова ''​ELSE'',​ а если условие ''​[#​выражение]''​ не верно, выполняются команды от ключевого слова ''​ELSE''​ и до конца конструкции условия. 
 +    * После ''​%%ELSE%%''​ можно ставить,​ а можно не ставить двоеточие. 
 +    * При однострочной форме записи:​ 
 +      * и команды и ключевое слово ''​%%ELSE%%''​ должны быть записаны в одной строке 
 +      * окончанием альтернативного списка команд является конец строки. 
 +      * если однострочная форма записи ''​%%ELSE%%''​ используется в многострочной форме записи ''​%%IF%%'',​ все команды,​ которые идут в последующих строках после ''​%%ELSE%%''​ до ''​%%END%%''​ игнорируются. 
 +      * Примеры однострочной записи: ​<sxh qsp> 
 +! если сумма a и b равна двум, переменной c присваивается значение 30 
 +! в противном случае (то есть если сумма a и b не равна двум) 
 +! переменной c присваивается значение 10 
 +if a+b=2: c=30 else c=10 
 +! в зависимости от того есть ли в инвентаре апельсин 
 +! выводится соответствующий текст 
 +if obj "​Апельсин": ​pl "У Вас есть апельсин." else pl "У Вас нет апельсина." 
 +! однострочная форма else внутри многострочной if 
 +if $левая_рука = '​Великий меч':​ 
 +    gosub '​atack',​ 300 
 +    gosub '​health.prove'​ 
 +    gosub '​win.prove'​ 
 +else gosub '​atack',​ atack_power 
 +end 
 +</sxh> 
 +    * При многострочной форме записи:​ 
 +      * все команды должны идти в последующих строках после ''​%%ELSE%%'';​ 
 +      * Примеры многострочной записи: ​<sxh qsp> 
 +if a+b=2: 
 +  c=30 
 +else 
 +  c=10 
 +end 
 +if obj "​Апельсин": 
 +  pl "У Вас есть апельсин."​ 
 +else 
 +  pl "У Вас нет апельсина."​ 
 +end 
 +if len($curtoken) > 0: 
 +  $tokens[curtoken_num] = $curtoken tokens_count = curtoken_num + 1 
 +else 
 +    tokens_count = curtoken_num 
 +end 
 +</sxh> 
 +  * ''​%%ELSEIF%%''​ — ключевое слово, которое используется совместно с оператором ''​%%IF%%''​ и позволяет определять на одном уровне вложенности последовательно-исключающие условия. Ключевое слово ''​%%ELSEIF%%''​ имеет однострочную и многострочную формы записи. Многострочную форму записи можно использовать только в многострочных конструкциях с оператором ''​%%IF%%'',​ а однострочную — как в многострочных,​ так и в однострочных конструкциях с оператором ''​%%IF%%''​. Общие формы записи:​ <sxh qsp> 
 +! однострочная в однострочном условии 
 +IF [#​выражение 1]: {набор команд 1} ELSEIF [#​выражение 2]: {набор команд 2} ELSE {последний набор команд} 
 +! многострочная в многострочном условии 
 +IF [#​выражение 1]: 
 +  {набор команд 1} 
 +  … 
 +ELSEIF [#​выражение 2]: 
 +  {набор команд 2} 
 +  … 
 +ELSEIF … : 
 +  … 
 +ELSE 
 +  {последний набор команд} 
 +  … 
 +END 
 + 
 +! однострочная в многострочном условии  
 +IF [#​выражение 1]: 
 +  {набор команд 1} 
 +  … 
 +ELSEIF [#​выражение 2]: {набор команд 2} & … 
 +ELSEIF … : … 
 +ELSE {последний набор команд} 
 +END 
 +</sxh> Работает это следующим образомЕсли ''​[#​выражение 1]''​ верно, выполняются команды ''​{набор команд 1}''​. Если ''​[#​выражение 1]''​ неверно,​ но верно ''​[#​выражение 2]'',​ выполняются команды ''​{набор команд 2}'',​ и т.д. И только если неверны все выражения в текущей конструкции условия,​ выполнятся команды после ''​ELSE''​. Верность выражения ''​[#​выражение 1]''​ не исключает верности выражения ''​[#​выражение 2]'',​ однако верность выражения ''​[#​выражение 2]''​ исключает верность выражения ''​[#​выражение 1]''​.\\ Особенности записи ''​ELSEIF'':​ 
 +    * Может использоваться вариант написания ''​%%ELSE IF%%''​. Работает точно так же. 
 +    * Если в многострочной конструкции ''​%%IF%%''​ после ''​%%ELSEIF%%''​ операторы идут в той же самой строке (однострочная форма),​ то все последующие строки игнорируются до следующего ''​%%ELSEIF%%'',​ либо до ''​%%ELSE%%''​ или ''​%%END%%''​. 
 +    * В конструкции ''​%%IF%%''​ c ''​%%ELSEIF%%''​ может как присутствовать,​ так и отсутствовать часть с ''​%%ELSE%%''​. 
 +    * Примеры:​ <sxh qsp> 
 +IF ОЧКИ>​124:​ 
 +  GOTO '​КОН3'​ 
 +ELSEIF ОЧКИ>​99:​ 
 +  GOTO '​КОН4'​ 
 +ELSE 
 +  GOTO '​КОН5'​ 
 +END 
 + 
 +if money mod 10=1 and money mod 100<>​11:​ 
 +  *pl "У вас <<​money>> монета."​ 
 +elseif money mod 10>1 and money mod 10<5 and (money mod 100<5 or money mod 100>20): 
 +  *pl "У вас ​<<​money>>​ монеты."​ 
 +elseif money mod 10=0 or money mod 10>4 or (money mod 100>10 and money mod 100<​21):​ 
 +  *pl "У вас <<​money>>​ монет."​ 
 +end 
 +</​sxh>​ Пример записи ''​ELSEIF''​ с операторами в той же строке<sxh qsp> 
 +if r = 0: 
 +  '​Вариант 0' 
 +  elseif r = 1: '​Вариант 1' 
 +  elseif r = 2: '​Вариант 2' 
 +  elseif r = 3: '​Вариант 3' 
 +  else: '​Без вариантов'​ 
 +end 
 +</sxh> 
 +  * ''​%%END%%''​ — ключевое слово, которое указывает на конец многострочной конструкции условияДопускается запись ''​%%END IF%%''​. Не используется для однострочных форм записи. 
 + 
 +Для многострочных форм записи допускается вложенность неограниченной глубины. Каждый уровень вложения должен заканчиваться своей строкой ''​%%END%%''​. 
 + 
 +Некоторые примеры:​ 
 + 
 +<sxh qsp> 
 +if a+b<3 or y=8: 
 +  p '​A+B<​3 или Y=8' 
 +  nl  
 +  if j=88: nl & p '​NEXT'​  
 +  if $h='​ooo':​ 
 +    p '​loo'​ & jump '​lll'​ 
 +  end 
 +end 
 +</sxh> 
 + 
 +<sxh qsp> 
 +if = 0: 
 +  '​abc1234'​ 
 +  if b = 0: '​0'​ else '​1'​ 
 +  if j = 88: nl & p '​NEXT'​ 
 +  if $h='​ooo':​ 
 +    p '​loo'​ & jump '​lll'​ 
 +  else 
 +    p '​sample text'​ 
 +    v = 8 
 +  end 
 +  1234 
 +else: 
 +  '​01234'​ 
 +  g = 78 
 +end 
 +</sxh> 
 + 
 +<sxh qsp> 
 +if ((a+b)/c)=45+54 or (b<5 or c>45) and no obj '​лопата'​ and $f=$vvv+'​RRRRR':​ p '​OK'​ & goto '​Next'​ 
 +if был_здесь[$curloc]:​ exit 
 +if a<3: jump '​sss'​ 
 +if $имя = '':​ msg '​Введите имя!'​ & jump '​ввод'​ 
 +if a+b=2:c=30 & gt '​next'​ else c=10 
 +</​sxh>​ 
 + 
 +Пример реализации однострочного варианта ''​%%ELSEIF%%'':​ 
 + 
 +<sxh qsp> 
 +if n=0: *pl "Ноль"​ elseif n=1*pl "​Один"​ elseif n=2: *pl "​Два"​ 
 +</sxh> 
 + 
 +Несколько примеров неверной записи:​ 
 + 
 +<sxh qsp> 
 +! в этом случае,​ если условие не будет выполнено,​ 
 +! плеер проигнорирует только команду k1=34 
 +! поскольку посчитает,​ что это однострочное условие 
 +if abcd=3: k1=34 
 +    k2=35 & ! эта команда будет выполняться всегда 
 +    k3=36 & ! эта комнада будет выполняться всегда 
 +end & ! этот end будет проигнорирован 
 +</sxh> 
 + 
 +<sxh qsp> 
 +! данная строка выведет ошибку "​неизвестное действие"​ 
 +! так как однострочные формы записи не должны оканчиваться end`ом 
 +if abcd=3: k1=34 else k1=25 end 
 +</​sxh>​ 
 + 
 +Пример использования однострочных ''​%%ELSEIF%%''​ и ''​%%ELSE%%''​ (аналог ''​%%CASE%%''​ на **QSP**): 
 + 
 +<sxh qsp> 
 +if 0: 
 +    elseif z = 0: y = x * 100 
 +    elseif z = 1: y = x * 99 
 +    elseif z = 2: y = x * 88 
 +    elseif z = 3: y = x * 77 
 +    else: y = x * 11 
 +end 
 +</​sxh>​ 
 + 
 +===== Функции обработки условий ===== 
 + 
 +  * ''​%%IIF([#​выр],​[выр_да],​[выр_нет])%%''​ - возвращает значение выражения ''​%%[выр_да]%%'',​ если ''​%%[#​выр]%%''​ верно, иначе возвращает значение выражения ''​%%[выр_нет]%%''​. 
 +    * Эта функция в **QSP** является аналогом **тернарного оператора** в других языках программирования. 
 +    * Из выражений ''​%%[выр_да]%%''​ и ''​%%[выр_нет]%%''​ будет вычислено только одно, в зависимости от того, будет ли выполнено условие. 
 +    * Примеры:​ <sxh qsp> 
 +!Модуль числа 
 +abs_x=iif(x>​0,​x,​-x) 
 +!А следующая конструкция НЕ вызовет ошибку деления на ноль: 
 +set x=0 y=iif(x=0,​0,​1/​x) 
 +! типичное решение для вывода времени,​ чтобы не терять ноль на часах:​ 
 +$iif(hour>​9,​$str(hour),​"0"​+$str(hour))+":"​+$iif(minute>9,​$str(minute),"​0"​+$str(minute)) 
 +</sxh 
 +    * Эквивалентность конструкций условия c оператором ''​%%IF%%''​ и функции ''​%%IIF%%'':​ <sxh qsp> 
 +if number mod 2 = 0: 
 +  *pl "​Число чётное"​ 
 +else 
 +  *pl "​Число нечётное"​ 
 +end 
 +! эквивалентно 
 +*pl $iif(number mod 2 = 0,"​Число чётное","​Число не чётное"​) 
 +</​sxh>​ 
 + 
 +[[help:​organizing|Вперёд:​ Пользовательские функции и процедуры]] 
help/conditional.1428822577.txt.gz · Последние изменения: 2015/04/12 10:09 (внешнее изменение)