Задача весьма простая — нам надо получить цепочку случайных чисел так, чтобы ближайшие в ряду числа не повторялись.
Например в выборке от 1 — 3 цепочка должна выглядеть вот так :
1.2.3.2.3.1.2.1.3 и так далее.
Первое, что приходит на ум, это проверять каждое следующее сгенерированное число с предыдущим.
Но, как минимум это будет затратно, ибо на коротких выборках , к примеру 1-2 , будет очень часто попадаться одинаковое число, и потребуется еще один цикл чтобы создать новое.
Посему, как вариант можно убрать после выборки число из массива сразу , чтобы в следующей выборке оно гарантированно отсутствовало.
На схеме это выглядит примерно вот так:
Первая выборка дает нам число 3. Мы его убираем из массива из которого выбираются числа. В следующей выборке этого числа нет, и мы выбираем допустим число 2. После этого возвращаем 3 обратно в массив получая в массиве 4.1.3, так как двойку мы убрали она там точно не попадется.
И далее идет по кругу, столько раз сколько нам надо.
На гифке, сверху результат этого алгоритма , и снизу результат обычного рандома.
выборка от 1 до 9. Выводим 15 чисел.
Ну и для наглядности зажмем дипазон от 1-2.
Тут уже более заметен результат.
Код (для диапазона 1-2):
Алгоритм подходит для того, чтобы например не давать два одинаковых предмета подряд из какого то источника.
Или , представьте, что у нас есть игра в которой мы переходим из одного вагона поезда в другой. Всего у нас 5 нарисованных вагонов, а сам состав из 20 вагонов.
Алгоритм поможет нам собрать состав так, чтобы мы точно не вышли в точно такой же вагон из предыдущего.
Надеюсь вам был полезен этот материал.
Подписывайтесь на канал, вступайте в группу в ВК, и не забывайте что у нас есть дискорд сервер.
Удачи в изучении годо !
#godot #gdscript #программирование #игровой движок #уроки