Задать вопрос
@Boris009

Какие данные берет функция для генерации случайного числа?

Единственное, что пришло в голову это отталкиваться от текущего времени или + даты
Можно как-то спрогнозировать то, что в 00:00 у нас будет больше мелких значений, а в 23:59 больше максимальных?
Или как всё устроено в играх или функции стандартной библиотеки для получения случайных чисел в каждую секунду игры?

Слышал такую теорию, что случайные числа для игр (например Lineage 2 или WoW) не генерируются каждый раз, а заранее на сервере уже создан массив случайных чисел и числе берется от туда, а не генерируется в моменте.
  • Вопрос задан
  • 186 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Go-разработчик с нуля + нейросети
    9 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • Skillbox
    Ал­го­рит­мы и струк­ту­ры дан­ных для раз­ра­бот­чи­ков
    3 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 4
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Время в милиссекундах, количество тактов процессора от включения процессора, какой-нибудь шум накопленный от движения мышкой и вообще активности в системе - все это используется чтобы инициализировать генератор псевдослучайных чисел. А далее, по сложной запутанной математической формуле из одного числа получается последовательность, которую практически невозможно предсказать. Потому что брать каждый раз вермя - будет нифига не случайно, а собирать шум по всей системе долго и сложно.

В онлайн играх сулчайность должна быть одинакова для всех игроков - если вам генератор покажет 10 единиц урона при ударе, а соседу - 20 для этого же самого удара, то в у вас монстр останется жив, а у соседа умрет, что плохо. Плюс, манипуляции со случайностью - это пространство для читов. Поэтому в онлайн играх своя специфика и там имеет смысл случайность оставлять на сервере, да.
Ответ написан
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Да, верно, самый простой способ — это использовать текущее время и далее пропустить его через какой-то алгоритм. Можно даже с использованием каких-то дополнительных значений или прошлых результатов. Обычно, конечно, используется довольно сложные алгоритмы с кучей параметров и несколькими источниками случайных чисел.

Можно как-то спрогнозировать то, что в 00:00 у нас будет больше мелких значений, а в 23:59 больше максимальных?

Да, зная алгоритм можно сделать такой прогноз. И такие типы атак тоже существует и используются во вредоносном ПО. Т.к. если алгоритм уязвимый, то результат его работы можно взломать за более короткое время. Случайные числа — основа современной криптографии.

Слышал такую теорию, что случайные числа для игр (например Lineage 2 или WoW) не генерируются каждый раз, а заранее на сервере уже создан массив случайных чисел и числе берется от туда, а не генерируется в моменте.

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

Так же существуют аппаратные генераторы случайных чисел — специальная микросхема, которая использует реальные физические явления для генерации случайных чисел. Например колебания атомов, шумы в атмосфере, электромагнитные шумы, наводки и прочее. Могу порекомендовать очень интересную лекцию "Сложность конечных последовательностей нулей и единиц и геометрия конечных функциональных пространств" Владимира Арнольда: https://elementy.ru/video/103/Slozhnost_konechnykh...
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В современных процессорах есть генератор случайных чисел (команда RdRand). Там генератор на тепловом шуме с дополнительными алгоритмами для нормализации.
Linux в /dev/random использует накопление энтропии от процессорного ГСЧ, прерываний, системных событий, таймера. Но это накопление не особо быстрое, поэтому полученные значения обычно используют как seed для генератора псевдослучайных значений.
Ответ написан
@rPman
Слышал такую теорию, что случайные числа для игр
для гэмблинга генераторы случайных чисел как минимум должны давать гарантии что казино останется в выигрыше, поэтому и 'случайное число' там такое только при его простом анализе, а по факту нет.

Алгоритмы в играх могут быть сложные и однозначно направленные 'против' игрока.
spoiler
Например, throne and liberty алгоритм выпадения следующего trait (улучшение на предметы, требуется несколько однотипных для завершения), выдает 'не нужные' с бОльшими шансами (причем на порядок, речь идет о десятках не нужных на один нужный), или предмет, выпадающий с редких сундуков, нужный твоему классу не выпадет месяцами, но как только ты купишь такой на аукционе (за итемы которые очень сложно добывать либо нужно покупать за реал) так эти предметы тут же посыпятся. Это подтверждено практикой, и даже есть рекомендация, прокачивать blessing у предметов, вскрыв сначала самые мусорные трейты (которые на аукционе стоят дешевле) а затем сменить их перед самой заточкой, алгоритм определения 'нужности' бцдет подсоввать не нужные но дороже итемы, их можно накопить в сундуке или продавать сразу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы