Перейти к основному содержимому

Нововведения в QSP 5.9.1

Клуб любителей текстовых игр на QSP·26 ноя 2024

Оператор SETVAR

Дополняет функцию ARRITEM и позволяет в некоторых типовых случаях избежать генерации кода и использования оператора DYNAMIC.
Синтаксис:

SETVAR [$имя переменной], [значение], [индекс]

Префикс имени переменной указывает тип значения, которое нужно записать в элемент массива (как с обычными присваиваниями).

Параметр [индекс] опционален и позволяет указать индекс элемента массива, которому нужно присвоить значение. Если этот параметр не указан, то значение присваивается 0-му элементу.

Значение и индекс могут быть любых типов.
Примеры:

SETVAR 'A', 65

SETVAR '$X', 'name', 4

SETVAR '$X', 'name', 'string index'

SETVAR '%Q', ['пример', 'кортежа'], 3

SETVAR '%Q', ['пример', 'кортежа'], [x, y]

Функция ARRTYPE

Позволяет получить тип значения элемента массива.
Синтаксис:

ARRTYPE([$имя переменной], [индекс])

Параметр [индекс] опционален и позволяет указать индекс элемента массива, значение которого нужно проверить. Если этот параметр не указан, то проверяется 0-й элемент.

Индекс может быть любого типа.
Функция возвращает одно из следующих значений:

  • '' (пустая строка) - элемент массива не задан.
  • '#' - элемент содержит число.
  • '$' - элемент содержит строку.
  • '%' - элемент содержит кортеж.

Функция ARRPACK

Позволяет упаковать массив в кортеж. Это может быть полезно для разбора параметров функции в именованные переменные.
Синтаксис:

ARRPACK([$имя переменной], [#начальный индекс], [#количество элементов])

Начальный индекс и количество элементов опциональны. По умолчанию начальный индекс равен 0, количество элементов равно количеству элементов в массиве.

Функция возвращает кортеж из элементов указанной части массива.
Примеры:

LOCAL type, name = ARRPACK('args')

type, name = ARRPACK('args', 1, 3)

Оператор UNPACKARR

Позволяет записать значения из кортежа в массив.
Синтаксис:

UNPACKARR [$имя массива], [%кортеж], [#начальный индекс], [#количество элементов]

Начальный индекс и количество элементов опциональны. По умолчанию начальный индекс равен 0, количество элементов равно количеству элементов в кортеже.
Примеры:

UNPACKARR 'A', ['тест','нескольких','значений',67]

! $A[0] будет содержать 'тест'

! $A[1] будет содержать 'нескольких'

! $A[2] будет содержать 'значений'

! A[3] будет содержать 67

Новые возможности функции RAND

Добавлен опциональный 3й параметр, указывающий моду нормального распределения (распределение Гаусса).

Возможна генерация чисел из всего указанного диапазона, но с различной вероятностью (см. усеченное нормальное распределение). Это упрощает создание игровых механик, где разные числа выпадают с различной вероятностью, но согласно нужному закону распределения (например, сумма при броске игровых костей при большом числе бросков стремится к нормальному распределению). С помощью указания моды в различных частях диапазона (или даже вне пределов диапазона) функция позволяет задать практически любую полезную кривую распределения чисел.
Синтаксис:

RAND([#минимальное значение], [#максимальное значение], [#мода])

Если 3й параметр не указан, то функция возвращает случайное число в заданном диапазоне с равномерным/равновероятным распределением чисел.
При указании параметра [#мода] функция генерирует случайное число в заданном диапазоне согласно усеченному нормальному распределению.
Примеры:

x = RAND(1, 100)  
x = RAND(1, 1000, 500)
x = RAND(1, 1000, 1)
x = RAND(1, 1000, 1000)
x = RAND(-1000, 0, -500)
x = RAND(1, 1000, 5000)
x = RAND(-1000, -100, -5000)

Новые возможности функции REPLACE

Добавлен опциональный 4й параметр, указывающий максимальное количество замен искомой строки.
Синтаксис:

REPLACE([$исходный текст], [$значение для поиска], [$значение для замены], [#количество замен])

Если [$значение для замены] не указано, то используется пустая строка (т.о. из текста будут удалены все искомые подстроки).

Если количество замен не указано, то функция заменяет все вхождения строки [$значение для поиска], иначе заменяет только первые [#количество замен] подстрок.

Функция возвращает текст, получившийся после замены подстрок в [$исходный текст].

Оригинал статьи: https://qsp.org/index.php?option=com_content&view=article&id=166&catid=34&Itemid=76