# 规范-项目目录与编码标准

> **位置**: `docs/开发规范/规范-项目目录与编码标准.md`
> **版本**: v1.0
> **日期**: 2026-07-08
> **关联**: AGENTS.md

---

## 1. 项目目录结构

```
lawless/
├── docs/                          # 📁 全部文档
│   ├── 设计文档/ (GDD)             # 游戏设计文档 — 策划产出
│   ├── 需求文档/ (PRD)             # 产品需求文档 — 产品产出
│   ├── 技术文档/ (TDD)             # 技术设计文档 — 技术产出
│   ├── 开发规范/                   # 本目录
│   ├── 美术文档/                   # UI规范、原画需求、动效说明
│   ├── 运营文档/                   # 活动策划、数据分析、GM手册
│   └── 协议文档/                   # API/Protobuf/OpenAPI
│
├── client/                        # 📁 客户端（Cocos Creator 3.8.8）
│   ├── assets/
│   │   ├── scripts/                # TypeScript 脚本
│   │   │   ├── data/               # 数据模型/配置表/常量
│   │   │   ├── systems/            # 核心系统（能量/时间/网络/战斗）
│   │   │   ├── app/                # 应用状态/业务逻辑
│   │   │   ├── ui/                 # UI 组件
│   │   │   │   ├── scenes/         # 场景控制器（登录/选角/主界面）
│   │   │   │   ├── screens/        # 功能界面（战斗/背包/设置）
│   │   │   │   ├── components/     # 可复用 UI 组件
│   │   │   │   └── common/         # UI 工具类（SceneUI 等）
│   │   │   └── GameManager.ts      # 游戏主管理器
│   │   ├── scenes/                 # Cocos 场景文件（.scene）
│   │   ├── resources/              # 静态资源
│   │   │   ├── prefabs/            # 预制体
│   │   │   ├── textures/           # 纹理/精灵
│   │   │   ├── animations/         # 动画/Spine
│   │   │   └── fonts/              # 字体
│   │   └── bundles/                # Asset Bundle（热更）
│   ├── build/                      # 构建输出
│   └── project.json
│
├── server/                         # 📁 服务端（Go + Nakama）
│   ├── src/
│   │   ├── main.go                 # 入口
│   │   ├── handlers/               # HTTP/gRPC 处理器
│   │   ├── services/               # 业务服务层
│   │   ├── models/                 # 数据模型
│   │   ├── repositories/           # 数据访问层（DAO）
│   │   ├── match/                  # Realtime Match 逻辑（AOI/位置同步）
│   │   ├── rpc/                    # Nakama RPC 实现
│   │   └── middleware/             # 中间件（认证/限流/日志/异常恢复）
│   ├── configs/                    # 服务端配置模板
│   ├── migrations/                 # 数据库迁移脚本
│   └── Makefile
│
├── api/                            # 📁 协议定义
│   ├── proto/
│   │   └── honghuang.proto         # Protobuf 定义
│   └── openapi.yaml                # OpenAPI 3.0 规范
│
├── database/                       # 📁 数据库
│   ├── migrations/                 # 迁移脚本（up/down）
│   ├── seeds/                      # 种子数据
│   └── schemas/                    # 表结构文档
│
├── configs/                        # 📁 配置中心模板（Nacos）
│   └── nacos/
│       ├── global.yaml
│       ├── combat.yaml
│       ├── economy.yaml
│       ├── map.yaml
│       ├── event.yaml
│       └── cultivation.yaml
│
├── tools/                          # 📁 工具脚本
│   └── scripts/
│       ├── generate_proto.sh       # 生成协议代码
│       ├── build_client.sh         # 客户端构建
│       └── build_server.sh         # 服务端构建
│
├── tests/                          # 📁 测试
│   ├── unit/                       # 单元测试
│   ├── integration/                # 集成测试
│   └── e2e/                        # 端到端测试
│
├── docker/                         # 📁 Docker 配置
│   ├── Dockerfile.client
│   ├── Dockerfile.server
│   └── docker-compose.yml
│
├── AGENTS.md                       # 项目强约束
├── README.md                       # 项目说明
└── CHANGELOG.md                    # 版本变更日志
```

### 1.1 目录禁止行为

- ❌ 在根目录堆放零散文件（必须放入对应子目录）
- ❌ 把服务端代码放在 `client/` 下，反之亦然
- ❌ 用中文或特殊字符命名代码文件/目录（仅限文档可用中文名）
- ❌ 删除或重命名已有标准目录

---

## 2. 文档编写标准

### 2.1 元信息头部（必须）

