Чтобы сгенерировать кривую вероятностей, бросьте и сложите несколько кубиков. Затем вычтите среднее. Повторно бросьте, если результат отрицательный. Чем больше выпало кубиков, тем больше веса.
Вот один из способов, полностью не проверенный.
float sum;
do {
sum = rollThreeDice(); // returns 3 to 18, with an average is 10.5
sum -= 10.5; // Now the range is 0 to 7.5, with the lower end being more likely.
} while(sum < 0);
return sum;
Конечно, вы можете бросать кости с любым количеством сторон, чтобы получить желаемый диапазон. Вы управляете частотной кривой, выбирая количество кубиков.