Выбор случайного игрока (из присоединившихся к игре), чтобы каждый гарантированно рано или поздно был выбран

SolitudeSwamp

Участник
Регистрация
20 Июл 2023
Сообщения
2
У меня есть идея, как это реализовать через массив.


Предоставляю псевдокод:

Вход игрока:
# %player%Id = 0

Присоединение к выборке:
Код:
# если flag != 1
   # Добавить каждого игрока в конец массива (кто присоединяется к игре)
   # %player%Id присвоить номер, под которым он вошёл в игру (или же кол-во присоединившихся игроков, включая его)
# Если кол-во присоединившихся игроков = 2
   # flag = 1
   # arrSize = размер массива
   # Функция выбора случайного игрока из массива (функция ниже) (не обязательно сразу вызывать, предполагается отсчёт до начала выбора)

Выбор случайного игрока из массива:
Код:
# Если arrSize = 1
   # Выбрать случайный элемент X в массиве до 1 до arrSize (переменная длины массива)
   # Присвоить элементу массива X элемент массива arrSize
   # игроку, который был на элементе arrSize, а теперь на X, присвоить его личной переменной %selected%Id = X
   # Уменьшить arrSize на 1
# Иначе
   # Выбрать 1ый элемент массива
   # Очистить массив
   # Всем игрокам присвоить %selected%Id = 0
   # flag = 0

Событие выхода игрока:
Код:
# если %player%Id > 0
   # если arrSize = 1
      # очисть массив
      # flag = 0
   # Иначе
      # элементу массива %player%Id присвоить элемент массива arrSize
      # игроку, который был на элементе массива arrSize, в теперь на новом (айди вышедшего игрока), присвоить %selected%Id = (айди вышедшего игрока)
      # arrSize уменьшить на 1


Повторяюсь, это псевдокод, поэтому я не расписывал каждое действие подробно и возможны некоторые недочёты


Предполагаемая работа кода на примере:

Код:
["Steve", "Alex", "Notch", "Herobrine"]
arrSize = 4
X = 2 (случайное от 1 до 4)
Выбран: Alex

["Steve", "Herobrine", "Notch", "Herobrine"]
arrSize = 3
X = 3 (случайное от 1 до 3)
Выбран: Notch

["Steve", "Herobrine", "Notch", "Herobrine"]
arrSize = 2
X = 1 (случайное от 1 до 2)
Выбран: Steve

["Herobrine", "Herobrine", "Notch", "Herobrine"]
arrSize = 1
X = 1 (т.к. arrSize = 1)
Выбран: Herobrine

Напишите, возможно ли это на мл, и где я мог допустить ошибки


ВСЕ ВАШИ ИДЕИ ИЛИ ДОРАБОТКИ С ЗАМЕЧАНИЯМИ ЖДУ НИЖЕ!
 
Последнее редактирование:

SolitudeSwamp

Участник
Регистрация
20 Июл 2023
Сообщения
2
Ах, да. Совсем забыл про функцию удаления массива. Думаю, будет проще использовать ее и всем игрокам убавлять id на единицу
 

legendaleto

Участник
Регистрация
31 Янв 2024
Сообщения
17
☠️☠️☠️
Бро, есть такая функция кода как "фильтр случайности"
Просто выбираешь игроков, который присоединился к очереди и блоком выборки выбираешь действие "фильтр случайности "[1] и всë, код возьмет из всех игроков только одного и дальше делаешь с ним действия
 

SolitudeSwamp

Участник
Регистрация
20 Июл 2023
Сообщения
2
☠️☠️☠️
Бро, есть такая функция кода как "фильтр случайности"
Просто выбираешь игроков, который присоединился к очереди и блоком выборки выбираешь действие "фильтр случайности "[1] и всë, код возьмет из всех игроков только одного и дальше делаешь с ним действия
Прикинь, зайдет какой-нибудь анлаки мен и его ни разу не выберет
Сообщение объединено:

У моей идеи есть конечно и минусы, например, можно будет знать, кто будет выбран последним, но если это не влияет на геймплей, то можно так делать
 
Сверху