An open API service indexing awesome lists of open source software.

https://github.com/speedphp/anpu

安铺打地主的牌玩法服务
https://github.com/speedphp/anpu

Last synced: 27 days ago
JSON representation

安铺打地主的牌玩法服务

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) | 里程碑、技术债务 |
| [历史记录/](历史记录/) | 每次开发对话记录 |