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
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 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