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

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


help:jump

Различия

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

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

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:jump [2020/08/12 16:16]
aleks_versus
help:jump [2024/10/14 11:42] (текущий)
aleks_versus
Строка 1: Строка 1:
 [[help:​organizing|Назад:​ Пользовательские функции и процедуры]] [[help:​organizing|Назад:​ Пользовательские функции и процедуры]]
-=====Переходы внутри локации,​ циклы===== 
  
-  * **JUMP** //[$метка]// - переход в текущем блоке кода на метку //[$метка]//. +====== Переходы внутри локации ====== 
-    * Метка обозначается как ​":[название метки]"После описания метки ​ерез ​"&"​) ​могут идти операторы. + 
-    ​* ​Отдельными блоками кода считаются:​ +Иногда нам требуется ​пропустить выполнение определённого участка кода на локации,​ или ​вернуться к выполнению уже выполненного участка кода. Для таких случаев в QSP предусмотрен механизм переходов по локальным меткам. 
-      * Код "​Выполнить при посещении" ​конкретной локации + 
-        * Каждая локация - отдельный блок кода +В общем виде метки выглядят так: 
-      * Код действия даже если действие добавлено программно. + 
-      * Код в html-ссылке((<a href="​EXEC:​ !код">ссылка</a>)). +<sxh qsp> 
-      * Код DYNAMIC/​DYNEVAL +:[название ​метки] 
-    * //Пример:​//<sxh qsp>+</sxh> 
 + 
 +, где ''​%%[название ​метки]%%''​ — теоретически любое сочетание символов, однако на практике желательно использовать лишь буквы, цифры, символы подчёркивания и пробелы. Перед двоеточием могут стоять символы пробелов и табуляции в любом ​количестве. Так же игнорируются прилегающие к названию метки символы пробелов и табуляций (однако ставить их не рекомендуется для удобства чтения кода). 
 + 
 +Иными словами,​ чтобы поставить метку, вам нужно на отдельной строке поставить двоеточие и после двоеточия написать названия метки
 + 
 +<sxh qsp> 
 +! пример метки 
 +:​cycle_end 
 +</​sxh>​ 
 + 
 +После названия метки можно поставить ''​%%&%%''​ и написать какие-нибудь операторы,​ однако делать так не рекомендуется. 
 + 
 +<sxh qsp> 
 +! допустимо,​ но не рекомендуется 
 +:метка & *pl "​Строка текста"​ 
 +</​sxh>​ 
 + 
 +Метки не должны повторяться внутри отдельного блока кода. Если внутри блока кода будут стоять одинаковые метки, ​плеер будет ​работать ​только с самой первой меткой,​ все остальные повторяющиеся метки он проигнорирует
 + 
 +Названия меток не чувствительны к регистру. То есть метки с названиями "​конец"​ и "​КОНЕЦ"​ — это повторяющиеся метки. 
 + 
 +Метки локальны для отдельных блоков кода. То есть вы можете использовать одинаковые метки в разных блоках кода; например,​ на разных локациях. 
 + 
 +Отдельными блоками кода считаются:​ 
 + 
 +  ​* Код "​Выполнить при посещении" ​любой локацииКаждая локация - это ​отдельный блок кода. 
 +  * Код действиядаже если действие добавлено ​с помощью оператора ''​%%ACT%%''​
 +  * Код в html-ссылке (см. подраздел ​"Код в гиперссылках" раздела **[[help:​html|HTML]]**). 
 +  * Код ​''​%%DYNAMIC%%''​/''​%%DYNEVAL%%''​ 
 + 
 +Для перемещения ("​прыжка"​) к меткам используется оператор ''​%%JUMP%%'':​ 
 + 
 +''​%%JUMP [$метка]%%''​ - переход в текущем блоке кода на метку с названием ''​%%[$метка]%%''​. 
 + 
 +Пример:​ 
 + 
 +<sxh qsp>
 jump '​КонеЦ'​ jump '​КонеЦ'​
 p '​Это сообщение не будет выведено'​ p '​Это сообщение не будет выведено'​
Строка 17: Строка 53:
 </​sxh>​ </​sxh>​
  
