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

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


help:organizing

Различия

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

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

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:organizing [2025/09/27 18:32]
aleks_versus
help:organizing [2025/09/28 15:40] (текущий)
aleks_versus
Строка 157: Строка 157:
 </​sxh>​ </​sxh>​
  
-, где ''​%%[$локация]%%''​ — это название локации,​ код которой мы хотим выполнить без непосредственного перехода на неё. Значения ''​%%[аргумент 0]%%'',​ ''​%%[аргумент 1]%%''​ и т.д. могут использоваться на этой локации,​ их значения автоматически помещаются в ячейки массива ''​%%ARGS[0]%%'',​ ''​%%ARGS[1]%%'',​ и т.д. соответственно. После обработки локации предыдущие значения ''​%%ARGS%%''​ восстанавливаются. Использование аргументов не обязательно.+, где ''​%%[$локация]%%''​ — это название локации,​ код которой мы хотим выполнить без непосредственного перехода на неё. Значения ''​%%[аргумент 0]%%'',​ ''​%%[аргумент 1]%%''​ и т.д. могут использоваться на этой локации,​ их значения автоматически помещаются в ячейки массива ''​%%ARGS[0]%%'',​ ''​%%ARGS[1]%%'',​ и т.д. соответственно. Использование аргументов не обязательно.
  
 Оператор имеет краткую форму ''​%%GS%%'':​ Оператор имеет краткую форму ''​%%GS%%'':​
Строка 180: Строка 180:
 На каждой локации автоматически создаётся собственный уникальный массив ''​%%ARGS%%'',​ поэтому значения в этом массиве для каждой локации будут свои собственные. После выполнения кода локации,​ вызванной по ''​%%GOSUB%%'',​ массив ''​%%ARGS%%''​ этой локации уничтожается. На каждой локации автоматически создаётся собственный уникальный массив ''​%%ARGS%%'',​ поэтому значения в этом массиве для каждой локации будут свои собственные. После выполнения кода локации,​ вызванной по ''​%%GOSUB%%'',​ массив ''​%%ARGS%%''​ этой локации уничтожается.
  
-**Обратите внимание!** Значения из массива ''​%%ARGS%%''​ с локации,​ вызванной через GOSUB, не транслируются в блоки ''​%%ACT%%''​. В блоки ''​%%ACT%%''​ транслируются значения ''​%%ARGS%%''​ из текущей локации,​ т.е. локации,​ на которую был осуществлён переход с помощью операторов ''​%%GOTO%%''/''​%%XGOTO%%''​.+**Обратите внимание!** Значения из массива ''​%%ARGS%%''​ с локации,​ вызванной через GOSUB, не транслируются в блоки ''​%%ACT%%'' ​и гиперссылки. В блоки ''​%%ACT%%'' ​и гиперссылки ​транслируются значения ''​%%ARGS%%''​ из текущей локации,​ т.е. локации,​ на которую был осуществлён переход с помощью операторов ''​%%GOTO%%''/''​%%XGOTO%%''​.
  
 <sxh qsp> <sxh qsp>
Строка 206: Строка 206:
 !обработка локации с названием из переменной $location !обработка локации с названием из переменной $location
 !Передаётся один параметр - args[0] равен 1. !Передаётся один параметр - args[0] равен 1.
-GS $location,1+GS $location, 1
  
 !обработка локации "​ход"​ с передачей 3-х параметров. ​ !обработка локации "​ход"​ с передачей 3-х параметров. ​
Строка 217: Строка 217:
  
 <sxh qsp> <sxh qsp>
-  @@[$локация],[аргумент 0],​[аргумент 1], ... ,​[аргумент 18]+  @@[$локация] [аргумент 0], [аргумент 1], ... ,​[аргумент 18]
 </​sxh>​ </​sxh>​
  