```markdown
# 标题

> **文档类型**: 游戏设计文档(GDD) / 产品需求文档(PRD) / 技术设计文档(TDD)
> **版本**: vX.Y
> **日期**: YYYY-MM-DD
> **关联文档**: [列出相关的 GDD/PRD/TDD 编号]
> **作者**: [agent 标识]

---

## 已确认决策记录
| # | 决策 | 来源 |
|---|------|------|

## 待确认事项
| # | 问题 | 状态 |
|---|------|------|

## 正文...

---

## 版本记录
- **vX.Y**（YYYY-MM-DD）: [变更摘要]
```

### 2.2 内容规范

- Markdown 格式，UTF-8 编码
- 一级标题 = 文档标题；二级 = 章节；三级 = 小节
- 表格用于枚举、对照、参数表
- 决策用 `✅N`，待确认用 `❓N`
- 所有数值必须标注来源（如"来源: GDD-21 §3.1"）
- 禁止 TODO/FIXME 残留（要么解决，要么列入待确认表）

---

## 3. 代码编写标准

### 3.1 文件头注释（必须）

```typescript
/**
 * @file GameManager.ts
 * @brief 游戏主管理器 — 管理游戏状态、界面切换、数据流
 * @author [agent标识]
 * @date 2026-07-08
 * @sync GDD-02 ✅158, GDD-23 ✅159
 * @version 2.0
 */
```

### 3.2 TypeScript 规范

```typescript
// ✅ 正确：显式类型 + 常量提取 + 注释来源
const ENERGY_REGEN_SECLUSION_COEFFICIENT = 2.25; // GDD-23 ✅159 四档恢复: 闭关

interface CharacterData {
  energyCurrent: number;    // 主动资源 (✅158)
  energyCap: number;        // 成长进度 (✅158)
}

// ❌ 错误：魔法数字 + 无类型 + 无注释
const x = 2.25;
let y: any;
```

| 规则 | 说明 |
|------|------|
| `"strict": true` | 严格模式，禁止隐式 any |
| 显式返回类型 | 函数必须声明返回类型 |
| 禁止 `any` | 除非 interfacing with JS 库 |
| PascalCase 类名 | `class EnergySystem` |
| camelCase 函数/变量 | `calculateRegenCoefficient` |
| UPPER_SNAKE_CASE 常量 | `MAX_INVENTORY_SLOTS` |

### 3.3 Go 规范

- 遵循 `gofmt` 格式
- 导出函数必须注释（`// CalculateDamage ...`）
- 错误处理：显式检查 `if err != nil`，禁止忽略错误
- 数据库查询使用参数化查询（防 SQL 注入）

### 3.4 禁止行为

- ❌ 魔法数字（无来源注释的裸数字）
- ❌ 硬编码配置（所有可调参数走 Nacos/配置文件）
- ❌ 硬编码用户可见文本（走 i18n 本地化表）
- ❌ `console.log` 残留（用分级日志：debug/info/warn/error）
- ❌ 注释掉的代码块（要么删除，要么说明原因）

---

## 4. 美术/UI 标准

### 4.1 资源命名

```
[类型]_[功能]_[状态]_[尺寸].[ext]

btn_login_normal_120x60.png
icon_energy_fill_32x32.png
bg_main_title_1920x1080.jpg
```

### 4.2 UI 设计文档必须包含

- 界面层级结构图（树状）
- 各元素尺寸、位置、颜色、字体
- 交互流程图（点击后的状态变化）
- 与代码的对接说明（节点命名、事件绑定）

---

## 5. 依赖管理

| 规则 | 说明 |
|------|------|
| 锁定版本 | `package-lock.json` / `go.mod` + `go.sum` |
| 安全审查 | 新增依赖查 CVE 漏洞库 |
| 禁止废弃依赖 | last update > 2 年 的不引入 |
| 定期扫描 | 每月运行 `npm audit` / `govulncheck` |

---

## 6. 测试标准

| 测试类型 | 覆盖要求 | 文件位置 |
|----------|----------|----------|
| 单元测试 | 核心业务逻辑（能量/战斗/经济） | `tests/unit/` 或 `server/src/xxx_test.go` |
| 集成测试 | 系统间交互（登录→战斗→结算） | `tests/integration/` |
| 端到端测试 | 完整用户流程 | `tests/e2e/` |
| 性能测试 | 战斗并发/API 压测 | `tests/perf/` |

---

## 7. 版本记录

- **v1.0**（2026-07-08）: 初始版本，覆盖目录结构、文档标准、代码规范、美术标准、依赖管理、测试标准
