Skip to content

Repository files navigation

Dazino Lab

Dazino Lab — демонстрационный браузерный проект с двумя играми на виртуальный баланс:

  • классический слот 5×3 с двадцатью постоянными линиями;
  • ABYSS — crash-механика с погружением батискафа, ручным и автоматическим выводом.

Главный принцип проекта: браузер отвечает только за интерфейс и анимацию, а результат, баланс и выплаты рассчитываются на сервере.

Проект не принимает реальные ставки и не предназначен для использования в качестве реального казино.

Экран входа Dazino Lab Игра ABYSS

Возможности

Slot 5×3

  • пять независимых барабанов и три видимые строки;
  • двадцать фиксированных линий;
  • выплаты слева направо от первого барабана;
  • символ WILD;
  • плавный разгон, вращение и каскадная остановка барабанов;
  • теоретический RTP 96.0034375%;
  • воспроизводимый результат через server seed, client seed и nonce.

ABYSS

  • серверная точка аварии, определяемая до начала раунда;
  • ручной вывод и автовывод;
  • восстановление активного раунда после перезагрузки страницы;
  • история последних результатов;
  • целевой RTP модели 97%;
  • отдельная проверяемая последовательность seed.

Общая часть

  • регистрация и авторизация;
  • Argon2id для хранения паролей;
  • серверные bearer-сессии;
  • общий виртуальный баланс между играми;
  • защита от повторного списания через UUID запроса;
  • SQLite для локального запуска;
  • Docker Compose;
  • автоматические тесты и GitHub Actions.

Архитектура

flowchart LR
    B[Браузер] -->|HTTP API| F[FastAPI]
    F --> A[Авторизация]
    F --> S[Игровое ядро Slot]
    F --> C[Игровое ядро ABYSS]
    A --> D[(SQLite)]
    S --> D
    C --> D
Loading

Результаты игр не рассчитываются во frontend. Клиент получает готовую серверную матрицу слота или состояние раунда ABYSS и только воспроизводит их визуально.

Структура проекта

.
├── backend/
│   ├── abyss/             # Математика и сервисы ABYSS
│   ├── game/              # Математика и генерация Slot 5×3
│   ├── routes/            # HTTP-маршруты по областям
│   ├── tests/             # Автоматические тесты
│   ├── tools/             # Проверка RTP и воспроизведение результатов
│   ├── main.py            # Сборка FastAPI-приложения
│   ├── models.py          # SQLAlchemy-модели
│   └── settings.py        # Настройки окружения
├── frontend/
│   ├── icons/
│   ├── js/
│   ├── index.html
│   └── styles.css
├── docs/                  # Описание математических моделей
├── .github/workflows/     # CI
├── Dockerfile
├── docker-compose.yml
├── setup.ps1
├── test.ps1
└── start.ps1

Локальный запуск в Windows

Требуется Python 3.12.

Set-ExecutionPolicy -Scope Process Bypass
.\setup.ps1
.\test.ps1
.\start.ps1

После запуска приложение будет доступно по адресу:

http://127.0.0.1:8000

Интерактивная документация API:

http://127.0.0.1:8000/docs

Скрипты самостоятельно используют .venv; активировать виртуальное окружение вручную не требуется.

Запуск через Docker

Copy-Item .env.example .env
docker compose up --build -d

Остановка:

docker compose down

Удаление контейнеров вместе с локальной базой:

docker compose down -v

Настройки окружения

Переменная Значение по умолчанию Назначение
APP_PORT 8000 Порт Docker Compose на компьютере
APP_ENV development локально Режим запуска
APP_NAME Dazino Lab API Название API
DATABASE_URL SQLite в backend/slot_v2.db Подключение к базе данных
SESSION_LIFETIME_DAYS 7 Срок действия сессии
INITIAL_BALANCE 100.00 Начальный виртуальный баланс
CORS_ORIGINS пусто Разрешённые внешние origin через запятую

Пример временной настройки для PowerShell:

$env:INITIAL_BALANCE = "500.00"
.\start.ps1

Проверка математических моделей

Точный RTP слота:

.\.venv\Scripts\python.exe backend\tools\calculate_rtp.py

Проверка конкретного вращения:

.\.venv\Scripts\python.exe backend\tools\verify_spin.py --help

Проверка раунда ABYSS:

.\.venv\Scripts\python.exe backend\tools\verify_abyss_round.py --help

Тесты

.\test.ps1

Тестами покрыты:

  • регистрация, вход и сессии;
  • идемпотентность игровых запросов;
  • выигрышные линии и WILD;
  • точный расчёт RTP слота;
  • ручной и автоматический вывод ABYSS;
  • восстановление активного раунда;
  • скрытие закрытого server seed;
  • выдача frontend-файлов через FastAPI.

Ограничения

Сейчас база данных создаётся через SQLAlchemy.create_all. Для долгоживущего production-развёртывания следующим техническим шагом должны стать Alembic и PostgreSQL. Текущая версия рассчитана на локальную демонстрацию, портфолио и изучение серверной игровой логики.

About

Dazino Lab — демонстрационная игровая платформа со слотами 5×3 и crash-игрой ABYSS на FastAPI и чистом JavaScript

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages