[ГАЙД] Не повторяющийся рандом без "Если"

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
551
Итак. Способ, который я опишу дальше, придуман лично мной. Начнём.

Я предлагаю хранить все значения рандома в массиве. То есть, у нас будет вот такой массив.
Код:
Индекс | Значение
1      | 1
2      | 2
3      | 3
4      | 4
5      | 5
6      | 6
Индекс соответствует значению, да? Дальше мы просто генерируем случайное значение от 0 до длины массива и получаем по этому индексу значение. Но что мешает нам два раза сгенерировать один и тот же индекс? Ничего.

Сейчас я и расскажу, как я предлагаю сделать уникальное значение рандома. Каждый раз, когда выпадает какое-то значение мы будем сдвигать элемент вперёд и отнимать от длины массива определенное число. Получится вот такой код:
Форматирование (BB-код):
# - пояснения в коде, их никуда переписывать не надо.

Событие игрок заходит в игру
    Если переменная НЕ существует(randomArray) {
        Создать массив(randomArray) #Переменная сохраненная
        Получить длину массива(randomArray, randomArrayLength) #randomArrayLength - сохраненная
    }
    Установить значение переменной; случайное число(randomValue, 0, randomArrayLength)
    Получить значение массива(randomArray, randomValue, randomArrayValue)
    Удалить элемент массива(randomArray, randomValue)
    Добавить в конец массива(randomArray, randomArrayValue)
    Установить значение переменной -=(randomArrayLength)
Объясню: После того как мы получили случайное значение из массива, мы это значение удаляем и ставим в самый конец, а затем отнимаем 1 от переменной с длины. Получается приблизительно так:

1691073888144.png

В идеале сделать это циклом, либо же повторяющейся функцией.

Если что-то непонятно - пишите.​
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
358
Сверху