https://github.com/speedphp/anpu
安铺打地主的牌玩法服务
https://github.com/speedphp/anpu
Last synced: 27 days ago
JSON representation
安铺打地主的牌玩法服务
- Host: GitHub
- URL: https://github.com/speedphp/anpu
- Owner: speedphp
- License: apache-2.0
- Created: 2024-04-19T03:17:11.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-04-29T01:40:33.000Z (about 2 years ago)
- Last Synced: 2025-01-25T07:08:51.279Z (over 1 year ago)
- Language: TypeScript
- Size: 3.25 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 安铺打地主
家乡规则四人牌类游戏,融合角色系统与扑克牌玩法。
客户端使用 Cocos Creator,服务端使用 Node.js + Socket.IO。
---
## 目录结构
```
anpu/
├── code-cocos-game/ # Cocos Creator 3.8.6 游戏客户端
├── code-server/ # Node.js 游戏服务端
├── PNG/ # 游戏素材(牌面、UI 图片)
└── 历史记录/ # 每次开发对话记录
```
---
## 游戏规则速查
- **4人游戏**,每人 13 张牌(共 52 张)
- 持有**方块4**的玩家首轮出牌,且首轮必须包含方块4
- 牌点大小:`4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K < A < 2 < 3`
- **花色**:大葵(梅花)/ 散角(方块)/ 花仔(红心)/ 红桃(黑桃)
### 角色
| 角色 | 判定 |
|------|------|
| 大地主 | 持有红心A(#52) |
| 小地主 | 持有黑桃A(#44) |
| 双地主 | 一人同时持有两张A |
| 贫民 | 无A |
### 牌型(从小到大)
`单张 < 对子 < 葫芦 < 同花 < 炸弹 < 顺子 < 同花顺`
### 计分(双地主场景)
| 名次 | 双地主 | 其余三人 |
|------|--------|---------|
| 1st | +6 | -2 |
| 2nd | +3 | -1 |
| 3rd | -3 | +1 |
| 4th | -6 | +2 |
### 碰风
前三家全部 PASS → 当前玩家可自由出任意合法牌型。
---
## 技术栈
| 层 | 技术 |
|----|------|
| 客户端 | Cocos Creator 3.8.6 + TypeScript |
| 服务端 | Node.js + TypeScript + Express |
| 实时通信 | Socket.IO 4.x |
| 缓存/会话 | Redis |
| 数据库 | MySQL |
| 部署 | PM2 |
### Socket 事件
**客户端 → 服务端**
- `c2sJoinWaiting` 加入匹配队列
- `c2sPlayCard` 出牌或PASS `{ sentCards: number[], pass: boolean }`
**服务端 → 客户端**
- `s2cWaitingStatus` 匹配等待状态
- `s2cGameStart` 游戏开始(手牌+角色)
- `s2cPlayCard` 回合更新(可用牌型)
- `s2cGameOver` 游戏结束(名次+得分)
- `s2cError` 操作被拒绝
- `s2cReLogin` 强制重连
---
## 本地开发
### 服务端
```bash
cd code-server
npm install
npm run watch # 开发模式(nodemon 热重载)
npm run build # 生产构建(tsc)
npm start # 启动(ts-node)
```
> **注意**:`src/config.json` 已在 `.gitignore` 中排除。
> 首次部署请复制 `src/config.example.json` 并填写真实配置。
### 客户端
用 **Cocos Creator 3.8.6** 打开 `code-cocos-game/` 目录即可。
服务器地址在 `code-cocos-game/assets/Script/Z.ts` 中配置:
```typescript
static serverUrl = "https://anpu.speedphp.com/";
```
### 生产部署
```bash
cd code-server
npm run build
pm2 start ecosystem.config.js
```
---
## 待办事项
### 高优先级(影响可玩性)
- [ ] **断线重连 UI** — 服务端逻辑已有,缺客户端弹窗引导
- [ ] **匹配大厅完善** — Matcher.ts 逻辑存在,等待状态展示不完整
- [ ] **Redis Key 设置过期时间** — 当前无 TTL,异常退出后内存泄漏
### 中优先级(体验提升)
- [ ] 排行榜数据对接(Ranking.ts 骨架已有)
- [ ] 音效完整集成(Main.ts 调用点已有,缺资源)
- [ ] 托管策略优化(当前随机,改为出最小合法牌)
### 低优先级
- [ ] 对局回放(日志数据已有,缺播放器)
- [ ] 聊天功能
- [ ] 观战模式
- [ ] 管理后台
---
## 注意事项
### 敏感配置
`code-server/src/config.json` **不提交到 git**,包含:
- MySQL 密码
- Redis 配置
- Socket.IO 密钥(secret)
部署时在服务器上手动维护此文件。
### Cocos 缓存目录
`code-cocos-game/library/` 和 `temp/` 体积巨大且可自动重建,已排除在 git 之外。
拉取代码后用 Cocos Creator 打开项目会自动重新生成。
### 牌号编码
全副 52 张牌用整数 1-52 编码:
- `#1` = 方块4(首牌)
- `#44` = 黑桃A(小地主)
- `#52` = 红心A(大地主)
计算公式:`point = floor((n-1)/4)`,`suit = n % 4`
### 服务器地址
生产:`https://anpu.speedphp.com/`(端口 8081,PM2 管理)
---
## 文档索引
| 文件 | 内容 |
|------|------|
| [项目概览.md](项目概览.md) | 功能完成度一览表 |
| [游戏规则.md](游戏规则.md) | 完整规则说明 |
| [技术架构.md](技术架构.md) | 架构图、协议、状态机 |
| [代码分析.md](代码分析.md) | 算法分析、代码片段、已知风险 |
| [进度与计划.md](进度与计划.md) | 里程碑、技术债务 |
| [历史记录/](历史记录/) | 每次开发对话记录 |