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

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


help:organizing

Различия

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

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

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:organizing [2024/10/14 11:40]
aleks_versus обновление 5.9.0
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-х параметров. ​
Строка 212: Строка 212:
 ! $args[2] = "​данные"​. Обратите внимание на символы '​$'​. ! $args[2] = "​данные"​. Обратите внимание на символы '​$'​.
 GS '​ход',​$var,​2,'​данные'​ GS '​ход',​$var,​2,'​данные'​
 +</​sxh>​
 +
 +Cуществует краткая форма записи,​ не требующая явного указания оператора ''​GOSUB'':​
 +
 +<sxh qsp>
 +  @@[$локация] [аргумент 0], [аргумент 1], ... ,​[аргумент 18]
 +</​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>​ </​sxh>​
  
Строка 271: Строка 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%%''​.
  
 Примеры:​ Примеры:​
Строка 290: Строка 352:
 </​sxh>​ </​sxh>​
  
-===== Ранний выход. Оператор EXIT ===== +==== Неявный вызов функции FUNC ====
- +
-Чтобы прервать выполнение текущего кода и выйти из вызванной с помощью ''​%%GOSUB%%''​ или ''​%%FUNC%%''​ локации,​ используйте оператор ''​%%EXIT%%''​. +
- +
-''​%%EXIT%%''​ - завершение выполнения текущего кода (преждевременный выход из подпрограммы/​обработчика какого-либо события). +
- +
-Пример:​ +
- +
-<sxh qsp> +
-if args[0] = 0: exit +
-</​sxh>​ +
- +
-===== Неявный вызов функции FUNC =====+
  
 Вы можете не прописывать всякий раз функцию ''​%%FUNC%%''​ явно. Можно использовать более простую запись. Вот как это выглядит в общем виде: Вы можете не прописывать всякий раз функцию ''​%%FUNC%%''​ явно. Можно использовать более простую запись. Вот как это выглядит в общем виде:
Строка 319: Строка 369:
   * Название локации не должно совпадать с ключевыми словами QSP, в том числе с названиями системных переменных.   * Название локации не должно совпадать с ключевыми словами QSP, в том числе с названиями системных переменных.
   * Аргументы,​ передаваемые на локацию,​ всегда должны заключаться в скобки   * Аргументы,​ передаваемые на локацию,​ всегда должны заключаться в скобки
-  * Если на локацию не нужно передавать аргументы,​ после её названия можно поставить пустые скобки,​ а можно не ставить.+  * Если на локацию не нужно передавать аргументы,​ после её названия можно поставить пустые скобки,​ а можно не ставить ​совсем.
   * Нельзя подставить вместо названия локации значение переменной!   * Нельзя подставить вместо названия локации значение переменной!
  
Строка 337: Строка 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%%'':​
  
 Локация ''​%%"​поднять_яблоко"​%%'':​ Локация ''​%%"​поднять_яблоко"​%%'':​
Строка 358: Строка 412:
   @поднять_яблоко & ! в данном случае поведение функции будет идентично поведению GOSUB   @поднять_яблоко & ! в данном случае поведение функции будет идентично поведению GOSUB
 end end
 +</​sxh>​
 +
 +===== Ранний выход. Оператор EXIT =====
 +
 +Чтобы прервать выполнение текущего кода и выйти из вызванной с помощью ''​%%GOSUB%%''​ или ''​%%FUNC%%''​ локации,​ используйте оператор ''​%%EXIT%%''​.
 +
 +''​%%EXIT%%''​ - завершение выполнения текущего кода (преждевременный выход из подпрограммы/​обработчика какого-либо события).
 +
 +Пример:​
 +
 +<sxh qsp>
 +if args[0] = 0: exit
 </​sxh>​ </​sxh>​
  
help/organizing.1728906007.txt.gz · Последние изменения: 2024/10/14 11:40 — aleks_versus