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

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


help:jump

Различия

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

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

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:jump [2023/01/02 15:18]
aleks_versus
help:jump [2024/10/14 11:42] (текущий)
aleks_versus
Строка 1: Строка 1:
- 
 [[help:​organizing|Назад:​ Пользовательские функции и процедуры]] [[help:​organizing|Назад:​ Пользовательские функции и процедуры]]
  
 ====== Переходы внутри локации ====== ====== Переходы внутри локации ======
- 
  
 Иногда нам требуется пропустить выполнение определённого участка кода на локации,​ или вернуться к выполнению уже выполненного участка кода. Для таких случаев в QSP предусмотрен механизм переходов по локальным меткам. Иногда нам требуется пропустить выполнение определённого участка кода на локации,​ или вернуться к выполнению уже выполненного участка кода. Для таких случаев в QSP предусмотрен механизм переходов по локальным меткам.
Строка 10: Строка 8:
  
 <sxh qsp> <sxh qsp>
- :​[название метки]+:​[название метки]
 </​sxh>​ </​sxh>​
-, где ''​[название метки]''​ — теоретически любое сочетание символов,​ однако на практике желательно использовать лишь буквы, цифры, символы подчёркивания и пробелы. Перед двоеточием могут стоять символы пробелов и табуляции в любом количестве. Так же игнорируются прилегающие к названию метки символы пробелов и табуляций (однако ставить их не рекомендуется для удобства чтения кода).+ 
 +, где ''​%%[название метки]%%''​ — теоретически любое сочетание символов,​ однако на практике желательно использовать лишь буквы, цифры, символы подчёркивания и пробелы. Перед двоеточием могут стоять символы пробелов и табуляции в любом количестве. Так же игнорируются прилегающие к названию метки символы пробелов и табуляций (однако ставить их не рекомендуется для удобства чтения кода).
  
 Иными словами,​ чтобы поставить метку, вам нужно на отдельной строке поставить двоеточие и после двоеточия написать названия метки. Иными словами,​ чтобы поставить метку, вам нужно на отдельной строке поставить двоеточие и после двоеточия написать названия метки.
Строка 21: Строка 20:
 </​sxh>​ </​sxh>​
  
-После названия метки можно поставить ''​**&**''​ и написать какие-нибудь операторы,​ однако делать так не рекомендуется.+После названия метки можно поставить ''​%%&%%''​ и написать какие-нибудь операторы,​ однако делать так не рекомендуется.
  
 <sxh qsp> <sxh qsp>
Строка 35: Строка 34:
  
 Отдельными блоками кода считаются:​ Отдельными блоками кода считаются:​
- *  Код "​Выполнить при посещении"​ любой локации. Каждая локация - это отдельный блок кода. 
- *  Код действия,​ даже если действие добавлено с помощью оператора ''​**ACT**''​. 
- *  Код в html-ссылке (см. подраздел "​Код в гиперссылках"​ раздела **[[help:​html|HTML]]**). 
- *  Код ''​**DYNAMIC**''/''​**DYNEVAL**''​ 
  
-Для перемещения ("прыжка"​) ​к меткам используется оператор ''​**JUMP**''​:+  * Код "​Выполнить ​при посещении" ​любой локации. Каждая локация - это отдельный блок кода. 
 +  * Код действия, даже если действие добавлено с помощью ​оператора ''​%%ACT%%''​. 
 +  ​Код в html-ссылке (см. подраздел "​Код в гиперссылках"​ раздела ​**[[help:​html|HTML]]**). 
 +  * Код ''​%%DYNAMIC%%''/''​%%DYNEVAL%%''​
  
-''​**JUMP** [$метка]''​ - переход в текущем блоке кода на метку с названием ''​[$метка]''​.+Для перемещения ("​прыжка"​) к меткам используется оператор ''​%%JUMP%%'':​ 
 + 
 +''​%%JUMP [$метка]%%''​ - переход в текущем блоке кода на метку с названием ''​%%[$метка]%%''​.
  
 Пример:​ Пример:​
 +
 <sxh qsp> <sxh qsp>
 jump '​КонеЦ'​ jump '​КонеЦ'​
Строка 52: Строка 53:
 </​sxh>​ </​sxh>​
  
-Обратите внимание! Код действия,​ добавленного с помощью оператора ''​**ACT**'',​ является отдельным блоком кода, только когда мы нажимаем на действие. Из локации,​ на которой размещено создаваемое с помощью оператора ''​**ACT**''​ действие,​ мы по прежнему можем "​прыгнуть"​ на метку внутри этого действия.+**Обратите внимание!** Код действия,​ добавленного с помощью оператора ''​%%ACT%%'',​ является отдельным блоком кода, только когда мы нажимаем на действие. Из локации,​ на которой размещено создаваемое с помощью оператора ''​%%ACT%%''​ действие,​ мы по прежнему можем "​прыгнуть"​ на метку внутри этого действия.
  
 Пример:​ Пример:​
