Настольное приложение (Electron) + веб-версия (Angular) для случайного выбора игр по платформам, добавляемых из текстовых файлов.
- Рулетка — случайный выбор игры с настраиваемой длительностью прокрутки (от 1 секунды до 2 минут, слайдер) и плавным замедлением перед остановкой
- Динамические платформы — список платформ и игр задаётся текстовыми файлами в папке
platforms/; изменения подхватываются на лету, без перезапуска - Музыка и звуки — во время прокрутки играет трек из папки
roulette/(случайный, без повторов подряд), при остановке — звуковой эффект; громкость настраивается и запоминается - Иконки платформ — изображения 72×72 из папки
roulette/(RuletIco1, RuletIco2, … по порядку платформ) - Фон рулетки — любой JPEG/PNG из папки
roulette/(случайный при смене платформы) - Темы оформления — Default (индиго) / Green / Purple, выбор запоминается
- История прокруток — последние 50 результатов, отдельно на каждую платформу
- Импорт .txt — загрузка списка игр из текстового файла прямо в редакторе
| Слой | Технологии |
|---|---|
| Frontend | Angular 17 (standalone, signals), TypeScript |
| Backend | Node.js, Express, fast-xml-parser |
| Desktop | Electron 30, electron-builder (NSIS + portable) |
| Отладка | VS Code launch.json (Node / Chrome / Edge / Electron) |
randomizer-app/
├── electron/ # главный процесс Electron + preload
│ ├── main.js
│ └── preload.js
├── server/ # Express API
│ ├── server.js
│ ├── platforms.js # динамический реестр платформ (txt)
│ ├── storage.js # чтение/запись JSON/XML
│ └── roulette-scan.js # сканер медиа-папки
├── build/
│ └── icon.ico # иконка приложения
├── src/
│ ├── main.ts # загрузка Angular (+ ранняя установка темы)
│ ├── styles.css # глобальные стили, палитры тем, скроллбар
│ └── app/
│ ├── app.component.* # главный компонент (рулетка, аккордеоны, титлбар)
│ ├── models.ts
│ └── services/
│ ├── game-api.service.ts # HTTP + SSE
│ ├── randomizer.service.ts # логика рулетки + снимки состояния
│ └── audio.service.ts # музыка/звуки/громкость
├── data/ # ← создаётся автоматически (хранилище)
├── platforms/ # ← создаётся автоматически (платформы и игры)
└── roulette/ # ← создаётся автоматически (медиа)
Требуется Node.js 18+.
npm install
npm run dev # API на :3000 + Angular на :4200 (прокси настроен)Откройте http://localhost:4200
Прочие режимы:
npm run server # только бэкенд (порт 3000)
npm start # только фронтенд (нужен запущенный бэкенд)
npm run electron:start # сборка + запуск десктоп-версииnpm run electron:winРезультат в папке release/:
Randomizer Setup <версия>.exe— установщик (NSIS)Randomizer <версия>.exe— портативная версия (всё в одном файле)win-unpacked/— распакованная версия
Папки data\, roulette\, platforms\ создаются рядом с exe:
| Ситуация | Где данные |
|---|---|
Портативный exe из D:\Tools\ |
D:\Tools\ |
| Установка в доступную для записи папку | папка установки |
Установка в C:\Program Files (нет прав) |
%APPDATA%\Randomizer\ (авто-fallback) |
| Режим разработки | корень репозитория |
Можно подготовить папки заранее (положить музыку, иконки, списки игр) — они подхватятся при первом запуске.
