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

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


help:jump

Различия

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

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

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