123DiceRoller — бесплатный онлайн-симулятор, который бросает реалистичные 3D-кубики прямо в вашем браузере. Он задуман честным, быстрым и конфиденциальным: результаты выдаёт криптографически стойкий генератор случайных чисел, кубики летят по законам настоящей физики, а никакие сведения о вас и ваших бросках не отправляются на сервер.
Как устроен бросок, шаг за шагом
- Сначала выбираются числа. Для каждого кубика Web Crypto API вашего браузера (
crypto.getRandomValues) выдаёт случайное 32-битное число. Оно превращается в грань методом выборки с отклонением: значения, из-за которых младшие грани выпадали бы чуть-чуть чаще, отбрасываются, — поэтому у каждой грани N-гранного кубика шанс ровно 1 из N. - Бросок моделируется. Физический движок твёрдых тел (cannon-es) бросает кубики на стол с учётом гравитации, трения, отскоков и столкновений кубиков друг с другом. Весь бросок рассчитывается за доли секунды, ещё до того как его покажут.
- Кубики поворачиваются под результат. Любой кубик симметричен: d20 можно повернуть 60 разными способами, и он будет выглядеть одинаково. Симулятор выбирает тот поворот, при котором выпавшее число оказывается там, где физика поместила верхнюю грань, и применяет его с самого первого кадра. Движение настоящее, а число уже выбрано заранее — честно.
- Кубики, вставшие наклонно, перебрасываются. Если какой-то кубик должен остановиться, опираясь на другой, бросок незаметно переигрывается — так же, как за настоящим столом попросили бы перебросить.
- Бросок воспроизводится с тенями, отражениями и звуком каждого удара точно в такт.
Почему бы не дать физике выбирать число?
Потому что симуляция — не честный источник случайности. Мелочи вроде начального положения, шага по времени и округления могут заставить одни грани выпадать чаще других, и никто не сможет доказать, что этого не происходит. Криптографический генератор спроектирован и проверен так, чтобы быть непредсказуемым и равномерным. Разделив эти две задачи, мы берём лучшее от обеих: бросок, который выглядит и звучит как настоящий, и результат, которому можно доверять.
Точные вероятности
Шансы, которые показываются для каждого броска, рассчитываются, а не угадываются. Суммы вычисляются свёрткой, по одному кубику за раз, а броски с «оставить» и «отбросить», например с преимуществом, — перебором всех различных исходов. Метод подробно описан в калькуляторе вероятности кубиков.
На чём сделан сайт
- three.js — 3D-графика (лицензия MIT)
- cannon-es — физика (лицензия MIT)
- Обычный PHP на сервере — без базы данных, аккаунтов и отслеживания
Обе библиотеки загружаются с этого сайта, а не со стороннего CDN, так что страница никогда не подгружает код откуда-либо ещё.
Часть семейства 123
У 123DiceRoller есть соседи: 123Calculator и другие наши бесплатные инструменты без регистрации. Есть вопросы, идеи или нашли ошибку? Пишите на hello@123diceroller.com.
Обновлено