Строка 59: Строка 60:
 :​метка_на_локации :​метка_на_локации
 jump '​метка_в_действии'​ & ! отсюда мы можем прыгнуть в код действия jump '​метка_в_действии'​ & ! отсюда мы можем прыгнуть в код действия
- 
  
 act "​Действие":​ act "​Действие":​
- ! а из действия мы не можем прыгнуть на локацию +    ​! а из действия мы не можем прыгнуть на локацию 
- jump '​метка_на_локации'​ +    jump '​метка_на_локации'​ 
- :​метка_в_действии+    :​метка_в_действии
 end end
 </​sxh>​ </​sxh>​
Строка 70: Строка 70:
 ===== Циклы ===== ===== Циклы =====
  
-В плеерах с версией библиотеки ниже 5.8.0 с помощью меток были организованы циклы. Сейчас эта практика устарела,​ потому что есть специальный оператор ''​**[[help:​cycle|LOOP]]**'',​ предназначенный для создания циклов. Тем не менее в старых играх вы можете столкнуться с подобными конструкциями,​ поэтому здесь мы приводим примеры таких устаревших циклов,​ и примеры новых циклов,​ которые следует использовать.+В плеерах с версией библиотеки ниже 5.8.0 с помощью меток были организованы циклы. Сейчас эта практика устарела,​ потому что есть специальный оператор ''​%%LOOP%%'',​ предназначенный для создания циклов. Тем не менее в старых играх вы можете столкнуться с подобными конструкциями,​ поэтому здесь мы приводим примеры таких устаревших циклов,​ и примеры новых циклов,​ которые следует использовать.
  
 Устаревший цикл для вывода чисел с 1 по 9: Устаревший цикл для вывода чисел с 1 по 9:
Строка 78: Строка 78:
 :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**'':​+Тот же цикл с использованием оператора ''​%%LOOP%%'':​
  
 <sxh qsp> <sxh qsp>
 loop s=0 while s<9: loop s=0 while s<9:
- s+=1 +    ​s+=1 
- pl s+    pl s
 end end
 p '​Всё!'​ p '​Всё!'​
Строка 100: Строка 100:
 :loop :loop
 if y<y0: if y<y0:
- if x<x0: +    ​if x<x0: 
- ! тело цикла, код +        ! тело цикла, код 
- x=x+1 +        x=x+1 
- jump '​loop'​ +        jump '​loop'​ 
- end +    end 
- y=y+1 +    y=y+1 
- x=0 +    x=0 
- jump '​loop'​+    jump '​loop'​
 end end
 </​sxh>​ </​sxh>​
  
-Тот же двойной цикл с оператором ''​**LOOP**'':​+Тот же двойной цикл с оператором ''​%%LOOP%%'':​
  
 <sxh qsp> <sxh qsp>
 loop y=0 while y<y0 step y+=1: loop y=0 while y<y0 step y+=1:
- loop x=0 while x<x0 step x+=1: +    ​loop x=0 while x<x0 step x+=1: 
- ! тело цикла, код +        ! тело цикла, код 
- end+    end
 end end
 </​sxh>​ </​sxh>​
  
-Несмотря на то, что метки больше не используются для написания циклов,​ они могут быть очень полезны,​ если вам нужно досрочно прервать выполнение цикла. Например,​ вот цикл, проверяющий,​ присутствуют ли в двух массивах ''​**$a**''​ и ''​**$b**''​ одинаковые элементы:​+Несмотря на то, что метки больше не используются для написания циклов,​ они могут быть очень полезны,​ если вам нужно досрочно прервать выполнение цикла. Например,​ вот цикл, проверяющий,​ присутствуют ли в двух массивах ''​%%$a%%''​ и ''​%%$b%%''​ одинаковые элементы:​
  
 <sxh qsp> <sxh qsp>
 loop local i,​size=0,​arrsize('​$a'​) while i<size step i+=1: loop local i,​size=0,​arrsize('​$a'​) while i<size step i+=1:
- if arrpos('​$b',​$a[i])<>​-1:​ +    ​if arrpos('​$b',​$a[i])<>​-1:​ 
- *pl 'В массивах есть одинаковые элементы'​ +        *pl 'В массивах есть одинаковые элементы'​ 
- jump '​cycle_end'​ & ! ранний выход из цикла +        jump '​cycle_end'​ & ! ранний выход из цикла 
- end+    end
 end end
 *pl 'В массивах нет одинаковых элементов'​ *pl 'В массивах нет одинаковых элементов'​
Строка 135: Строка 135:
  
 [[help:​service_locations|Вперёд:​ Служебные локации]] [[help:​service_locations|Вперёд:​ Служебные локации]]
- 
  
help/jump.1672672732.txt.gz · Последние изменения: 2023/01/02 15:18 — aleks_versus