All apps · 0 apps
Belot
Docker app from ivayloivanov82's Repository
Overview
Readme
View on GitHubБелот
Self-hosted браузър белот за 4 приятели, играещи заедно през Teams (или каквото
и да е гласово приложение). Сървърът е единственият източник на истината —
клиентите само показват състоянието и изпращат ходове; всички правила се
проверяват на сървъра, така че никой не може да излъже играта дори случайно.
Бързо пускане на Unraid (или всеки Docker хост)
Копирай цялата папка
belot/на сървъра (напр. през SMB на Unraid share).От вътре в папката:
docker compose up -d --build
Отвори
http://<IP-на-сървъра>:8080в браузъра — на всеки компютър/телефон в мрежата.
Портът по подразбиране е 8080, зададен в docker-compose.yml. Смени
"8080:8080" на "ДРУГ_ПОРТ:8080", ако вече ползваш 8080 за нещо друго.
За постоянен достъп през http://belot.local вместо IP адрес, добави A
запис в locally DNS-а си (или в /etc/hosts на всеки клиент) сочещ към
Unraid IP-то, или сложи Nginx Proxy Manager отпред.
Reconnect и "нова игра"
Ако някой презареди страницата (или затвори таба и се върне по-късно), браузърът
помни последната стая (код + име) в localStorage и автоматично се
опитва да се присъедини отново — при успех кацаш точно там, докъдето е
стигнала играта, без да пипаш нищо. Работи, докато самият сървърен
процес не е рестартиран — тъй като играта живее само в паметта на
контейнера. Ако Unraid-ът рестартира контейнера (reboot, redeploy,
ръчен restart), цялото състояние на текущите игри се губи и всички
трябва да започнат наново.
Бутонът "Нова игра" горе вдясно на масата напуска текущата стая (изтрива запомнената сесия) и те връща на началния екран, за да създадеш чисто нова стая — старата продължава да си работи за останалите играчи, ако все още са в нея.
Ако мрежата помежду ви примигне за момент (WiFi засичане, идле timeout от рутер/NAT), клиентът сега тихо се опитва да се свърже отново на мястото, където сте спрели — вместо досадния "Връзката прекъсна" alert. Сървърът пуска ping на всеки ~24 сек, за да не изглежда връзката "неактивна" на евентуален посредник по мрежата.
Как се играе
- Първият играч натиска "Създай игра", вкарва си името → получава 6-символен код на стая.
- Останалите трима отварят същия адрес, вкарват името си + кода → "Присъедини се".
- Когато всичките 4 места са заети, всеки избира Отбор А или Отбор Б (макс. 2 на отбор — заключено надеждно на сървъра, дори при едновременен клик). Щом отбор се напълни до двама, сървърът произволно избира ЕДИН от тях и му праща прозорче да кръсти отбора — това име остава до края на мача. "Старт" се появява едва след като и двата отбора са именувани.
- Играе се както обичайния белот — наддаване на 5 карти, после останалите 3 се дораздават и започва самата игра. Клик върху карта = изигравате я, или я довлачете до центъра — и двете работят. Невалидните карти са леко затъмнени и не могат да се играят. Всяка изиграна карта лети от играча към центъра с пълно завъртане; след всяка взятка картите отлитат анимирано към играча, който я е спечелил.
- Когато ръката приключи, всички карти от нея се показват накуп на един ред, подредени по реда, по който са паднали на масата, всяка леко отместена нагоре или надолу според това кой отбор е взел съответната взятка. Играта чака всеки от четиримата да натисне "Готово", преди да раздаде следващата ръка — никой не остава изненадан от внезапна нова ръка.
Имената на играчите са оцветени спрямо теб — пастелно синьо за твоя отбор, пастелно червено за противниковия — навсякъде по масата, независимо как се казват отборите.
Локална разработка (без Docker)
Изисква се Go 1.22+.
go run ./cmd/server -addr :8080 -web ./web
Тестове:
go test ./... # всички unit + интеграционни тестове
go test ./engine/... -run TestFullMatchSimulation -v # симулация на цял мач
Артуърк на картите
Лицата (SVG) на картите са от Xadeck/xCards
(LGPL-3.0 лиценз — различен от лиценза на самия проект, пази се отделно;
виж пълния текст на лиценза в оригиналното repo). Копирани са само 32-те
карти, нужни за белот (7 до Аса). Гърбът на картите (web/cards/back.png)
е отделен файл. Всички се намират в web/cards/.
Структура на проекта
engine/ - цялата логика на играта (карти, наддаване, ходове, точки) - независима от сървъра
server/ - WebSocket сървър, стаи/лоби, JSON протокол
cmd/server/main.go - входна точка, сервира web/ + /ws
web/ - браузър клиент (чист HTML/CSS/JS, без build stage)
Dockerfile, docker-compose.yml - за деплой
Следващи стъпки
- Replay на изиграна ръка (историята вече се пази в
Match.History). - Overcalling логика в наддаването.
- Referee Mode — обяснение защо даден ход е невалиден.
- AI играч за запълване на празно място.
Install Belot on Unraid in a few clicks.
Find Belot in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Categories
Download Statistics
Related apps
Explore more like this
Explore allDetails
leppermesiah/belot:latestRuntime arguments
- Web UI
http://[IP]:[PORT:8080]/- Network
bridge- Shell
sh- Privileged
- false
Template configuration
WebUI Port
- Target
- 8080
- Default
- 8080
- Value
- 8080