# 🍉 合成大西瓜 - WeChat 小游戏

纯 Canvas 2D 实现，零外部资源依赖，开箱即玩。

## 快速开始

### 1. 安装微信开发者工具

从 [微信官方](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html) 下载并安装。

### 2. 导入项目

1. 打开微信开发者工具
2. 点击「导入项目」
3. 选择本目录 (`watermelon-merge/`)
4. AppID 填你自己的（或选「测试号」）
5. 点击「确定」

### 3. 编译运行

点击顶部「编译」按钮，模拟器会立即启动游戏。

---

## 游戏特性

| 特性 | 说明 |
|---|---|
| 🎮 **物理引擎** | Verlet 积分 + 圆形碰撞检测，真实物理手感 |
| 🎨 **程序化美术** | 渐变高光、阴影、出生缩放动画，无需图片素材 |
| ✨ **粒子特效** | 合并时爆炸粒子 + 浮动得分文字 |
| 📳 **屏幕震动** | 合并时触发震动反馈，增强打击感 |
| 🔥 **Combo 系统** | 连续合并触发 Combo 倍率，最高 5 倍 |
| 🏆 **最高分记录** | 自动保存历史最高分 |
| 📱 **触控操作** | 拖动瞄准，松手掉落 |

---

## 游戏机制

### 水果等级（8 级）

```
樱桃 → 草莓 → 橘子 → 苹果 → 梨 → 西瓜 → 哈密瓜 → 大西瓜
```

### 核心规则

1. **拖动** 瞄准落点，**松手** 掉落水果
2. **相同水果** 碰撞且速度足够大时合并为下一级
3. 合并获得分数：`10 × 2^等级`（Combo 时额外加成）
4. **合成大西瓜** 即胜利
5. **水果堆到顶部** 或 **超过 60 个** 则游戏结束

### 计分规则

| 合并操作 | 基础分 | Combo x2 | Combo x3 | Combo x5 |
|---|---|---|---|---|
| 樱桃→草莓 | 2 | +2 | +4 | +6 |
| 草莓→橘子 | 4 | +4 | +8 | +12 |
| ... | ... | ... | ... | ... |
| 哈密瓜→大西瓜 | 128 | +128 | +256 | +512 |

---

## 文件结构

```
watermelon-merge/
├── game.js                  # 主游戏逻辑（物理 + 渲染 + 输入）
├── game.json                # 游戏配置
├── project.config.json      # 项目配置（需替换 AppID）
├── project.private.config.json  # 本地配置
└── README.md                # 本文件
```

---

## 发布上线

### 1. 替换 AppID

编辑 `project.config.json`，把 `wxYOUR_APPID_HERE` 换成你自己的小游戏 AppID。

### 2. 上传代码

```bash
# 方式一：微信开发者工具 → 上传
# 方式二：CLI
cli upload --appid YOUR_APPID --project .
```

### 3. 提交审核

- 登录 [微信公众平台](https://mp.weixin.qq.com/)
- 版本管理 → 上传版本 → 提交审核
- 审核通过后发布

---

## 扩展方向

如果你想进一步完善，可以加这些：

### 美术升级
- 替换为真实水果图片（PNG/SVG）
- 添加背景场景（果园、天空）
- 添加角色表情/动画

### 音效
```javascript
// 添加音效示例
const dropAudio = wx.createInnerAudioContext();
dropAudio.src = 'assets/sounds/drop.mp3';
dropAudio.play();
```

### 微信能力
- **分享**：`wx.shareAppMessage()` 分享高分截图
- **排行榜**：云开发排行榜
- **广告**：激励视频复活机制
- **社交**：好友排名、群排行榜

### 游戏性增强
- 道具系统（炸弹、暂停、撤销）
- 关卡模式（限时挑战）
- 皮肤系统（不同水果主题）

---

## 性能优化建议

| 方向 | 建议 |
|---|---|
| 渲染 | 使用 `requestAnimationFrame`，避免 `setInterval` |
| 物理 | 碰撞检测用空间网格优化（当前 O(n²) 足够 60 个水果） |
| 内存 | 及时清理已死亡水果和过期粒子 |
| 打包 | 开启 `minified: true`，压缩后约 15KB |

---

## 常见问题

**Q: 导入项目后报错？**
A: 确认 `project.config.json` 的 `appid` 已替换，且开发者工具版本 ≥ 1.06。

**Q: 游戏跑不动？**
A: 检查水果数量是否过多，可在 `checkGameOver()` 中调整 `60` 的上限值。

**Q: 如何调整游戏速度？**
A: 修改 `game.js` 顶部的 `AUTO_DROP_FRAME`（掉落间隔）和 `GRAVITY`（重力）。

---

## License

MIT