-Название локации ''​[$локация]''​ не заключается в кавычки и не должно содежать спецсимволов,​ кроме точки.+Название локации ''​[$локация]''​ не заключается в кавычки и не должно содержать спецсимволов,​ кроме точки. ​Допустимо заключать аргументы в скобки. 
 + 
 +<sxh qsp> 
 +@@inventory.add '​ScrewDriver',​ 12 
 + 
 +@@reset_screen('​black-green'​) 
 +</​sxh>​ 
 + 
 +==== Неявный вызов оператора GOSUB ==== 
 + 
 +Вы можете не прописывать всякий раз оператор ''​GOSUB''​ явно. Можно использовать более простую запись. Вот как это выглядит в общем виде: 
 + 
 +<sxh qsp> 
 +@@[$локация] [аргумент 0],​[аргумент 1], ... ,​[аргумент 18] 
 +</​sxh>​ 
 + 
 +Здесь ''​%%[$локация]%%''​ — это название локации,​ код которой мы хотим выполнить без непосредственного перехода на неё. Аргументы ''​%%[аргумент 0]%%'',​ ''​%%[аргумент 1]%%''​ и т.д. могут использоваться на этой локации,​ их значения автоматически помещаются в ячейки массива ''​%%ARGS[0]%%'',​ ''​%%ARGS[1]%%'',​ и т.д. соответственно. 
 + 
 +То есть: пишем ''​%%@@%%'',​ затем без пробелов название локации,​ потом ставим пробел и через запятую перечисляем аргументы. 
 + 
 +При такой записи необходимо соблюдать несколько правил:​ 
 + 
 +  * Название локации не должно содержать пробелов,​ символов математических операций и специальных символов (за исключением точки) 
 +  * Название локации не должно совпадать с ключевыми словами QSP, в том числе с названиями системных переменных. 
 +  * Аргументы,​ передаваемые на локацию,​ можно заключать в скобки,​ но можно и не заключать. 
 +  * Нельзя подставить вместо названия локации значение переменной! 
 + 
 +Пример локации для подъёма яблока:​ 
 + 
 +<sxh qsp> 
 +!# поднять_яблоко 
 +if яблоки['​рюкзак'​]=0:​ 
 +  addobj "​Яблоки"​ 
 +end 
 +яблоки['​рюкзак'​]+=1 
 +яблоки[$curloc]-=1 
 +</​sxh>​ 
 + 
 +Действие,​ которое мы пишем на любой другой локации:​ 
 + 
 +<sxh qsp> 
 +act "​Взять яблоко":​ 
 +  @@поднять_яблоко 
 +end 
 +</​sxh>​ 
 + 
 +Другие примеры:​ 
 + 
 +<sxh qsp> 
 +@@sys.init 
 +@@hero.init 
 +@@loc.type '​page'​ 
 + 
 +@@map_set_cell [0,12], '​дерево'​ 
 +</​sxh>​
  
 ===== Описание FUNC ===== ===== Описание FUNC =====
Строка 279: Строка 333:
 На каждой локации автоматически создаются свои собственные уникальные массивы ''​%%ARGS%%''​ и ''​%%RESULT%%'',​ поэтому значения в этих массивах для каждой локации будут свои собственные. После выполнения кода локации,​ вызванной по ''​%%FUNC%%'',​ массивы ''​%%ARGS%%''​ и ''​%%RESULT%%''​ этой локации уничтожаются. На каждой локации автоматически создаются свои собственные уникальные массивы ''​%%ARGS%%''​ и ''​%%RESULT%%'',​ поэтому значения в этих массивах для каждой локации будут свои собственные. После выполнения кода локации,​ вызванной по ''​%%FUNC%%'',​ массивы ''​%%ARGS%%''​ и ''​%%RESULT%%''​ этой локации уничтожаются.
  
-Обратите внимание! Значения из массивов ''​%%ARGS%%''​ и ''​%%RESULT%%''​ с локации,​ вызванной через ''​%%FUNC%%'',​ не транслируются в блоки ''​%%ACT%%''​. В блоки ''​%%ACT%%''​ транслируются значения ''​%%ARGS%%''​ и ''​%%RESULT%%''​ из текущей локации,​ т.е. локации,​ на которую был осуществлён переход с помощью операторов ''​%%GOTO%%''/''​%%XGOTO%%''​.+Обратите внимание! Значения из массивов ''​%%ARGS%%''​ и ''​%%RESULT%%''​ с локации,​ вызванной через ''​%%FUNC%%'',​ не транслируются в блоки ''​%%ACT%%'' ​и гиперссылки. В блоки ''​%%ACT%%'' ​и гиперссылкитранслируются значения ''​%%ARGS%%''​ и ''​%%RESULT%%''​ из текущей локации,​ т.е. локации,​ на которую был осуществлён переход с помощью операторов ''​%%GOTO%%''/''​%%XGOTO%%''​.
  
 Примеры:​ Примеры:​
Строка 298: Строка 352:
 </​sxh>​ </​sxh>​
  