-====Циклы====+**Обратите внимание!** Код действия,​ добавленного с помощью оператора ''​%%ACT%%'',​ является отдельным блоком кода, только когда мы нажимаем на действие. Из локации,​ на которой размещено создаваемое с помощью оператора ''​%%ACT%%''​ действие,​ мы по прежнему можем "​прыгнуть"​ на метку внутри этого действия. 
 + 
 +Пример:​ 
 + 
 +<sxh qsp> 
 +:​метка_на_локации 
 +jump '​метка_в_действии'​ & ! отсюда мы можем прыгнуть в код действия 
 + 
 +act "​Действие":​ 
 +    ! а из действия мы не можем прыгнуть на локацию 
 +    jump '​метка_на_локации'​ 
 +    :​метка_в_действии 
 +end 
 +</​sxh>​ 
 + 
 +===== Циклы ====
 + 
 +В плеерах с версией библиотеки ниже 5.8.0 с помощью меток были организованы циклы. Сейчас эта практика устарела,​ потому что есть специальный оператор ''​%%LOOP%%'',​ предназначенный для создания циклов. Тем не менее в старых играх вы можете столкнуться с подобными конструкциями,​ поэтому здесь мы приводим примеры таких устаревших циклов,​ и примеры новых циклов,​ которые следует использовать. 
 + 
 +Устаревший цикл для вывода чисел с 1 по 9:
  
-С помощью оператора "​JUMP"​ можно организовывать циклы: 
 <sxh qsp> <sxh qsp>
 s=0 s=0
 :loop :loop
 if s<9: if s<9:
-  ​s=s+1 +    ​s=s+1 
-  pl s +    pl s 
-  jump '​loop'​+    jump '​loop'​
 end end
 p '​Всё!'​ p '​Всё!'​
 </​sxh>​ </​sxh>​
  
-Двойной цикл с одной меткой:​+Тот же цикл с использованием оператора ''​%%LOOP%%'':​ 
 + 
 +<sxh qsp> 
 +loop s=0 while s<9: 
 +    s+=1 
 +    pl s 
 +end 
 +p '​Всё!'​ 
 +</​sxh>​ 
 + 
 +Устаревший двойной цикл с одной меткой:​ 
 <sxh qsp> <sxh qsp>
 :loop :loop
 if y<y0: if y<y0:
-  ​if x<x0: +    ​if x<x0: 
-    ​............ +        ! тело цикла, код 
-    x=x+1+        x=x+1 
 +        jump '​loop'​ 
 +    end 
 +    y=y+1 
 +    x=0
     jump '​loop'​     jump '​loop'​
-  end 
-  y=y+1 
-  x=0 
-  jump '​loop'​ 
 end end
 </​sxh>​ </​sxh>​
----- + 
-[[help:​principle|Вперёд: Порядок работы интерпретатора]]+Тот же двойной цикл с оператором ''​%%LOOP%%'':​ 
 + 
 +<sxh qsp> 
 +loop y=0 while y<y0 step y+=1: 
 +    loop x=0 while x<x0 step x+=1: 
 +        ! тело цикла, код 
 +    end 
 +end 
 +</​sxh>​ 
 + 
 +Несмотря на то, что метки ​больше не используются для написания циклов,​ они могут быть очень полезны,​ если вам ​нужно досрочно прервать выполнение цикла. Например, вот цикл, ​проверяющий,​ присутствуют ли в двух массивах ''​%%$a%%''​ и ''​%%$b%%''​ одинаковые элементы: 
 + 
 +<sxh qsp> 
 +loop local i,​size=0,​arrsize('​$a'​) while i<size step i+=1: 
 +    if arrpos('​$b',​$a[i])<>​-1:​ 
 +        *pl 'В массивах есть ​одинаковые элементы'​ 
 +        jump '​cycle_end'​ & ! ранний выход из цикла 
 +    end 
 +end 
 +*pl 'В массивах нет одинаковых элементов'​ 
 +:​cycle_end 
 +</​sxh>​ 
 + 
 +[[help:​service_locations|Вперёд:​ Служебные локации]] 
help/jump.1597249001.txt.gz · Последние изменения: 2020/08/12 16:16 — aleks_versus