Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
Kwadrans는 브라우저에서 친구와 방 코드를 통해 파티·보드·미니·토너먼트 게임을 즐길 수 있습니다
Browser multiplayer party games for playing with friends: room code, everyone on their own phone. Board games, mini-games and a tournament mode.
게임TypeScript · CSSGitHub @figielak온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Gry multiplayer w przeglądarce, do grania ze znajomymi. Jedna strona, kod pokoju, każdy gra na swoim telefonie. games.figielak.dev ·README 전문 보기 ↗
| Gra | Graczy | W skrócie |
|---|---|---|
| Kampus Tour | 2-4 | gra planszowa o kupowaniu pól i czynszach, w realiach Politechniki Rzeszowskiej i Rzeszowa |
| Statki | 2 | cztery tryby, od szybkiego 8×8 po flotę wojenną 12×12 |
| Gomoku | 2 | pięć w rzędzie na planszy 15×15 |
| Chińczyk | 2-4 | tryb klasyczny i szybki |
| Memory | 2-6 | trzy rozmiary planszy |
| Państwa-miasta | 2-6 | 5 rund, wszyscy piszą naraz, odpowiedzi ocenia głosowanie |
| Mini-gry (30) | 1-6 | krótkie wyzwania na refleks, pamięć, oko i liczenie: Refleks, Sekwencja, Narysuj koło, Mapa, Wieża, Rytm, Sudoku i inne |
| Turniej | 1-6 | seria mini-gier w jednym pokoju ze wspólną tabelą punktów |
Dokładne zasady każdej gry: ZASADY-GIER.md.
Telefon (PWA, React) ⇄ WebSocket ⇄ Serwer Colyseus (Node)
│
├─ logika gier (czyste funkcje TS)
└─ SQLite (ranking i rekordy; stan pokoi w pamięci)
Serwer jest jedynym źródłem prawdy. Klient wysyła intencje („rzucam kośćmi”), serwer je waliduje, losuje, liczy nowy stan i rozsyła każdemu graczowi jego widok, więc ukrytych informacji (ręka, plansza przeciwnika) nie da się podejrzeć.
Każda gra to moduł niezależny od sieci i interfejsu: setup, validateMove, applyMove, playerView, isOver
(kontrakt GameDefinition w packages/games/src/core.ts).
Stack: TypeScript, pnpm workspaces, Colyseus + Express, zod, Vite + React, Tailwind, SQLite (node:sqlite), Vitest, Docker.
Wymaga Node 24 i pnpm 12.
pnpm install
pnpm --filter server dev # http://localhost:2567
pnpm --filter web dev # http://localhost:5173
pnpm typecheck && pnpm test
Tryb testowy http://localhost:5173/dev?n=4 pokazuje kilku graczy obok siebie w jednym pokoju.
packages/games/src/ zasady gier z testami, kontrakt, rejestr GAMES
apps/server/src/ pokój Colyseus, SQLite, API rankingów
apps/web/src/ frontend: screens/ (platforma), games/ (interfejs każdej gry)
| Dokument | Zawartość |
|---|---|
| KONCEPT.md | założenia, lista gier, architektura, reguły platformy |
| ZASADY-GIER.md | dokładne zasady każdej gry |
| ZASADY.md | proces dodawania gry, obowiązkowe testy, spójność wyglądu i animacji |
| DESIGN.md | styl wizualny: tokeny, wzorcowe sekcje, stany |
| AGENTS.md | instrukcje dla agentów AI |
Push na master uruchamia CI, które buduje obraz linux/arm64 i publikuje go jako ghcr.io/figielak/kwadrans:latest.
Jeden kontener serwuje frontend i WebSockety, a Cloudflare Tunnel wystawia go pod games.figielak.dev bez otwierania portów.
Jednorazowo:
Cloudflare (bez Zero Trust): domena figielak.dev dodana do konta Cloudflare (darmowy plan, nameservery u rejestratora
wskazują na Cloudflare). Na dowolnej maszynie z cloudflared:
cloudflared tunnel login # w przeglądarce wybierz figielak.dev
cloudflared tunnel create games # tworzy ~/.cloudflared/<UUID>.json
cloudflared tunnel route dns games games.figielak.dev # rekord CNAME na tunel
GHCR: ustaw pakiet jako publiczny albo na Pi docker login ghcr.io (PAT z read:packages).
Pi: skopiuj docker-compose.yml i katalog cloudflared/, a plik <UUID>.json z kroku 1 wrzuć jako
cloudflared/credentials.json (chmod 644, bo kontener cloudflared działa jako inny użytkownik).
Tunel łączy się z Pi na zewnątrz, więc działa za CGNAT i bez przekierowania portów.
Aktualizacja:
docker compose pull && docker compose up -d