API Rnd - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Rnd

Оглавление · Алфавитный указатель · BASIC built-ins

ClassicUO • Runtime API

Возвращает псевдослучайную дробь с управлением последовательностью.

Точный синтаксис

Rnd() -> Decimal
Rnd(seedMode:Any) -> Decimal

Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.

Параметры

  • seedMode — Необязательное число. >0 или отсутствие — следующее число; 0 — повтор последнего (при первом вызове создаёт его); <0 — заново инициализирует последовательность по этому значению и возвращает её первое число.

Возвращает

Decimal в полуинтервале [0,1): 0 допустим, 1 не возвращается. Это не случайное целое. Последовательность принадлежит текущему runtime и не предназначена для криптографии.

Поведение

  • Отрицательное значение каждый раз сбрасывает генератор. Для продолжения после Rnd(-123) вызывайте Rnd() либо Rnd(1), а не снова Rnd(-123).
  • Для целых чисел в включительном диапазоне используйте Random(min,max).

Примеры

Пример 1. Новая случайная дробь

# Новая случайная дробь
#
# Возвращает псевдослучайную дробь с управлением последовательностью.
#
# Decimal в полуинтервале [0,1): 0 допустим, 1 не возвращается. Это не случайное целое.
# Последовательность принадлежит текущему runtime и не предназначена для криптографии.

SUB Main()
    # Аргументов нет: берётся следующий элемент последовательности.
    # Результат не меньше 0 и строго меньше 1.

    VAR value = Rnd()
    UO.Print(CStr(value))
END SUB

Разбор параметров и выполнения:

  • Аргументов нет: берётся следующий элемент последовательности.
  • Результат не меньше 0 и строго меньше 1.

Пример 2. Повторить последний результат

# Повторить последний результат
#
# Возвращает псевдослучайную дробь с управлением последовательностью.
#
# Decimal в полуинтервале [0,1): 0 допустим, 1 не возвращается. Это не случайное целое.
# Последовательность принадлежит текущему runtime и не предназначена для криптографии.

SUB Main()
    # seedMode=0 повторяет уже созданный результат.
    # Сравнение даст 1, если между этими строками не было другого вызова Rnd в том же runtime.

    VAR first = Rnd()
    VAR same = Rnd(0)
    UO.Print(STR(first = same))
END SUB

Разбор параметров и выполнения:

  • seedMode=0 повторяет уже созданный результат.
  • Сравнение даст 1, если между этими строками не было другого вызова Rnd в том же runtime.

Пример 3. Воспроизводимая последовательность

# Воспроизводимая последовательность
#
# Возвращает псевдослучайную дробь с управлением последовательностью.
#
# Decimal в полуинтервале [0,1): 0 допустим, 1 не возвращается. Это не случайное целое.
# Последовательность принадлежит текущему runtime и не предназначена для криптографии.

SUB Main()
    # -123 сбрасывает последовательность; вызов без аргумента продолжает её.
    # Первое и repeated совпадут. Повторный сброс не выдаёт second.

    VAR first = Rnd(-123)
    VAR second = Rnd()
    VAR repeated = Rnd(-123)
    UO.Print(STR(first = repeated))
END SUB

Разбор параметров и выполнения:

  • -123 сбрасывает последовательность; вызов без аргумента продолжает её.
  • Первое и repeated совпадут. Повторный сброс не выдаёт second.