-Cуществует краткая форма записи,​ не требующая явного указания оператора ''​GOSUB'':​ +==== Неявный вызов функции FUNC ====
- +
-<sxh qsp> +
-  @[$локация]([аргумент 0],​[аргумент 1], ... ,​[аргумент 18]) +
-</​sxh>​ +
- +
-Название локации ''​[$локация]''​ не заключается в кавычки и не должно содежать спецсимволов,​ кроме точки. +
- +
-===== Ранний выход. Оператор EXIT ===== +
- +
-Чтобы прервать выполнение текущего кода и выйти из вызванной с помощью ''​%%GOSUB%%''​ или ''​%%FUNC%%''​ локации,​ используйте оператор ''​%%EXIT%%''​. +
- +
-''​%%EXIT%%''​ - завершение выполнения текущего кода (преждевременный выход из подпрограммы/​обработчика какого-либо события). +
- +
-Пример:​ +
- +
-<sxh qsp> +
-if args[0] = 0: exit +
-</​sxh>​ +
- +
-===== Неявный вызов функции FUNC =====+
  
 Вы можете не прописывать всякий раз функцию ''​%%FUNC%%''​ явно. Можно использовать более простую запись. Вот как это выглядит в общем виде: Вы можете не прописывать всякий раз функцию ''​%%FUNC%%''​ явно. Можно использовать более простую запись. Вот как это выглядит в общем виде:
Строка 335: Строка 369:
   * Название локации не должно совпадать с ключевыми словами QSP, в том числе с названиями системных переменных.   * Название локации не должно совпадать с ключевыми словами QSP, в том числе с названиями системных переменных.
   * Аргументы,​ передаваемые на локацию,​ всегда должны заключаться в скобки   * Аргументы,​ передаваемые на локацию,​ всегда должны заключаться в скобки
-  * Если на локацию не нужно передавать аргументы,​ после её названия можно поставить пустые скобки,​ а можно не ставить.+  * Если на локацию не нужно передавать аргументы,​ после её названия можно поставить пустые скобки,​ а можно не ставить ​совсем.
   * Нельзя подставить вместо названия локации значение переменной!   * Нельзя подставить вместо названия локации значение переменной!
  
Строка 353: Строка 387:
 ! пример вложения функций и участие их в выражениях ! пример вложения функций и участие их в выражениях
 point = @queue.addPoint($next[i],​new_cost+@hevr.est($next[i],​$args[0])) point = @queue.addPoint($next[i],​new_cost+@hevr.est($next[i],​$args[0]))
 +
 +! пример генерации гиперссылки с помощью локации-функции:​
 +@html.link('​Информация об игре',​ {goto '​game_info'​}) + @BR
 +! локация-функция BR не принимает аргументов...........^^^
 </​sxh>​ </​sxh>​
  
-Если подобный неявный вызов сочетается с использованием неявного оператора,​ а на локации при этом НЕ присваивается значение переменной ''​%%RESULT%%'', ​можно использовать ​неявный вызов функции ​вместо оператора ''​%%GOSUB%%'':​+Если подобный неявный вызов сочетается с использованием неявного оператора,​ а на локации при этом НЕ присваивается значение переменной ''​%%RESULT%%'',​ неявный вызов функции ​будет работать как ​''​%%GOSUB%%'':​
  
 Локация ''​%%"​поднять_яблоко"​%%'':​ Локация ''​%%"​поднять_яблоко"​%%'':​
Строка 374: Строка 412:
   @поднять_яблоко & ! в данном случае поведение функции будет идентично поведению GOSUB   @поднять_яблоко & ! в данном случае поведение функции будет идентично поведению GOSUB
 end end
 +</​sxh>​
 +
 +===== Ранний выход. Оператор EXIT =====
 +
 +Чтобы прервать выполнение текущего кода и выйти из вызванной с помощью ''​%%GOSUB%%''​ или ''​%%FUNC%%''​ локации,​ используйте оператор ''​%%EXIT%%''​.
 +
 +''​%%EXIT%%''​ - завершение выполнения текущего кода (преждевременный выход из подпрограммы/​обработчика какого-либо события).
 +
 +Пример:​
 +
 +<sxh qsp>
 +if args[0] = 0: exit
 </​sxh>​ </​sxh>​
  
help/organizing.1758997952.txt.gz · Последние изменения: 2025/09/27 18:32 — aleks_versus