Портативный пульт и экран зала для турниров по «Брейн-рингу». Сетка строится по схеме двойного выбывания (double elimination).
В репозитории нет личных данных: ни названий команд, ни счетов, ни фонов, ни
сохранённых турниров. Приложение стартует с пустого состояния, а всё, что вы
вводите, живёт только в вашем браузере (localStorage) и в памяти локального
сервера. В репозиторий эти данные не попадают.
- Список команд одной строкой на команду, кнопка «Перемешать» — случайная жеребьёвка.
- Сетка двойного выбывания строится кнопкой «Сформировать таблицу».
- Флажок «Вторая игра финала» добавляет вторую игру гранд-финала: чемпион определяется по двум играм.
- Ведение турнира: Старт → текущий бой на зале → Дальше или Отменить (откат на шаг назад) → Остановить игру.
- По завершении чемпион выводится в центр зала.
- Кнопка «Схема турнира» показывает сетку на пульте, «Экран зала» — открывает/переключает окно зала.
- Пульт оператора и экран зала — два независимых окна: на зал не попадает ничего лишнего, кроме игровой картинки.
Зал открывается отдельным окном браузера на другом мониторе в режиме приложения
(--app) со своим профилем — личные вкладки оператора не затрагиваются.
Esc закрывает окно зала. Кнопка «Экран зала» на пульте переключает монитор,
если их несколько.
Портативно (без установки Python). Скопировать папку целиком, включая
runtime\python\, и запустить BrainRing.bat. Откроется пульт оператора; консольное
окно нужно держать открытым — его закрытие останавливает сервер.
Из исходников. Нужен Python 3.10+ (проверено на 3.12):
python serve.pyПорт по умолчанию — 3851, переопределяется переменной окружения PORT.
Браузер: Edge или Chrome (для зала используется режим приложения --app).
Система: Windows 10/11 64-bit.
Приложение работает на embeddable CPython 3.12, который лежит в runtime\python\.
Раньше папка копировалась вместе с проектом — в репозитории её нет: это 22 МБ
бинарников, которые бессмысленно держать в git.
Восстановить runtime одной командой из корня проекта:
powershell -ExecutionPolicy Bypass -File scripts\get-runtime.ps1Скрипт скачивает официальный python-3.12.10-embed-amd64.zip с python.org и
распаковывает его в runtime\python. Ничего не ставится в систему, права
администратора не нужны. Если runtime\python\python.exe уже есть — скрипт
ничего не делает.
Никаких внешних зависимостей: serve.py использует только стандартную
библиотеку Python.
BrainRingPad/
BrainRing.bat запуск (портативно)
serve.py локальный HTTP-сервер, только stdlib
index.html пульт оператора
display.html экран зала
css/app.css оформление
js/bracket.js построение сетки двойного выбывания
js/operator.js логика пульта
js/render.js отрисовка сетки
js/display.js отрисовка зала
js/bus.js шина между окнами
logo.svg, app.ico
scripts/get-runtime.ps1 восстановление runtime\python
Локальный сервер слушает 127.0.0.1:3851 и отдаёт состояние залу через
обычные JSON-эндпоинты (интеграции и автоматизация):
| Метод | Путь | Назначение |
|---|---|---|
GET |
/api/state |
текущее состояние турнира |
POST |
/api/state |
записать состояние турнира |
GET |
/api/status |
статус сервера, мониторы, браузер |
GET |
/api/open-display |
открыть экран зала |
GET |
/api/cycle-display |
переключить монитор зала |
GET |
/api/reload-display |
перезагрузить окно зала |
MIT — см. LICENSE.