Слоты на HTML5 — с математикой, посчитанной до релиза UI

Каскадный слот, серверный RNG, честный RTP, подтверждённый Monte-Carlo симуляцией. Ниже — не скриншот, а рабочая игра: нажмите «Спин».

Dice Slot · движок в браузере RTP 96.91% 5 костей
Ставка 10 кредитов. Платят: две пары, тройка, стрит, фулл-хаус, каре, покер.
10
Баланс 1 000 Спинов 0 Ваш RTP
Это демо-стенд, а не ваша игра. Собран за вечер под ваше ТЗ, чтобы показать структуру первого экрана и то, как считается математика. Ваш Dice Slot встанет сюда через <iframe> на том же домене — то есть без CORS, ровно как вы и написали.

Математика в цифрах

Четыре числа, которые оператор спросит первыми

Плашки заполнены значениями из вашего math_report dice-slot 1.1. Меняются в одном месте — в JSON рядом со страницей, без правки вёрстки.

RTP
96.90%
±0.49 п.п. доверительный интервал
Hit frequency
40.35%
доля спинов с выплатой
Волатильность
7.89
σ на единицу ставки
Max win
6903×
при капе 15 000×

Рассчитано на 10 000 000 спинов Monte-Carlo симуляцией. Формулировки «сертифицировано» на странице нет и не будет — сертификация это отдельная процедура у лаборатории, и подменять её словом на лендинге нельзя.


Проверяемо прямо здесь

Симуляция того движка, что крутится выше

Тот же код, что обслуживает спины в первом экране, гоняется здесь миллион раз. Аналитический RTP паейтейбла — 96.9135%; симуляция должна к нему сойтись. Если движок и отчёт разойдутся, это видно тут, а не после релиза.

готов
RTP симуляции
Hit rate
Волатильность σ
Max win
КомбинацияВероятностьВыплата
Покер (5 одинаковых)0.0772%200×
Каре (4 одинаковых)1.9290%20×
Фулл-хаус (3+2)3.8580%4.12×
Стрит (5 подряд)3.0864%2.5×
Тройка15.4321%0.8×
Две пары23.1481%0.3×

Фулл-хаус — 4.12×, а не круглые 4×, намеренно: это подгоночный множитель, которым паейтейбл догоняется до целевого RTP. В реальном проекте такой «ручкой» служит самая частая средняя комбинация — крайние множители трогать нельзя, они формируют ощущение игры.


Как это сделано

Три решения, за которые платит оператор

01
Проблема

RNG на клиенте — это не игра, а предложение её взломать

Решение

Исход спина считает сервер криптографическим генератором, браузер получает уже готовый результат и только его анимирует. Клиент не знает исхода до ответа сервера.

Почему это важно оператору

Лицензирование и любой аудит начинаются с вопроса «где генерируется случайность». Клиентский RNG закрывает разговор на первой минуте.

02
Проблема

Каскад легко написать так, что он врёт статистике

Решение

Каскадный движок отделён от рендера: выпадение, поиск выигрышей, схлопывание и долив — чистые функции без DOM. Их можно прогнать миллион раз за секунды, что и делает симуляция выше.

Почему это важно оператору

Математика проверяется тем же кодом, что стоит в проде. Не «моделью в таблице, похожей на игру».

03
Проблема

RTP, посчитанный после релиза UI, уже нельзя менять дёшево

Решение

Паейтейбл сходится к целевому RTP до того, как нарисован первый символ. Подгоночный множитель выбирается на средней комбинации, крайние остаются нетронутыми.

Почему это важно оператору

Смена RTP под рынок — правка одного числа в конфиге и перепрогон симуляции, а не пересборка игры.


Портфолио

Сетка, в которую следующая игра встаёт без перевёрстки

Сейчас одна реальная игра и две карточки-заглушки. Карточки берутся из одного массива — новая игра добавляется строкой, сетка не трогается.

DICE SLOT
РЕЛИЗ

Dice Slot

Каскадный слот, RTP 96.9%, серверный RNG, симуляция математики до релиза.

PixiJS · FastAPI · WebSocket
COMING SOON
СКОРО

Mock Title A

Заглушка описания — держит место под следующую игру.

заглушка стека
COMING SOON
СКОРО

Mock Title B

Заглушка описания — держит место под следующую игру.

заглушка стека

Сетка примеров держится строго 3 в ряд и не разъезжается: колонки заданы фиксированным числом, а не автозаполнением по ширине карточки — именно на этом «съезжает табличка» в исходном макете.


Стек и роли

Одна строка, а не сетка услуг агентства

Python / FastAPI WebSocket PixiJS Monte-Carlo RTP CSPRNG nginx + systemd

Контакт

Три ссылки, без формы

Формы нет намеренно — она нужна, когда пойдёт трафик и появится что фильтровать. Пока три ссылки конвертят лучше.

Ссылки на стенде — заглушки: свои контакты вы подставите одной строкой в конфиге, чтобы демо-стенд никуда не вёл.