Сделала небольшой проектик для проверки распределения рандома в движке Game Maker 8 старой версии. Написала простенький код, который кидает рандом и заполняет одну из 6 переменных-счетчиков. За одно нажатие кнопки проходит 100 виртуальных бросков кубика.
Вот как выглядела генерация рандома в DOOM
Вместо того что бы забивать себе голову генераторами чисел они сделали себе таблицу по которой шли последовательно.
На самом деле вопрос "рандома" это интересный вопрос который тысячи геймдизайнеров не могут решить.
Обычно для генерации рандома используют функцию тайм, которая образует стартовое зерно , и берут модуль от магического числа которое прописано в функции Rand стандартной библиотеки Си.
Прикол рандома - что чистый рандом - НИКОГДА не воспринимается игроком как "ЧЕСТНЫЙ"
Гораздо лучше использовать рандом с подкруткой.
пример такого рандома был в играх Ричарда Гэрриота каждый промах - увеличивал базовый шанс крита на 5% . Пока он не достигал 100% После чего система сбрасывалась.
Другой вариант - честного рандма - это Лотто- выборкой: где мы воспринимаем цифры рандома не как броски - а как доставание из мешка лотто циферок.
Например 6 гранный кубик.
дает значения 1 2 3 4 5 6
При первом выбрасывании: будет условно говоря 3.
То следующее число будет из выбора 1 2 4 5 6
Потом выкидывем 6
и у нас остается 1 2 4 5
Потом осталось выкинуть 4 оставшиеся цифры и цикл сбрасывается.
Это будет восприниматься гораздо честнее.
Но у такой лотто выборки могут быть сложности с генерацией выигрышных бросков.
но тут это можно решить вопросом дублирования диапозона.
11 22 33 44 55 66
или 111 222 333 444 555 666 и так далее. Но больше 3-4х дублей не рекомендую.
Еще у Лотто выборки можно считерить и сделать множители сложности игры.
Например : таблицу бросков :
Для легкого уровня: 1 2 33 444 55 6
Для среднего 1 2 33 44 5 6
для высокого : 1 2 3 4 5 6
Для хардкора 11 222 33 4 5 6
Да, всегда вспоминаю Рим 2, когда туда добавили женщин полководцев, то был шум, что только они и выпадали.
А оказалось, что при честном рандома по нормальному распределению была вероятность подобного исхода для некоторой доли игроков, которые посчитали, что рандом подкручен)