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

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


help:organizing

Различия

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

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

Both sides previous revision Предыдущая версия
help:organizing [2025/09/28 15:23]
aleks_versus [Неявный вызов функции FUNC]
help:organizing [2025/09/28 15:40] (текущий)
aleks_versus
Строка 227: Строка 227:
 @@reset_screen('​black-green'​) @@reset_screen('​black-green'​)
 </​sxh>​ </​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 =====
  
Строка 301: Строка 350:
 !$ARGS[0] содержит строку "​строка",​ ARGS[1] равен 2. !$ARGS[0] содержит строку "​строка",​ ARGS[1] равен 2.
 MSG "​text"​ + FUNC($name, "​строка",​ 2) MSG "​text"​ + FUNC($name, "​строка",​ 2)
-</​sxh>​ 
- 
-Cуществует краткая форма записи,​ не требующая явного указания функции ''​FUNC'':​ 
- 
-<sxh qsp> 
-  @[$локация]([аргумент 0],​[аргумент 1], ... ,​[аргумент 18]) 
-</​sxh>​ 
- 
-Название локации ''​[$локация]''​ не заключается в кавычки и не должно содержать спецсимволов,​ кроме точки. Запись без скобок допускается,​ если у функции нет аргументов. 
- 
-<sxh qsp> 
-@loc.type('​page'​) 
-@html.link('​Информация об игре',​ {goto '​game_info'​}) + @BR 
-</​sxh>​ 
-===== Ранний выход. Оператор EXIT ===== 
- 
-Чтобы прервать выполнение текущего кода и выйти из вызванной с помощью ''​%%GOSUB%%''​ или ''​%%FUNC%%''​ локации,​ используйте оператор ''​%%EXIT%%''​. 
- 
-''​%%EXIT%%''​ - завершение выполнения текущего кода (преждевременный выход из подпрограммы/​обработчика какого-либо события). 
- 
-Пример:​ 
- 
-<sxh qsp> 
-if args[0] = 0: exit 
 </​sxh>​ </​sxh>​
  
Строка 344: Строка 369:
   * Название локации не должно совпадать с ключевыми словами QSP, в том числе с названиями системных переменных.   * Название локации не должно совпадать с ключевыми словами QSP, в том числе с названиями системных переменных.
   * Аргументы,​ передаваемые на локацию,​ всегда должны заключаться в скобки   * Аргументы,​ передаваемые на локацию,​ всегда должны заключаться в скобки
-  * Если на локацию не нужно передавать аргументы,​ после её названия можно поставить пустые скобки,​ а можно не ставить.+  * Если на локацию не нужно передавать аргументы,​ после её названия можно поставить пустые скобки,​ а можно не ставить ​совсем.
   * Нельзя подставить вместо названия локации значение переменной!   * Нельзя подставить вместо названия локации значение переменной!
  
Строка 362: Строка 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%%'':​
  
 Локация ''​%%"​поднять_яблоко"​%%'':​ Локация ''​%%"​поднять_яблоко"​%%'':​
Строка 383: Строка 412:
   @поднять_яблоко & ! в данном случае поведение функции будет идентично поведению GOSUB   @поднять_яблоко & ! в данном случае поведение функции будет идентично поведению GOSUB
 end end
 +</​sxh>​
 +
 +===== Ранний выход. Оператор EXIT =====
 +
 +Чтобы прервать выполнение текущего кода и выйти из вызванной с помощью ''​%%GOSUB%%''​ или ''​%%FUNC%%''​ локации,​ используйте оператор ''​%%EXIT%%''​.
 +
 +''​%%EXIT%%''​ - завершение выполнения текущего кода (преждевременный выход из подпрограммы/​обработчика какого-либо события).
 +
 +Пример:​
 +
 +<sxh qsp>
 +if args[0] = 0: exit
 </​sxh>​ </​sxh>​
  
help/organizing.txt · Последние изменения: 2025/09/28 15:40 — aleks_versus