Здесь показаны различия между двумя версиями данной страницы.
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> | ||