Кубик и рандом в игре | SpaceBootlez Wiki
В SpaceBootlez влияние рандома минимально, в большинстве ситуаций все последствия своих действий можно точно просчитать. Рандом проявляет себя лишь в четырёх ситуациях:
1. Генерация карты.
2. Определение места старта сразу после генерации. (определяется правым кубиком)
3. Получение карточки из колоды. (Определяется левым кубиком).
4. Нападение пиратов .
Генерация картEdit
- Чтоб сгенерировать космос, нужно растянуть ячейку слева на всю карту
КубикиEdit
В игре имеется два кубика. Оба они расположены под тактической картой. Чтоб кинуть кубик, надо выбрать любую пустую ячейку и нажать backspace, после чего все рандомные генераторы, в том числе и кубики, изменят свои значения.
Левый — для карточек. Правый — для заселения.
Левый кубик используется тогда, когда игрок покупает карточку . В этом случае он кидает кубик, ячейки которого укажут, какую карточку по горизонтали и по вертикали он должен выбрать из таблицы карточек.
Правый кубик используется только для того, чтоб на старте игры определить, в какой системе у игрока окажется столица . Точно так же ячейки кубика укажут на положение столицы по горизонтали и вертикали.
Пираты не могут нападать каждый ход. Они могут напасть лишь в определённые ходы, которые
Череп-индикатор
определяются случайным образом. Могут напасть пираты в этот ход или нет можно определить с помощью индикатора справа, в котором периодически появляется череп.
spacebootlez.wikia.com
Генератор случайных чисел онлайн | Рандом чисел
Диапазон случайных чисел:
Сгенерировать числа
Пожалуйста, помогите нам развиваться: Расскажите друзьям про генератор!
Случайное | рандомное число онлайн в 1 клик
Числа окружают нас с самого рождения и играют важную роль в жизни. У многих людей сама работа связана с числами, кто-то полагается на удачу, заполняя числами лотерейные билеты, а кто-то придает им и вовсе мистическое значение. Так или иначе, иногда нам не обойтись без того, чтобы воспользоваться такой программой, как генератор рандомных чисел.
К примеру, вам необходимо организовать розыгрыш призов среди подписчиков вашей группы. Быстро и честно выбрать призеров и поможет наш генератор случайных чисел онлайн. Вам просто нужно, например, задать нужное количество рандомных чисел (по числу призеров) и максимальный диапазон (по числу участников, если им присвоены номера). Подтасовка в таком случае полностью исключается.
Эта программа может также послужить как генератор случайных чисел для лото. К примеру, вы купили билет и хотите полностью полагаться на случайность и удачу в выборе чисел. Тогда наш рандомайзер чисел поможет заполнить ваш лотерейный билет.
Как сгенерировать случайное число: инструкция
Программа случайных чисел работает очень просто. Вам даже не нужно загружать ее на компьютер – все делается в окне браузера, где открыта эта страница. Генерация случайных чисел происходит в соответствии с заданным количеством чисел и их диапазоном – от 0 до 999999999. Чтобы сгенерировать число онлайн, необходимо:
- Выбрать диапазон, в котором вы хотите получить результат. Возможно, вы хотите отсечь числа до 10 или, скажем, 10000;
- Исключить повторения – выбрав этот пункт, вы заставите рандомизатор чисел предлагать вам только уникальные комбинации в рамках определенного диапазона;
- Выбрать количество чисел – от 1 до 99999;
- Нажать кнопку «Сгенерировать числа».
Сколько бы вы чисел не хотели получить в результате, генератор простых чисел выдаст весь результат сразу и вы сможете увидеть его на этой странице, листая поле с числами при помощи мышки или тачпада.
Теперь вы можете воспользоваться готовыми числами так, как вам это необходимо. Из поля с числами вы можете скопировать результат для публикации в группе или отправке по почте. А чтобы результат не вызывал ни у кого сомнений, сделайте скриншот этой страницы, на которой будут хорошо видны параметры рандомизатора чисел и результаты работы программы. Изменить числа в поле невозможно, поэтому возможность подтасовки исключается. Надеемся, вам помог наш сайт и генератор случайных чисел.
generator-online.com
Случайное распределение урона в RPG / Habr
Для вычисления урона от атаки в таких настольных ролевых играх, как Dungeons & Dragons, используются броски урона
. Это логично для игры, чей процесс основан на бросках кубиков. Во многих компьютерных RPG урон и другие атрибуты (сила, очки магии, ловкость и т.д.) вычисляются по похожей системе.Обычно сначала пишется код вызова random()
, а затем результаты корректируются и подстраиваются под нужное игре поведение. В этой статье будут рассмотрены три темы:
- Простые корректировки — среднее значение и дисперсия
- Добавление асимметрии — отбрасывание результатов или добавление критических попаданий
- Полная свобода в настройке случайных чисел, неограниченная возможностями кубиков
Основы
В этой статье предполагается, что у вас есть функция
random(N)
, возвращающая случайное целое число в пределах от 0
до range-1
. В Python можно использовать random.randrange(N)
. В Javascript можно пользоваться Math.floor(N * Math.random())
. В стандартной библиотеке C есть rand() % N
, но она плохо работает, так что используйте другой генератор случайных чисел. В C++ можно подключить uniform_int_distribution(0,N-1)
к объекту генератора случайных чисел. В Java можно создать объект генератора случайных чисел с помощью new Random()
, а затем вызывать для него .nextInt(N)
. В стандартных библиотеках многих языков нет хороших генераторов случайных чисел, но существует множество сторонних библиотек, например, PCG для C и C++.Давайте начнём с одного кубика. На этой гистограмме показаны результаты бросков одной 12-сторонней кости: 1+random(12)
. Поскольку random(12)
возвращает число от 0 до 11, а нам нужно число от 1 до 12, мы прибавляем к нему 1. На оси X расположен урон, на оси Y — частота получения соответствующего урона. Для одной кости бросок урона 2 или 12 так же вероятен, как и бросок 7.
Для броска нескольких кубиков полезно использовать запись, применяемую в играх с костями: NdS означает, что нужно бросить S-сторонню кость N раз. Бросок одной 12-сторонней кости записывается как sided 1d12; 3d4 означает, что нужно бросить 4-стороннюю кость три раза. В коде это можно записать как 3 + random(4) + random(4) + random(4)
.
Давайте бросим две 6-сторонние кости (2d6) и суммируем результаты:
damage = 0
for each 0 ≤ i < 2:
damage += 1+random(6)
Результаты могут находиться в пределах от 2 (на обеих костях выпала 1) до 12 (на обеих костях выпала 6). Вероятность получения 7 выше, чем 12.
Что произойдёт, если мы увеличим количество костей, но уменьшим их размер?
Самый важный эффект — распределение станет не
Постоянные смещения
Часть оружия в Dungeons & Dragons даёт бонусный урон. Можно записать 2d6+1, чтобы обозначить бонус +1 к урону. В некоторых играх броня или щиты снижают урон. Можно записать 2d6-3, что обозначает снятие 3 очков урона (в этом примере я предположу, что минимальный урон равен 0).
Попробуем смещать урон в отрицательную (для снижения урона) или в положительную (для бонуса урона) стороны:
Прибавляя бонус урона или вычитая заблокированный урон, мы просто смещаем всё распределение влево или вправо.
Дисперсия распределения
При переходе от 2d6 к 6d2 распределение становится уже и смещается вправо. Как мы видели в предыдущем разделе, смещение — это простой сдвиг. Давайте рассмотрим дисперсию распределения.
Определим функцию для N бросков подряд random(S+1)
, возвращающую число от 0 до N*S:
function rollDice(N, S):
# Сумма N костей, каждая из которых имеет значение от 0 до S
value = 0
for 0 ≤ i < N:
value += random(S+1)
return value
Генерирование случайных чисел от 0 до 24 с помощью нескольких костей даёт следующее распределение результатов:
При увеличении количества бросков и сохранении постоянного диапазона от 0 до N*S распределение становится уже
Примечание: при увеличении количества сторон S (см. изображения ниже) и делении результата на S распределение приближается к нормальному. Простой способ случайного выбора из нормального распределения — преобразование Бокса-Мюллера.
Асимметрия
Распределения для
rollDice(N, S)
симметричны. Значения меньше среднего так же вероятны, как и значения выше среднего. Подойдёт ли это для вашей игры? Если нет, то существуют разные техники создания асимметрии.Отсечение бросков или перебрасывание
Предположим, нам нужно, чтобы значения больше среднего были более частыми, чем меньше среднего. Такая схема редко используется для урона, но применима для таких атрибутов, как сила, интеллект и т.д. Один из способов её реализации — сделать несколько бросков и выбрать лучший результат.
Давайте попробуем бросить кубики rollDice(2,20)
дважды и выберем максимальный результат:
roll1 = rollDice(2, 20)
roll2 = rollDice(2, 20)
damage = max(roll1, roll2)
При выборе максимального из rollDice(2, 12)
и rollDice(2, 12)
у нас получится число от 0 до 24. Ещё один способ получения числа от 0 до 24 — использовать rollDice(1, 12)
трижды и выбрать лучшие два из трёх результатов. Форма будет ещё более ассиметричной, чем при выборе одного из двух rollDice(2, 12)
:
roll1 = rollDice(1, 12)
roll2 = rollDice(1, 12)
roll3 = rollDice(1, 12)
damage = roll1 + roll2 + roll3
# теперь отбрасываем наименьшее:
damage = damage - min(roll1, roll2, roll3)
Ещё один способ — перебрасывать наименьший результат. В целом он похож на предыдущие подходы, но немного отличается в реализации:
roll1 = rollDice(1, 8)
roll2 = rollDice(1, 8)
roll3 = rollDice(1, 8)
damage = roll1 + roll2 + roll3
# теперь отбрасываем наименьшее и бросаем снова:
damage = damage - min(roll1, roll2, roll3)
+ rollDice(1, 8)
Любой из этих подходов можно использовать для обратной асимметрии, сделав более частыми значения меньше среднего. Можно также считать, что распределение создаёт случайные всплески высоких значений. Такое распределение часто используется для урона и редко — для атрибутов. Здесь max()
мы меняем на min()
:
roll1 = rollDice(2, 12)
roll2 = rollDice(2, 12)
damage = min(roll1, roll2)
Отбрасываем наибольшее из двух бросков
Критические удары
Ещё один способ создания случайных всплесков высокого урона — их более непосредственная реализация. В некоторых играх определённый бонус даёт «критический удар». Простейший бонус — это дополнительный урон. В представленном ниже коде урон от критического удара прибавляется в 5% случаев:
damage = rollDice(3, 4)
if random(100) < 5:
damage += rollDice(3, 4)
Вероятность критического урона 5%
Вероятность критического урона 60%
В других подходах к добавлению асимметрии используются дополнительные атаки: при критических ударах есть шанс на срабатывание дополнительных критических ударов; при критических ударах срабатывает вторая атака, пробивающая защиту; при критических ударах противник промахивается при атаке. Но в этой статье я не буду рассматривать распределение урона при множественных атаках.
Попробуем создать собственное распределение
При использовании случайности (урон, атрибуты и т.д.) надо начинать с описания характеристик распределения, которое нам требуется для игрового процесса:
- Интервал: какими будут минимальное и максимальное значения (если они есть)? Используйте масштабирование и смещение, чтобы уместить распределение в этом интервале.
- Дисперсия: насколько часто значения должны быть близки к среднему? Можно использовать меньшее количество бросков для большей дисперсии или большее количество для меньшей дисперсии.
- Асимметрия: нужно ли, чтобы чаще встречались значения больше или меньше среднего? Используйте min, max или критические бонусы для добавления в распределение асимметрии.
Вот пара примеров с некоторыми из параметров:
value = 0 + rollDice(3, 8)
# Min с перебрасыванием:
value = min(value, 0 + rollDice(3, 8))
# Max с перебрасыванием:
value = max(value, 0 + rollDice(3, 8))
# Критический бонус:
if random(100) < 15:
value += 0 + rollDice(7, 4)
value = 0 + rollDice(3, 8)
# Min с перебрасыванием:
value = min(value, 0 + rollDice(3, 8))
value = 0 + rollDice(3, 8)
# Max с перебрасыванием:
value = max(value, 0 + rollDice(3, 8))
# Критический бонус:
if random(100) < 15:
value += 0 + rollDice(7, 4)
Существует множество других способов структурирования случайных чисел, но надеюсь, эти примеры дали понятие о том, насколько уже гибка система. Стоит посмотреть также на этот калькулятор бросков урона. Однако иногда сочетаний бросков кубиков недостаточно.
Произвольные формы
Мы начали с входных алгоритмов и изучения соответствующих им выходных распределений. Нам пришлось перебирать множество входных алгоритмов, чтобы найти нужный нам результат на выходе. Есть ли более прямой способ получения подходящего алгоритма? Да!
Давайте сделаем наоборот и начнём с нужных нам выходных данных, представленных в виде гистограммы. Попробуем сделать это на простом примере.
Предположим, мне нужно выбирать из 3, 4, 5 и 6 в следующих пропорциях:
Это не соответствует ничему, что можно получить бросками костей.
Как написать код для этих результатов?
x = random(30+20+10+40)
if x < 30: value = 3
else if x < 30+20: value = 4
else if x < 30+20+10: value = 5
else: value = 6
Изучите этот код и разберитесь, как он работает, прежде чем переходить к следующим шагам. Давайте сделаем код более общим, чтобы его можно было использовать для разных таблиц вероятностей. Первый шаг — это создание таблицы:
damage_table = [ # массив (вес, урон)
(30, 3),
(20, 4),
(10, 5),
(40, 6),
];
В этом написанном вручную коде каждая конструкция
if
сравнивает x
с общей суммой вероятностей. Вместо того, чтобы писать отдельные конструкции if
с заданными вручную суммами, мы можем циклически перебирать все записи таблицы:cumulative_weight = 0
for (weight, result) in table:
cumulative_weight += weight
if x < cumulative_weight:
value = result
break
Последнее, что нужно обобщить — сумму записей таблицы. Давайте вычислим сумму и используем её для выбора случайного x:
sum_of_weights = 0
for (weight, value) in table:
sum_of_weights += weight
x = random(sum_of_weights)
Объединив всё вместе, мы можем написать функцию для поиска результатов в таблице и функцию для выбора случайного результата (можно превратить их в методы класса таблицы урона):
function lookup_value(table, x):
# считаем, что 0 ≤ x < sum_of_weights
cumulative_weight = 0
for (weight, value) in table:
cumulative_weight += weight
if x < cumulative_weight:
return value
function roll(table):
sum_of_weights = 0
for (weight, value) in table:
sum_of_weights += weight
x = random(sum_of_weights)
return lookup_value(damage_table, x)
Код генерирования чисел из таблицы очень прост. Для моих задач он был достаточно быстрым, но если профайлер сообщает, что он слишком медленный, попробуйте ускорить линейный поиск двоичным/интерполяционным поиском, таблицами поиска или методом псевдонимов. См. также метод обратного преобразования.
Рисуем собственное распределение
Этот способ удобен тем, что позволяет использовать любую форму.
damage_table = [(53,1), (63,2), (75,3), (52,4), (47,5), (43,6), (37,7), (38,8), (35,9), (35,10), (33,11), (33,12), (30,13), (29,14), (29,15), (29,16), (28,17), (28,18), (28,19), (28,20), (28,21), (29,22), (31,23), (33,24), (36,25), (40,26), (45,27), (82,28), (81,29), (76,30), (68,31), (60,32), (54,33), (48,34), (44,35), (39,36), (37,37), (34,38), (32,39), (30,40), (29,41), (25,42), (25,43), (21,44), (18,45), (15,46), (14,47), (12,48), (10,49), (10,50)]
С помощью этого подхода мы можем выбрать распределение, соответствующее любому игровому процессу, не ограниченное распределениями, создаваемыми бросками костей.
Заключение
Случайные броски урона и случайные атрибуты реализуются просто. Вы, как гейм-дизайнер, должны сами выбирать свойства, которыми будет обладать конечное распределение. Если вы будете использовать броски кубиков:
- Для управления дисперсией используйте количество бросков. Малое количество соответствует высокой дисперсии, и наоборот.
- Для управления масштабом используйте смещение и размер кости. Если вы хотите, чтобы случайные числа находились в интервале от X до Y, то при каждом из N бросков должно получаться случайное число от 0 до (Y-X)/N, после чего к нему прибавляется X. Положительные смещения можно использовать для бонусов урона или бонусов атрибутов. Отрицательные смещения можно использовать для блокировки урона.
- Для более частых значений больше или меньше среднего используйте асимметрию. Для бросков атрибутов чаще требуются значения выше среднего, их можно получить выбором максимального, лучшего из трёх или перебрасыванием минимального значения. Для бросков урона чаще требуются значения ниже среднего, их можно получить выбором минимального или критическими бонусами. Для сложности случайных встреч с врагами тоже часто используются значения ниже среднего.
Подумайте о том, как должно варьироваться распределение в вашей игре. Бонусы атаки, блокировка урона и критические удары можно использовать для варьирования распределения с простыми параметрами. Эти параметры можно связать с предметами в игре. Воспользуйтесь «песочницей» в оригинале статьи, чтобы понаблюдать, как эти параметры влияют на распределения. Задумайтесь о том, как должно работать распределение при повышении уровня игрока; см. на этой странице информацию об увеличении и уменьшении дисперсии со временем при вычислении распределений с помощью AnyDice (о которой есть отличный блог).
В отличие от игроков в настольные игры с костями, вы не ограничены распределениями на основе сумм случайных чисел. С помощью кода, написанного в разделе «Попробуем создать собственное распределение», вы можете использовать любое распределение. Можете написать визуальный инструмент, позволяющий рисовать гистограммы, сохранять данные в таблицы, а затем отрисовывать случайные числа на основе этого распределения. Можете изменять таблицы в формате JSON или XML. Можно также редактировать таблицы в Excel и экспортировать их в CSV. Распределения без параметров обеспечивают большую гибкость, а использование таблиц данных вместо кода позволяет выполнять быстрые итерации без повторной компиляции кода.
Существует множество способов реализации интересных распределений вероятностей на основе простого кода. Сначала определитесь с теми свойствами, которые вам необходимы, а затем подбирайте под них код.
habr.com
Бросаем кубик
- GlobalLabГлобальная школьная лаборатория
Присоединиться С чего начать?
- Идеи
- Проекты
- Курсы
- Сообщество
- Участники
- Группы
- Новости
- Новости
- Блог тьютора
- Беседа с профессионалом
- Scholāris GlobalLabis
- Участнику
- О ГлобалЛаб
- Справочник
- Календарь
- Конкурсы и события
- Бонусная программа
- Педагогу
- Родителю
- Магазин
- Магазин
- Купить подписку
- Активировать по номеру
- Вход на сайт
- Мой профиль
- Мои награды
- Моё портфолио
- Мои черновики
- Мои проекты
- Мои группы
- Редактировать профиль
- Мои сообщения
- Выход
- ru
- Информация
- Исследование
- Результаты 403
globallab.org
Генератор случайных чисел онлайн — RandGenerator.ru
Сервисы автоматического создания сложных паролей, которые пользователи впоследствии могут использовать для регистрации аккаунтов в интернете, неизменно работают на безе генератора случайных числе (ГСЧ). Процедура работы такого сервиса, по крайней мере — для обычного пользователя, выглядит достаточно просто. Генератор случайных чисел онлайн в хаотичном порядке группирует некую комбинацию, при этом работа алгоритма не подвержена каким-либо сторонним влияниям.Во избежание необоснованного усложнения информации — возьмем для примера простейшие генераторы случайных чисел, которые на заре разработки подобных алгоритмов принимались специалистами за основу. Едва ли найдется человек, ни разу не использовавший кубики с разным количеством точек на каждой из сторон (кости). Такие кубики, являющиеся неизменными спутниками азартных или настольных игр, как раз и представляют собой самый простой — но при этом истинный генератор случайных чисел.
Принцип использования игральных кубиков для генерации случайных чисел в научных целях еще в конце девятнадцатого века описал английский исследователь Фрэнсис Гальтон. Однако для генерации значительных массивов данных столь простой способ оказался непригодным. С течением времени появились специальные программы, где количество случайных чисел было многократно увеличено. В частности, подобные программы используются в лотереях и онлайн казино.
Генератор чисел онлайн рандом
В случае с паролями — генератор чисел онлайн рандом создает более сложную смешанную комбинацию. Результатом работы генератора становится комбинация из чисел и букв, причем последние — выдаются машиной с учетом регистра. Впрочем, сервис создания сложных паролей, это один из вариантов применения генератора случайных чисел. В классическом виде алгоритм также используется в ряде областей.Однако, не вдаваясь в вопросы научных изысканий — наиболее известная область применения ГСЧ, это автоматическое определение победителя в масштабных лотереях. В качестве примера одного из таких крупномасштабных розыгрышей — можно назвать английскую лотерею облигаций. Специально для определения выигрышных номеров по принципу генератора чисел в 1957 году была разработана машина Electronic Random Number Indicator Equipment (в 2004 году разработана уже четвертая версия ERNIE).
Генератор псевдослучайных чисел онлайн
Говоря о ГСЧ, нельзя не упомянуть и о генераторе псевдослучайных чисел. Генератор псевдослучайных чисел онлайн представляет собой алгоритм, создающий комбинацию — элементы которой практически независимы друг от друга, но подчиняются заданному распределению. При условии хорошего алгоритма, сгенерированная комбинация пройдет большинство проверок на случайность, однако основной характеристикой такой последовательности — является период повторения. Однако, период повторения в генераторе псевдослучайных чисел неизменно больше рабочего интервала (диапазон числе для составления комбинации).Ответ на вопрос об отличиях ГСЧ от генератора псевдослучайных чисел — требует отдельного материала, насыщенного рядом малопонятных неспециалисту научных терминов. При желании, а также наличии значительного количества свободного времени — ознакомиться с подобными материалами не составляет большого труда.
Пользователю же нашего сервиса «генератор случайных чисел онлайн бесплатно» гарантируется хаотичная и истинно случайная комбинация.
randgenerator.ru
Мысли на тему Рандом. Как правильно заменить кубик картами? | все о настольных играх
Есть игры в которых от броска кубиков зависит многое.
И неудачные броски способны испортить всё впечатление от проведенной партии или игры в целом.
Пример http://tesera.ru/user/Michael/journal/152163/comments/#post166503
Решение найдено давно — заменить кубики набором карт с цифрами от 1 до 6 (для 6-гранного дайса).
Собственно тема данной записи, а как лучше это реализовать?
1. Общая колода карт для всех игроков или для каждого персональная. как лучше?
2. Сколько комплектов карт должно быть в колоде.
Тут я вижу две крайности.
— 10 и более наборов карт (итого 60 карт в колоде). В этом случае игрок не застрахован, что ему будут идти на руку 5-6 едениц подряд, а нужную ему 6 он будет ждать 20-30 вытягиваний (бросков). В общем факически тот же кубик.
— вторая, это 2-3 набора карт (12-18 карт в колоде). Тогда в игре может появиться «менеджмент кубика». «Ага, я вытащил все 5 и 6, значит не стоит проводить сейчас важные атаки, так как я вытяну низкое значение кубика!»
В некоторых играх — это основа механики, но вряд ли стоит её добавлять туда, где она не планировалась автором.
Ещё как вариант перетасовывать колоду после того как она будет использована на половину или 2\3. Или добавить карту(ы) «перемешай колоду».
Так как поступить лучше?
1. общая колода или у каждого персональная?
2. Сколько комплектов карт в колоде?
3. Колоду использовать до конца или перемешивать после какого-то значения (выпадени карты «перемешать»)?
Заранее спасибо за ваше мнение.
PS Ну и реализация.
Для игр в реале я думаю сделать ПнП таких колод.
Для игр в онлайне, возможно стоит сделать модуль например на Дзунте. И запускать его одновременно с Вассалом. благо там можно удобно тасовать колоды и открывать карты. (А то в васале в последнее время беда с кубиком)
tesera.ru
Обсуждение:Рандом — Lurkmore
- Нормального распределения там и не надо. Надо распределение Бернулли. Но его тоже нет. C любовью, ваш Капитан Очевидность
- эээ, вроде бы от рандомизаторов обычно требуется равномерное распределение с возможно большей независимостью последовательных значений. Это я чего-то не понимаю или К.О. здесь фейковый?
- Просто равномерное распределение — штука абстрактная ибо оно непрерывное, так что на самом деле используется дискретное биномиальное. А Бернулли это частный случай биномиального. Впрочем, как человек имеющий к ММОРПГ непосредственное отношение могу сказать, что игроки всегда будут обвинять рандом в кривизне, даже если он нормальный. А «как можно большая независимость последовательных значений» это ересь, ибо все испытания должны быть независимыми, иначе это уже не рандом. Хм, может это в обсуждение сунуть?
- Игроки всегда во всем обвиняют рандом. Многие считают, что «раз столько раз сфейлилось, то щас уж точно проканает, там же ХХ% шанс», забывая, что рандом никому и ничего не должен, а следующий результат какбэ не зависит от предыдущего. Алсо, любой школьник может написать на любом доступном ему языке код, выдающий в цикле овер 9000 рандомных «да/нет» (псевдо, но кого это волнует?), и лично убедиться, что получить подряд туеву хучу «нет» очень даже возможно. Добавлю также, что конкретно в сервере л2 рандом не самописный, там обычный библиотечный rand().
- Хуле бы его не обвинять, если в результате его работы получается хрень.
- Результат рандома от игрока не зависит, зато игровой процесс от рандома – да. Рандом уменьшает влияние игрока на игровой процесс, оставляя его лишь наблюдать за «случайным» результатом, повторяя однообразные действия в ожидании выпадения лучшего результата. Рандом ворует игровой процесс у игрока. Рандом переворачивает взаимодействие так, что игра начинает «играть» в игрока. Рандом игроку не нужен. Рандом нужен для прикрытия уёбищности игр: уёбищная боевая система прикрывается вероятностями попадания и крита; уёбищные качество и количество подземелий и боссов прикрываются верояностью выпадения лута; уёбищное разнообразие оснащения и улучшений прикрывается боксами; уёбищная заточка уёбищна в своей сути и призвана как можно долше удерживать игрока за добычей материалов в бесконечных попытках улучшить эквип, в случае когда материалы предоставляются за донат – также высосать бесконечное количество денег.
- Рандом – это рак, убивающий игры.
- Игроки всегда во всем обвиняют рандом. Многие считают, что «раз столько раз сфейлилось, то щас уж точно проканает, там же ХХ% шанс», забывая, что рандом никому и ничего не должен, а следующий результат какбэ не зависит от предыдущего. Алсо, любой школьник может написать на любом доступном ему языке код, выдающий в цикле овер 9000 рандомных «да/нет» (псевдо, но кого это волнует?), и лично убедиться, что получить подряд туеву хучу «нет» очень даже возможно. Добавлю также, что конкретно в сервере л2 рандом не самописный, там обычный библиотечный rand().
- Просто равномерное распределение — штука абстрактная ибо оно непрерывное, так что на самом деле используется дискретное биномиальное. А Бернулли это частный случай биномиального. Впрочем, как человек имеющий к ММОРПГ непосредственное отношение могу сказать, что игроки всегда будут обвинять рандом в кривизне, даже если он нормальный. А «как можно большая независимость последовательных значений» это ересь, ибо все испытания должны быть независимыми, иначе это уже не рандом. Хм, может это в обсуждение сунуть?
- эээ, вроде бы от рандомизаторов обычно требуется равномерное распределение с возможно большей независимостью последовательных значений. Это я чего-то не понимаю или К.О. здесь фейковый?
к.о. считает, что теория относительности говорит, что шанс выпадения любого числа в оной таблице равен 50% в каждый момент времени: либо выпадет, либо нет… то-есть, шанс выпадения любого числа всегда в два раза меньше, чем ожидается, что кагбэ намекает быдлоколдинг
Есть мнение, что в ММОРПГ шанс выпадения редких предметов обратно пропорционален числу игроков в данный момент на сервере. Т.е. ночью, когда онлайн только задроты/боты, падает/спойлится лучше.
[править] Библиотечный rand() и остаток от деления
Есть такая тупость, чуть менее чем во всех учебниках по программированию. В стандартной библиотеке си функция rand() возвращает целое значение в диапазоне от 0 до RAND_MAX (для 32-х битных систем это как правило 32767), но на практике почти всегда нужны другие диапазоны, например орёл/решка (0/1), или кубик (от 1 до 6) и т.д. И здесь все быдлокниги(и быдлопреподы) предлагают простую и «изящную» (в своём дебилизме) формулу: «int x = rand() % n», т.е. брать остаток от деления результата вызова rand() на нужное тебе максимальное значение. Кривость этого метода заключается в следующем: например мы «кидаем монетку»(x = rand() % 2), сама по себе функция rand() равномерно выдает числа в своём диапазоне (0..32767), но ей абсолютно плевать какой у них остаток от деления на то или иное число, поэтому она вполне может выдавать чётные числа хоть 10, хоть 20, да хоть сто раз подряд (ещё раз: главное что значения распределяются в изначальном диапазоне равномерно) и мы соответственно получаем многократно выпадающую «решку». Православным способом использования библиотечного rand() является получение значения с плавоющей точкой в диапазоне от 0 до 1: «float x = rand() / float(RAND_MAX)», и уже это нормализированное значение приводить к нужному диапазону простыми математическими преобразованиями.
[править] Срачи из примечаний
К.О. замечает, что не везде нужно именно равномерное распределние. Значительно чаще в реальном мире встречается w:нормальное распределение, а виной всему — w:центральная предельная теорема. Кстати, если один кубик дает равномерное распределение, то сумма двух кубиков уже подчиняется нормальному распределению. Но сути корейского рандома это не меняет.
- ЩИТО? Сумма двух кубиков есть дискретная случайная величина, а нормальное распределение непрерывно.
Капитан Очевидность забывает, что нормальное распределение получают как раз из равномерного w:Преобразование_Бокса_—_Мюллера, да и любые другие тоже. Читайте Кнута, блджад.
- K.O. преобразование — метод, нормальное (гауссово) распределение — результат. И получить нормальное распеределение можно в том числе и бросанием пары костей. Так то.
- Любое распределение легко и непринужденно делается из равномерного. А нормальное распределение — ни разу ни сумма 2 бросаний кубиков, а предел n сумм рандома с любым законом распределения (но все n должны быть одинаковыми) при n стремится к бесконечности, это и есть центральная предельная теорема. На практике используется сумма 5-12 случайных величин, распределенных равномерно.
- Пиздец, нашли из-за чего говнами пуляться. Критерии Пирсона и Стюдента дают для 2 кубиков отрицательный результат — довольны? Дял трёх — положительный; так что анонимус №5 абсолютно прав про ЦПТ, и нехер ебать мозги своими формализмами. Что же касается генераторов, то в программировании и по сей день не умер православный X(p):=q*sqrt(-2ln(sqrt(2*pi)*p*q))+a (ну вы поняли, ага?). И забейте на Вики, думайте своими мозгами, пожалуйста.
- Любое распределение легко и непринужденно делается из равномерного. А нормальное распределение — ни разу ни сумма 2 бросаний кубиков, а предел n сумм рандома с любым законом распределения (но все n должны быть одинаковыми) при n стремится к бесконечности, это и есть центральная предельная теорема. На практике используется сумма 5-12 случайных величин, распределенных равномерно.
А причем тут реализация функции rand() на клиентской стороне? Функция на серверной стороне работает как бе. В игровом клиенте только кнопку нажимают, посылается запрос серверу или получаем ответ, положительный или отрицательный.
[править] Вавилонская лотерея
/r/ запилить в статью Коркиса-Боркиса. Он доставляет.
[править] Вынесенный из статьи высер
Рандом есть результат случайного события, случайное событие в свою очередь есть событие, исход которого оценивающее лицо, не может предвидеть. Есть случаи с нежеланием предвидения, но это отдельная статья. Таким образом рандом может для одного быть нормальным явлением, а для другого полноcтью непредсказуемая система… но это уже больше не Рандом, а его восприятие человеком…
В этих ваших компьютерах существует некое подобие рандома, которое ругают псевдо-рандомом. Псевдо-рандом генерится при помощи жуткого матана, и имеет некоторые недостатки:
- Периодичность — через определенное количество случайных событий они начинают повторяться.
- Некоторые значения в пределе более случайны чем другие… допустим единицы меняются от вызова к вызову часто, а сотни редко.
- Неравномерность — например числа до 100 выпадают реже чем числа после 100
Все это от того, что компьютер не бросает кубик, а вычисляет псевдо-случайную величину по определенной умным пиндосом очень точной формуле.
Существуют также другие аналоги рандома:
- Запрос миллисекунд у биоса на момент надбности рандома — в принципе идея хорошая, но если рандом требуется в течении секунды много раз то недостаток очевиден, второе число будет больше первого, я обещаю. (не будет — например, первый запрос произошел в 997мс, а следующий через скажем через 50мс выдаст уже 043)(а вот если вызывать 25 раз в секунду(например один раз в главном цикле), то в 24 случаях будет)
- Внесение изменений в жуткий матан согласно действиям юзера — такой способ слишком быстро пропаливается пытливыми умами и троллится по полной.
В далекие деревянные времена бейсика прописанного в ПЗУ последовательно брались байты самой программы, а командой Randomize устанавливали по миллисекундам таймера с какого места программы начинать. Но это было давно и совсем уже неправда.
Аппаратные рандомы существуют, но засекречены. И для нормальных компьютеров их почему-то не выпускают. Вероятно они скрывают в себе формулу мира. Так-то! Правда, программер-кун подсказывает, что аппаратные рандомы аля Hardware RNG как минимумом Intel-ом включены во все процессоры, начиная с Pentium III — насладиться труевыми рандомными числами теперь может любой желающий. Также некоторые аноны ВНЕЗАПНО научились извлекать случайные числа из АЦП звуковой карты компьютера. Вот так-то!
Капитан Физика срывает покровы с сов.секретных технологий ZOG и утверждает, что сделать близкий к идеалу ГСЧ под силу любому умеющему паять и быдлокодить. Основываются они на неконтролируемых физических процессах, например:
- Поверхность кипящей жидкости
- Траектория электрической искры
- Распад радиоактивных веществ
- Шумы в радиоэфире
- Можно запилить в ссылки в статье — ГСЧ на основе атмосферных шумов. Да счас и запилю, ёпта.
При этом через определенные или тоже случайные промежутки времени (тут сойдет и программный рандом, поскольку его роль вторична) камера снимает кипяток/искру, подсчитывается количество разрядов в счётчике Гейгера или снимается осциллограмма шума. Для пущего разброса данных и приведения в удобный для обработки вид, результат скармливается хэш-функции — и близкий к идеалу рандом, тащемта, готов.
Штабс-капитан Монте-Карло добавляет, что описанным выше способом не пользуются потому, что трудно добиться достаточного количества случайных чисел в единицу времени. Эдак вам придется кипящими чайниками заставить небольшое кукурузное поле, гектаров на надцать. Во взрослой науке (например, КХД на решетках) требуются миллионы случайных значений в секунду. Есть, конечно, лаборатории, где действительно стоит туева хуча датчиков и идут реальные случайные процессы. Но результаты, которые они получают, по сути слабо отличаются от аналогичных, полученных благодаря грамотно сделанному алгоритму рандома. При этом на их получение уходит в десятки раз больше времени. Вот и приходится напрягать мозг, а не строить квадратно-гнездовым методом сотни установок-генераторов случайных чисел.
Есть же такой костыль в медиавики, идеально подойдет для иллюстрации. Но это к администрации, куда стучать?
Доставляющий рандом из Великой и Ужасной Цивы: Из-за примитивной системы боя между юнитами, зависящей больше всего от рандома, Танки запросто могут проиграть Колесницам.
[править] Плагиат детектед
Признавайтесь, кто заслал эту статью на конференцию «Молодежь и наука»? [1]
- анон, ты доставил! Innominatus
Рандом в Dot’A подобных играх — это распределение, которое неравно. То есть в одной команде игроки слабее, в другой — сильнее.
Ходят упорные слухи, что это связано с неадекватной работой программного RND Windows.
Авторитетно заявляю — хуета, если исползуется, конечно, CryptGetRandom, т.к. это — ГСЧ, рассчитаный на использовании в криптографии, а там требования к СЧ повыше говноигр.
картинко
— Что там было по поводу Великого Немецкого Рандома в X-серии? Это когда рандомно генерируемые нпс корабли получают характеристики, которые могут выходить за свой максимальный предел, или как? Начиная с Terran Conflict я не помню таких приколов (что происходило в более ранних версиях я вообще не помню). И хотя встречались крайне странные конструкции и конфигурации, но они вроде все были запланированными вручную. DirtyR(обсуждение)
lurkmore.to