reckfellENGINE

RandomNumberGenerator

Независимый генератор игровой псевдослучайной последовательности.

На этой странице
class RandomNumberGeneratorReckfellSharpНаследует RefCounted

У экземпляра собственные Seed/State; конструктор случайно инициализируется. Задайте Seed для повторяемого начала, сохраните/верните State для продолжения. Если восстанавливаете оба, сначала Seed, затем State. Параметры и порядок вызовов должны совпадать.

Не обещает криптографическую защиту, сетевой детерминизм или одинаковую последовательность будущих версий. RandWeighted возвращает индекс: валидируйте конечные неотрицательные веса и конечную положительную сумму. Отсутствие выбора −1 нельзя использовать как индекс массива.

Практическое руководство.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

RandomNumberGeneratorКонструктор
# RandomNumberGenerator
C#
public RandomNumberGenerator();

Создаёт отдельный генератор с собственным Seed и State и автоматически вызывает Randomize(). Нулевые значения из метаданных справочника не являются обещанием начального seed. Для повторяемого результата задайте Seed до первого случайного вызова. Автоматическая инициализация не гарантирует уникальный seed для каждого созданного экземпляра.

Свойства2

SeedСвойство
# Seed
C#
public ulong Seed { get; set; }

Задаёт начало последовательности и сбрасывает её состояние. При восстановлении Seed/State сначала устанавливайте Seed.

StateСвойство
# State
C#
public ulong State { get; set; }

Состояние для продолжения последовательности с сохранённого места. Восстанавливайте ранее сохранённое значение после Seed; порядок следующих вызовов важен.

Методы12

GetSeedulong
# GetSeed
C#
public ulong GetSeed();

Возвращает seed, с которого начался текущий поток, как свойство Seed. Чтение не продвигает генератор. Randi и другие случайные вызовы меняют State, но не превращают Seed в текущее состояние.

Возвращает ulong

Последнее значение инициализации от SetSeed/Seed либо Randomize, как ulong.

GetStateulong
# GetState
C#
public ulong GetState();

Возвращает текущее состояние, как свойство State, без продвижения генератора. Сохранённое значение позволяет продолжить последовательность; начальный Seed не заменяет снимок State.

В примере оба ulong хранятся десятичными строками. Это сохраняет все 64 бита при передаче через форматы, где числа могут преобразовываться в double или знаковый 64-битный тип. TryRestore сначала проверяет обе строки и только затем меняет генератор: Seed перед State. Ошибка ввода не сбрасывает исходное состояние.

C#
using System.Globalization;
using Reckfell;

public static class RandomCheckpoint
{
    public static string[] Capture(RandomNumberGenerator rng) =>
    [
        rng.Seed.ToString(CultureInfo.InvariantCulture),
        rng.State.ToString(CultureInfo.InvariantCulture)
    ];

    public static bool TryRestore(RandomNumberGenerator rng, string seedText, string stateText)
    {
        if (!ulong.TryParse(seedText, NumberStyles.None, CultureInfo.InvariantCulture, out ulong seed)
            || !ulong.TryParse(stateText, NumberStyles.None, CultureInfo.InvariantCulture, out ulong state))
            return false;
        rng.Seed = seed;
        rng.State = state;
        return true;
    }
}

После восстановления повторяйте те же методы с теми же параметрами и в том же порядке. Пример проверен с JSON-массивом строк через System.Text.Json; это не гарантия сетевой синхронизации или одинаковой последовательности в будущих версиях.

Возвращает ulong

Снимок текущего состояния как ulong; чтение не создаёт случайного значения.

RandWeighted2 перегрузки
# RandWeighted · 1/2
C#
public long RandWeighted(ReadOnlySpan<float> weights);

Выбирает индекс по относительным весам. Проверяйте конечные неотрицательные веса и конечную положительную сумму; при отсутствии выбора −1 не является индексом.

Параметры
ИмяТипПо умолчанию
weightsReadOnlySpan<float>—
weights

Непустой набор конечных неотрицательных весов с конечной положительной суммой. Положение веса определяет возвращаемый индекс. Пустой или отрицательный набор вызывает нативную диагностику; NaN/Infinity следует отвергать до вызова.

Возвращает long

Индекс 0..weights.Length - 1 при корректном выборе, а не значение веса. При отсутствии выбора возвращает -1; проверяйте результат до индексирования. Нулевая сумма не даёт выбора, но продвигает генератор.

# RandWeighted · 2/2
C#
public long RandWeighted(float[] weights);

Выбирает индекс по относительным весам. Проверяйте конечные неотрицательные веса и конечную положительную сумму; при отсутствии выбора −1 не является индексом.

Параметры
ИмяТипПо умолчанию
weightsfloat[]—
weights

Непустой набор конечных неотрицательных весов с конечной положительной суммой. Положение веса определяет возвращаемый индекс. Пустой или отрицательный набор вызывает нативную диагностику; NaN/Infinity следует отвергать до вызова.

Возвращает long

Индекс 0..weights.Length - 1 при корректном выборе, а не значение веса. При отсутствии выбора возвращает -1; проверяйте результат до индексирования. Нулевая сумма не даёт выбора, но продвигает генератор.

Randffloat
# Randf
C#
public float Randf();

Возвращает псевдослучайный float от 0 до 1 с допустимыми обоими концами. Продвигает состояние; не считайте один вызов Randf эквивалентным одному Randi для воспроизведения. Не вычисляйте индекс как (int)(Randf() * Length): при результате 1 получится индекс за границей.

Возвращает float

float в диапазоне [0, 1]. Это не готовый индекс массива.

RandfRangefloat
# RandfRange
C#
public float RandfRange(float from, float to);

Выполняет Randf() * (to - from) + from в float. Использует обычную точность float без завершающего Clamp; учитывайте погрешность округления около границ. Переставленные границы не сортируются: меняется направление преобразования одной случайной величины.

Даже при from == to генератор продвигается; это отличается от RandiRange с равными границами. Конечных аргументов недостаточно для защиты от переполнения: разность float.MaxValue - (-float.MaxValue) не помещается во float, и результат может стать Infinity или NaN.

Параметры
ИмяТипПо умолчанию
fromfloat—
tofloat—
from

Первый конец диапазона. Используйте конечное значение и проверьте представимость to - from.

to

Второй конец диапазона; может быть меньше from. Промежуточные вычисления не насыщаются и не ограничиваются автоматически.

Возвращает float

float после указанного преобразования; при переполнении или некорректных входах возможен нечисловой или бесконечный результат.

Randfnfloat
# Randfn
C#
public float Randfn(float mean = 0f, float deviation = 1f);

Нормально распределённое значение вокруг mean с заданным deviation. Результат не ограничен mean ± deviation; Clamp меняет распределение.

Параметры
ИмяТипПо умолчанию
meanfloat0f
deviationfloat1f
mean

Среднее распределения, по умолчанию 0. Для обычных игровых расчётов используйте конечное значение.

deviation

Масштаб отклонения, по умолчанию 1. Для стандартного отклонения используйте конечное неотрицательное число. 0 возвращает mean, но всё равно продвигает генератор; отрицательное значение API не отклоняет.

Возвращает float

Случайное значение с нормальным распределением при корректных параметрах; не ограничено интервалом mean ± deviation.

Randiuint
# Randi
C#
public uint Randi();

Возвращает псевдослучайный uint и продвигает состояние этого экземпляра. Для индекса массива используйте RandiRange(0, Length - 1) только при Length > 0, а не приведение всего uint к int. Порядок и число случайных вызовов участвуют в воспроизведении.

Возвращает uint

32-битное беззнаковое значение в диапазоне 0..4294967295 включительно.

RandiRangeint
# RandiRange
C#
public int RandiRange(int from, int to);

Возвращает целое с включёнными границами. Для индекса непустого массива используйте 0..Length−1, не 0..Length.

Параметры
ИмяТипПо умолчанию
fromint—
toint—
from

Одна включительная граница int. Порядок границ не важен: используется диапазон от меньшей до большей.

to

Вторая включительная граница int. Для индекса непустого массива верхняя граница — Length - 1.

Возвращает int

int от min(from, to) до max(from, to) включительно, в том числе для полного диапазона int. При равных границах возвращает их значение без продвижения State.

Randomizevoid
# Randomize
C#
public void Randomize();

Повторно инициализирует этот экземпляр значением, зависящим от времени и текущего состояния. Обновляет Seed и State. Не требуется перед каждым выбором: это меняет старт потока и мешает воспроизведению. Вызовы не гарантируют уникальность seed. Для воспроизводимого запуска задавайте Seed явно.

SetSeedvoid
# SetSeed
C#
public void SetSeed(ulong seed);

Устанавливает начальное значение и пересоздаёт внутреннее состояние, как присваивание Seed. Повторная установка того же seed возвращает начало последовательности. Если восстанавливаете seed и состояние, вызовите SetSeed до SetState: обратный порядок сбросит сохранённую точку.

Параметры
ИмяТипПо умолчанию
seedulong—
seed

Начальное значение ulong. При одинаковом алгоритме, параметрах и порядке вызовов задаёт повторяемый старт.

SetStatevoid
# SetState
C#
public void SetState(ulong state);

Заменяет внутреннее состояние, как присваивание State. Сам Seed при этом не меняется. Для продолжения используйте ранее сохранённый GetState()/State; произвольное число не проверяется на пригодность для вашей процедуры воспроизведения. Установка Seed после этого вызова снова переинициализирует состояние.

Параметры
ИмяТипПо умолчанию
stateulong—
state

Ранее сохранённое состояние ulong. Сохраняйте полную точность при записи и чтении.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.