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
正在載入完整 README。
檢視完整 README ↗주사위 5개로 족보를 맞추는 야추(Yacht) 게임. 혼자 하기와 온라인 같이 하기(1:1, 1:1:1, 2:2)를 지원합니다.
web/. https://yahchoo.github.io 는 새 주소로 넘어감)worker/)| 칸 | 점수 |
|---|---|
| 에이스 ~ 식스 | 해당 눈의 합 |
| 초이스 | 5개의 합 |
| 포 카드 | 같은 눈 4개 이상이면 5개의 합 |
| 풀하우스 | 같은 눈 3개 + 2개면 5개의 합 (5개가 모두 같은 경우는 인정 안 함) |
| S. 스트레이트 | 이어지는 눈 4개면 15점 |
| L. 스트레이트 | 이어지는 눈 5개면 30점 |
| 야추 | 5개가 모두 같으면 50점 |
| API | 설명 |
|---|---|
POST /api/solo/start | 새 판 → 게임 상태 |
GET /api/solo/{gameId} | 하던 판 불러오기 |
POST /api/solo/roll | {gameId, held: [bool×5]} 굴리기 |
POST /api/solo/score | {gameId, category} 칸에 적기 |
POST /api/rankings | {gameId, initials} 랭킹 등록 → 이번 주·전체 순위 |
GET /api/rankings?period=week|all | 랭킹 목록 (최대 50개) |
web/js/points.js (웹과 서버가 함께 씀)web/js/avatar.js (웹과 서버가 함께 씀)| API | 설명 |
|---|---|
POST /api/auth/google | {credential} 구글 ID 토큰 → {token, me} |
POST /api/auth/logout | 로그아웃 |
GET /api/me | 내 정보 (닉네임, 포인트, 아바타, 가진 아이템) |
POST /api/me/profile | {nickname?, avatar?} |
POST /api/shop/buy | {itemId} |
POST /api/solo/claim | {gameId} 로그인하지 않고 끝낸 판의 포인트 받기 |
요청에 Authorization: Bearer <token>을 붙이면 로그인한 사용자로 처리합니다. 같이 하기는 방에 들어간 뒤 {type: 'auth', token}을 보냅니다.
?room=CODE)로 입장| API | 설명 |
|---|---|
POST /api/rooms | {mode: "1v1" | "1v1v1" | "2v2"} → {code} |
GET /api/rooms/{code}/ws?name=닉네임[&playerId=…] | 방 WebSocket. 서버 → welcome, state, error / 웹 → team, start, roll, hold, score, rematch, leave |
GET /api/health | 상태 확인 |
web/ # 정적 웹 (빌드 과정 없음)
index.html
css/style.css
js/rules.js # 족보·점수 계산 (웹과 서버가 함께 씀)
js/solo.js # 혼자 하기 (서버 굴림, 오프라인이면 기기에서)
js/account.js # 로그인·내 정보
js/avatar.js # 아바타 아이템·그림 (서버도 씀)
privacy.html # 개인정보처리방침
js/net.js # 같이 하기 서버 연결·재접속
js/app.js # 화면
js/config.js # 서버 주소 (배포 때 자동으로 채워짐)
worker/ # Cloudflare Worker
src/match.ts # 방 규칙 (순수 로직, 단위 테스트)
src/solo.ts # 혼자 하기(서버 굴림)·이니셜·주간 기준 (순수 로직)
src/auth.ts # 구글 ID 토큰 검증, 로그인 토큰
src/account.ts # 계정·포인트·상점
migrations/ # D1 테이블 (solo_games, rankings)
src/room.ts # Durable Object: 연결·저장·타이머
src/index.ts # 라우팅, CORS
test/ # vitest
CLOUDFLARE_API_TOKEN: 2번 토큰CLOUDFLARE_ACCOUNT_ID: 3번 IDmain에 푸시하거나 Actions → CI & Deploy → Run workflowyahchoo의 OAuth 클라이언트 ID(웹 애플리케이션, 승인된 JavaScript 원본 https://yahchoo.ohsangplay.com, https://yahchoo.github.io)가 .github/workflows/ci.yml에 기본값으로 들어가 있음. 다른 ID를 쓰려면 저장소 변수 GOOGLE_CLIENT_ID를 넣으면 그 값을 우선 사용배포할 때 D1 데이터베이스(yacht-dice)를 찾거나 만들고 테이블을 준비하는 것까지 자동으로 합니다. Worker 이름은 yacht-dice-api라서 다른 프로젝트와 같은 Cloudflare 계정을 써도 겹치지 않습니다. 시크릿이 없으면 서버 배포는 건너뛰고 웹은 혼자 하기만 되는 상태로 배포됩니다. 서버 주소를 직접 정하려면 저장소 변수 API_BASE_URL을 넣으세요.
웹 주소가 바뀌면(저장소 이름 변경, 커스텀 도메인) worker/wrangler.toml의 ALLOWED_ORIGINS에 새 주소를 추가해야 같이 하기가 연결됩니다.
yahchoo.ohsangplay.com → GitHub Pages. Cloudflare DNS에 CNAME yahchoo → yahchoo.github.io (프록시 끔), 저장소 Settings → Pages → Custom domain에 같은 주소worker/wrangler.toml의 ALLOWED_ORIGINS와 구글 OAuth 클라이언트의 승인된 JavaScript 원본에 새 주소를 추가해야 함cd worker && npm install
npm run dev # 로컬 D1 테이블 준비 + 서버: http://127.0.0.1:8787
npm test # 규칙·방 로직 테스트
# 로그인 테스트: worker/.dev.vars에 DEV_LOGIN=1을 넣으면 localhost에서 '개발용 로그인' 버튼이 생김
# 다른 터미널에서
cd web && python3 -m http.server 5173
# http://localhost:5173 열기 (localhost에서는 자동으로 로컬 서버에 연결)