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