Здесь показаны различия между двумя версиями данной страницы.
| Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
|
help:jump [2023/01/02 14:57] aleks_versus переписано |
help:jump [2025/09/28 10:58] (текущий) 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: | Строка 62: | ||
| :метка_на_локации | :метка_на_локации | ||
| jump 'метка_в_действии' & ! отсюда мы можем прыгнуть в код действия | jump 'метка_в_действии' & ! отсюда мы можем прыгнуть в код действия | ||
| - | |||
| act "Действие": | act "Действие": | ||
| - | ! а из действия мы не можем прыгнуть на локацию | + | ! а из действия мы не можем прыгнуть на локацию |
| - | jump 'метка_на_локации' | + | jump 'метка_на_локации' |
| - | :метка_в_действии | + | :метка_в_действии |
| end | end | ||
| </sxh> | </sxh> | ||
| Строка 70: | Строка 72: | ||
| ===== Циклы ===== | ===== Циклы ===== | ||
| - | В плеерах с версией библиотеки ниже 5.8.0 с помощью меток были организованы циклы. Сейчас эта практика устарела, потому что есть специальный оператор ''**[[help:cycle|LOOP]]**'', предназначенный для создания циклов. Тем не менее в старых играх вы можете столкнуться с подобными конструкциями, поэтому здесь мы приводим примеры таких устаревших циклов, и примеры новых циклов, которые следует использовать. | + | В плеерах с версией библиотеки ниже 5.8.0 с помощью меток были организованы циклы. Сейчас эта практика устарела, потому что есть специальный оператор ''%%LOOP%%'', предназначенный для создания циклов. Тем не менее в старых играх вы можете столкнуться с подобными конструкциями, поэтому здесь мы приводим примеры таких устаревших циклов, и примеры новых циклов, которые следует использовать. |
| Устаревший цикл для вывода чисел с 1 по 9: | Устаревший цикл для вывода чисел с 1 по 9: | ||
| Строка 78: | Строка 80: | ||
| :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: | Строка 102: | ||
| :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: | Строка 137: | ||
| [[help:service_locations|Вперёд: Служебные локации]] | [[help:service_locations|Вперёд: Служебные локации]] | ||
| - | |||