{"id":21659915,"url":"https://github.com/speedphp/anpu","last_synced_at":"2026-05-17T13:15:21.337Z","repository":{"id":236724506,"uuid":"788764310","full_name":"speedphp/anpu","owner":"speedphp","description":"安铺打地主的牌玩法服务","archived":false,"fork":false,"pushed_at":"2024-04-29T01:40:33.000Z","size":3412,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-25T07:08:51.279Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/speedphp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-19T03:17:11.000Z","updated_at":"2024-04-29T01:40:36.000Z","dependencies_parsed_at":"2024-11-25T09:42:56.081Z","dependency_job_id":null,"html_url":"https://github.com/speedphp/anpu","commit_stats":null,"previous_names":["speedphp/anpu"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/speedphp%2Fanpu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/speedphp%2Fanpu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/speedphp%2Fanpu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/speedphp%2Fanpu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/speedphp","download_url":"https://codeload.github.com/speedphp/anpu/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244555925,"owners_count":20471530,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-25T09:31:52.874Z","updated_at":"2026-05-17T13:15:21.325Z","avatar_url":"https://github.com/speedphp.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 安铺打地主\n\n家乡规则四人牌类游戏，融合角色系统与扑克牌玩法。  \n客户端使用 Cocos Creator，服务端使用 Node.js + Socket.IO。\n\n---\n\n## 目录结构\n\n```\nanpu/\n├── code-cocos-game/     # Cocos Creator 3.8.6 游戏客户端\n├── code-server/         # Node.js 游戏服务端\n├── PNG/                 # 游戏素材（牌面、UI 图片）\n└── 历史记录/            # 每次开发对话记录\n```\n\n---\n\n## 游戏规则速查\n\n- **4人游戏**，每人 13 张牌（共 52 张）\n- 持有**方块4**的玩家首轮出牌，且首轮必须包含方块4\n- 牌点大小：`4 \u003c 5 \u003c 6 \u003c 7 \u003c 8 \u003c 9 \u003c 10 \u003c J \u003c Q \u003c K \u003c A \u003c 2 \u003c 3`\n- **花色**：大葵（梅花）/ 散角（方块）/ 花仔（红心）/ 红桃（黑桃）\n\n### 角色\n\n| 角色 | 判定 |\n|------|------|\n| 大地主 | 持有红心A（#52） |\n| 小地主 | 持有黑桃A（#44） |\n| 双地主 | 一人同时持有两张A |\n| 贫民 | 无A |\n\n### 牌型（从小到大）\n\n`单张 \u003c 对子 \u003c 葫芦 \u003c 同花 \u003c 炸弹 \u003c 顺子 \u003c 同花顺`\n\n### 计分（双地主场景）\n\n| 名次 | 双地主 | 其余三人 |\n|------|--------|---------|\n| 1st | +6 | -2 |\n| 2nd | +3 | -1 |\n| 3rd | -3 | +1 |\n| 4th | -6 | +2 |\n\n### 碰风\n\n前三家全部 PASS → 当前玩家可自由出任意合法牌型。\n\n---\n\n## 技术栈\n\n| 层 | 技术 |\n|----|------|\n| 客户端 | Cocos Creator 3.8.6 + TypeScript |\n| 服务端 | Node.js + TypeScript + Express |\n| 实时通信 | Socket.IO 4.x |\n| 缓存/会话 | Redis |\n| 数据库 | MySQL |\n| 部署 | PM2 |\n\n### Socket 事件\n\n**客户端 → 服务端**\n- `c2sJoinWaiting` 加入匹配队列\n- `c2sPlayCard` 出牌或PASS `{ sentCards: number[], pass: boolean }`\n\n**服务端 → 客户端**\n- `s2cWaitingStatus` 匹配等待状态\n- `s2cGameStart` 游戏开始（手牌+角色）\n- `s2cPlayCard` 回合更新（可用牌型）\n- `s2cGameOver` 游戏结束（名次+得分）\n- `s2cError` 操作被拒绝\n- `s2cReLogin` 强制重连\n\n---\n\n## 本地开发\n\n### 服务端\n\n```bash\ncd code-server\nnpm install\nnpm run watch        # 开发模式（nodemon 热重载）\nnpm run build        # 生产构建（tsc）\nnpm start            # 启动（ts-node）\n```\n\n\u003e **注意**：`src/config.json` 已在 `.gitignore` 中排除。  \n\u003e 首次部署请复制 `src/config.example.json` 并填写真实配置。\n\n### 客户端\n\n用 **Cocos Creator 3.8.6** 打开 `code-cocos-game/` 目录即可。  \n服务器地址在 `code-cocos-game/assets/Script/Z.ts` 中配置：\n\n```typescript\nstatic serverUrl = \"https://anpu.speedphp.com/\";\n```\n\n### 生产部署\n\n```bash\ncd code-server\nnpm run build\npm2 start ecosystem.config.js\n```\n\n---\n\n## 待办事项\n\n### 高优先级（影响可玩性）\n\n- [ ] **断线重连 UI** — 服务端逻辑已有，缺客户端弹窗引导\n- [ ] **匹配大厅完善** — Matcher.ts 逻辑存在，等待状态展示不完整\n- [ ] **Redis Key 设置过期时间** — 当前无 TTL，异常退出后内存泄漏\n\n### 中优先级（体验提升）\n\n- [ ] 排行榜数据对接（Ranking.ts 骨架已有）\n- [ ] 音效完整集成（Main.ts 调用点已有，缺资源）\n- [ ] 托管策略优化（当前随机，改为出最小合法牌）\n\n### 低优先级\n\n- [ ] 对局回放（日志数据已有，缺播放器）\n- [ ] 聊天功能\n- [ ] 观战模式\n- [ ] 管理后台\n\n---\n\n## 注意事项\n\n### 敏感配置\n\n`code-server/src/config.json` **不提交到 git**，包含：\n- MySQL 密码\n- Redis 配置\n- Socket.IO 密钥（secret）\n\n部署时在服务器上手动维护此文件。\n\n### Cocos 缓存目录\n\n`code-cocos-game/library/` 和 `temp/` 体积巨大且可自动重建，已排除在 git 之外。  \n拉取代码后用 Cocos Creator 打开项目会自动重新生成。\n\n### 牌号编码\n\n全副 52 张牌用整数 1-52 编码：\n- `#1` = 方块4（首牌）\n- `#44` = 黑桃A（小地主）\n- `#52` = 红心A（大地主）\n\n计算公式：`point = floor((n-1)/4)`，`suit = n % 4`\n\n### 服务器地址\n\n生产：`https://anpu.speedphp.com/`（端口 8081，PM2 管理）\n\n---\n\n## 文档索引\n\n| 文件 | 内容 |\n|------|------|\n| [项目概览.md](项目概览.md) | 功能完成度一览表 |\n| [游戏规则.md](游戏规则.md) | 完整规则说明 |\n| [技术架构.md](技术架构.md) | 架构图、协议、状态机 |\n| [代码分析.md](代码分析.md) | 算法分析、代码片段、已知风险 |\n| [进度与计划.md](进度与计划.md) | 里程碑、技术债务 |\n| [历史记录/](历史记录/) | 每次开发对话记录 |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspeedphp%2Fanpu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspeedphp%2Fanpu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspeedphp%2Fanpu/lists"}