# 麻将消一消 · 游戏 Demo 说明

> 配套《关卡搭建工具包》的**试玩验证**demo：直接双击就能玩，用于体验成品关卡的手感（含暗牌玩法）。
> 版本日期：2026-08-13。这个文件夹是独立交付件，与工具包分开，互不依赖。

---

## 一、目录结构

```
游戏Demo/
├── 打开游戏Demo.bat      ← 双击直接开玩（自动定位到本目录，随便放哪都行）
├── game_demo_std.html    ← 游戏页面（浏览器打开）
└── 示例关卡/
    ├── 示例_暗牌.json    ← 内置示例（98 张 / 49 对 / 5 层 / 含 11 张暗牌）
    └── 示例_普通.json    ← 全翻开示例（88 张 / 44 对 / 5 层 / 无暗牌）
```

打开方式（任选）：
- Windows 双击 **`打开游戏Demo.bat`**，会自动用默认浏览器打开游戏页面；
- 或直接把 `game_demo_std.html` 拖进浏览器。

不需要 Node、不需要任何服务器，双击即玩。

---

## 二、玩法（规则速览）

- **4 个卡槽**：点一张可点的牌 → 进槽位；槽里出现**同花色 2 张** → 自动消除。
- **卡槽满 4 张仍无配对 → 游戏结束**。把错拿的牌点回棋盘可放回槽位。
- 顶部进度条显示消除进度；「重来」按钮重新开始当前关。

**什么样算"可点"**：上方没有被压住、且同一层没有被左右夹住（见第五节"已知限制"）。

**牌面样式**：用真实麻将素材图（`麻将/` 目录下 45 张正面 + 背面 + 白板），方形容器内 `object-fit: contain` 居中显示（图片比例 4:5，透明圆角，自带象牙白牌身 + 斜切棱边 + 高光）。**typeId 与牌面图是随机分配**的（不固定 typeId→某张麻将）：页面打开时把 45 张图打乱分别映射到 typeId 0–33；同一会话内重来/导入关卡不重洗，重开页面才重洗。`白`（typeId 33）固定映射到白板图。**层数由牌面左上角 L 徽标标注**（牌身不染色）。暗牌显示麻将背面图，点开才翻面。

---

## 三、暗牌玩法（PROG-0224 选中态机制）

工具包暗牌版关卡里有约 10%–20% 的牌**初始为背面**（深蓝底 + 问号）。
暗牌的交互**不是"翻面再点进槽"两步**，而是「点一下即翻面选中、直接参与配对」：

1. **点背面** → 翻为正面并**被选中**（金色描边高亮），保持正面；
2. **再点已选中的那张** → **移入卡槽**（槽内同花色则随之消除）；
3. 点**同花色**的另一张牌（明/暗均可）→ **两张一起消除**；
4. 点**不同花色**的暗牌 → 新牌翻面、**选中转移到它，旧牌翻回背面**（可自由翻面）；
5. 若**卡槽里已有与它同花色**的牌 → 翻开后**立即进槽消除**，不等后续点击。

> 说明：暗牌**翻回背面只发生在选中转移到另一张暗牌时**；点自己不是取消，而是把它收入卡槽。
> 明牌被点在选中态下时按常规规则进槽（选中的暗牌保持不动）。

暗牌只藏牌面，**不影响消除序列与可解性**——你只是开局不知道花色，要自己翻牌去猜去记。
顶部关卡名会显示 `· 含暗牌` 标记。

---

## 四、怎么试玩"工具包生成的任意关卡"

1. 用工具包的「批量生成与填色」生成成品 JSON（如 `T2_暗/level_001_T2_114.json`）；
2. 在 demo 页面点右上角 **📂 导入关卡**，选中那个 JSON；
3. 直接开玩。导入时自动识别 `typeId` 花色、`isDark` 暗牌。

> 成品数据结构（isDark / specialTiles 等）见《关卡搭建工具包/使用说明.md》第八节，两边完全一致。

---

## 五、已知限制（诚实说明）

1. **demo 是纯前端验证件，不是正式客户端**：没有关卡列表、结算、音效、存档；
   它存在的意义是"工具包出的关卡长什么样、手感对不对"，用来对着调整难度。
2. **可点判定与规格一致**：按需求表 PROG-0209，锁定 = 被上方覆盖 **或** 被同层左右两张夹住。
   demo 与工具包生成器实现相同（被压住 + 左右夹 col±2），两边一致，可直接对照试玩。
3. 暗牌**可自由翻面**：翻回背面只发生在选中转移到另一张暗牌时；点已选中的牌是收入卡槽，不是取消。已消除的暗牌不再显示。
4. 导入关卡只做基本校验（tiles 非空、偶数张、有 typeId），不校验可解性；
   工具包生成的关 100% 可解，手工改坏的 JSON 不保证。

---

## 六、与工具包的分工

| 件 | 干什么 |
|---|---|
| 关卡搭建工具包 | 搭形状 → 生成 + 填色 → 出成品 JSON（按难度分排序） |
| 游戏 Demo | 把成品 JSON 拖进来看效果、试手感（可玩到通关） |

流程：**工具包出关 → demo 试玩 → 定稿**。两件各自独立交付，都可以直接发给对方。
