forked from datawhale/whale-town-front
0b533189ecdccf39790cf1d13c9605c7abf482da
## 🏗️ 主要变更 ### 目录结构重构 - 将 core/ 迁移到 _Core/(框架层) - 将 scenes/ 重构为 Scenes/(玩法层)和 UI/(界面层) - 将 data/ 迁移到 Config/(配置层) - 添加 Assets/ 资源层和 Utils/ 工具层 - 将 scripts/ 迁移到 tools/(开发工具) ### 架构分层 - **_Core/**: 框架层 - 全局单例和管理器 - **Scenes/**: 玩法层 - 游戏场景和实体 - **UI/**: 界面层 - HUD、窗口、对话系统 - **Assets/**: 资源层 - 精灵图、音频、字体 - **Config/**: 配置层 - 游戏配置和本地化 - **Utils/**: 工具层 - 通用辅助脚本 ### 文件更新 - 更新 project.godot 中的所有路径引用 - 更新自动加载脚本路径 - 更新测试文件的引用路径 - 添加 REFACTORING.md 详细说明 - 添加 MIGRATION_COMPLETE.md 迁移完成标记 - 更新 README.md 反映新架构 ### 设计原则 - ✅ 清晰的分层(框架/玩法/界面) - ✅ 场景内聚(脚本紧邻场景文件) - ✅ 组件化设计(可复用组件) - ✅ 职责单一(每个目录职责明确) ## 📋 详细信息 查看 REFACTORING.md 了解完整的重构说明和迁移映射表 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
🐋 whaleTown
一个使用 Godot 4.5 引擎开发的现代化像素游戏项目,集成了完整的用户认证系统和API接口。
🎮 项目信息
- 引擎版本: Godot 4.5.1
- 渲染器: Forward Plus
- 项目类型: 2D 像素游戏
- 架构模式: 模块化 + 事件驱动
- 后端集成: RESTful API + 用户认证
🚀 快速开始
环境要求
- Godot Engine 4.5+
- Python 3.7+ (用于API测试和Web服务器)
运行项目
# 1. 克隆项目
git clone <repository-url>
cd whale-town
# 2. 使用Godot编辑器打开项目
# 3. 按F5运行或点击"运行"按钮
# 4. 测试API接口(可选)
python tests/api/simple_api_test.py
Web版本部署
# Windows用户
tools\build_web.bat # 导出Web版本
tools\serve_web.bat # 启动本地测试服务器
# Linux/macOS用户
./tools/build_web.sh # 导出Web版本
./tools/serve_web.sh # 启动本地测试服务器
详细部署指南请查看: Web部署完整指南
🏗️ 项目架构
核心设计理念
项目采用 分层架构 和 组件化设计,遵循 Godot 最佳实践:
- 清晰的分层 - 框架层、玩法层、界面层明确分离
- 场景内聚 - 脚本紧邻场景文件,符合 Godot 原生开发习惯
- 高度解耦 - 通过事件系统和管理器通信
- 组件复用 - 可复用组件统一管理
- 标准化 - 统一的命名规范和目录结构
- 测试驱动 - 完整的测试体系和文档
目录结构
whaleTown/
├── _Core/ # [框架层] 游戏的底层框架,单例,全局管理器
│ ├── managers/ # 游戏管理器
│ │ ├── GameManager.gd # 游戏状态管理
│ │ ├── SceneManager.gd # 场景管理
│ │ ├── NetworkManager.gd # 网络通信
│ │ └── ResponseHandler.gd # API响应处理
│ ├── systems/ # 核心系统
│ │ └── EventSystem.gd # 事件系统
│ └── singletons/ # 其他单例(待扩展)
│
├── Scenes/ # [玩法层] 具体的游戏场景、实体、地图
│ ├── Maps/ # 地图场景
│ │ └── main_scene.tscn # 主游戏场景
│ ├── Entities/ # 游戏实体
│ │ ├── Player/ # 玩家实体
│ │ ├── NPC/ # NPC实体
│ │ └── Interactables/ # 交互物
│ └── Components/ # 可复用组件
│
├── UI/ # [界面层] 所有UI相关的预制体和逻辑
│ ├── HUD/ # 抬头显示(常驻)
│ ├── Windows/ # 模态窗口
│ │ └── LoginWindow.tscn # 登录窗口
│ ├── Dialog/ # 对话系统
│ └── Theme/ # 全局样式
│ ├── MainTheme.tres # 主主题
│ └── Fonts/ # 字体文件
│
├── Assets/ # [资源层] 美术、音频、字体
│ ├── Sprites/ # 精灵图
│ │ ├── icon/ # 图标
│ │ ├── materials/ # 材质
│ │ ├── shaders/ # 着色器
│ │ └── sprites/ # 精灵图
│ ├── Audio/ # 音频
│ └── Fonts/ # 字体
│
├── Config/ # [配置层] 游戏配置文件
│ ├── game_config.json # 游戏配置
│ └── zh_CN.json # 中文本地化
│
├── Utils/ # [工具层] 通用辅助脚本
│ └── StringUtils.gd # 字符串工具
│
├── Tests/ # [测试层] 单元测试脚本
│ ├── api/ # API接口测试
│ ├── auth/ # 认证UI测试
│ ├── unit/ # 单元测试
│ ├── integration/ # 集成测试
│ └── performance/ # 性能测试
│
├── docs/ # 项目文档
│ ├── auth/ # 认证相关文档
│ ├── api-documentation.md # API接口文档
│ ├── web_deployment_guide.md # Web部署完整指南
│ ├── web_deployment_changelog.md # Web部署更新日志
│ ├── project_structure.md # 项目结构说明
│ ├── naming_convention.md # 命名规范
│ ├── code_comment_guide.md # 代码注释规范
│ └── git_commit_guide.md # Git提交规范
│
├── tools/ # 开发工具和脚本
│ ├── build_web.bat # Windows Web导出脚本
│ ├── build_web.sh # Linux/macOS Web导出脚本
│ ├── serve_web.bat # Windows 本地服务器
│ └── serve_web.sh # Linux/macOS 本地服务器
│
├── REFACTORING.md # 项目结构重构文档
└── MIGRATION_COMPLETE.md # 迁移完成标记
架构层次说明
1. 框架层 (_Core/)
- 职责: 游戏的底层框架,与具体游戏逻辑无关
- 内容: 单例管理器、核心系统
- 特点: 自动加载,全局可访问
- 命名: 使用下划线前缀
_Core表示这是核心框架代码
2. 玩法层 (Scenes/)
- 职责: 游戏世界,地图和实体
- 内容: 游戏场景、角色、NPC、交互物
- 特点: 场景内聚,脚本紧邻场景文件
- 组织: 按游戏世界的实体类型分类
3. 界面层 (UI/)
- 职责: 所有界面,HUD和弹窗
- 内容: 常驻界面、模态窗口、对话系统、主题样式
- 特点: 独立于游戏场景,便于UI开发和维护
- 组织: 按界面类型和用途分类
4. 资源层 (Assets/)
- 职责: 纯美术资源
- 内容: 精灵图、音频、字体等
- 特点: 与代码分离,便于美术组独立工作
- 组织: 按资源类型分类
5. 配置层 (Config/)
- 职责: 静态数据,策划可编辑
- 内容: 游戏配置、本地化文件
- 特点: 数据驱动,便于调整游戏参数
- 格式: JSON 文件
6. 工具层 (Utils/)
- 职责: 通用辅助脚本
- 内容: 工具函数库
- 特点: 可被任何层调用
- 原则: 无依赖,纯函数
核心系统
项目包含以下自动加载的核心系统(位于 _Core/):
- GameManager - 全局游戏状态管理
- SceneManager - 场景切换管理
- EventSystem - 事件通信系统
- NetworkManager - 网络通信管理
- ResponseHandler - API响应处理
使用示例:
# 状态管理
GameManager.change_state(GameManager.GameState.IN_GAME)
# 场景切换(已更新路径)
SceneManager.change_scene("main") # → res://Scenes/Maps/main_scene.tscn
# 事件通信
EventSystem.emit_event("player_health_changed", 80)
EventSystem.connect_event("player_died", _on_player_died)
设计原则
1. 清晰的分层
- _Core: 框架代码,与具体游戏逻辑无关
- Scenes: 游戏世界,地图和实体
- UI: 所有界面,HUD和弹窗
- Config: 静态数据,策划可编辑
2. 组件化设计
可复用组件放在 Scenes/Components/ 下,使用组合优于继承的设计模式:
- InteractableArea.tscn - 让任何物体"可交互"
- MovementSync.gd - 网络位置同步
- NameTag3D.tscn - 头顶名字条
3. 场景内聚
- 每个 .tscn 配套一个 .gd
- 脚本紧邻场景文件存放
- 符合 Godot 原生开发习惯
4. 职责单一
UI/Windows/ - 模态窗口(登录、设置、商店)
UI/HUD/ - 常驻界面(聊天框、状态栏)
UI/Dialog/ - 对话系统
团队协作
✨ 主要功能
🔐 用户认证系统
- 用户注册 - 支持邮箱验证码验证
- 用户登录 - 多种登录方式(用户名/邮箱/手机号)
- 密码管理 - 密码重置和修改功能
- GitHub OAuth - 第三方登录集成
- 错误处理 - 完整的错误提示和频率限制
- UI界面: UI/Windows/LoginWindow.tscn
🌐 Web版本部署
- 自动化导出 - 一键导出Web版本
- 本地测试服务器 - 内置HTTP服务器用于测试
- 生产环境配置 - 完整的服务器配置指南
- 跨平台支持 - Windows、Linux、macOS全平台支持
- 性能优化 - 资源压缩和加载优化
🎮 游戏功能
- 主场景 - 游戏主界面和菜单系统 (Scenes/Maps/main_scene.tscn)
- 认证场景 - 完整的登录注册界面
- 状态管理 - 用户状态和游戏状态管理
- 网络通信 - RESTful API集成 (_Core/managers/NetworkManager.gd)
🧪 测试体系
- API测试 - 完整的接口测试脚本 (Tests/api/)
- UI测试 - 认证界面的交互测试 (Tests/auth/)
- 错误场景 - 边界条件和异常处理测试
🔧 开发规范
命名规范
- 场景文件:
snake_case_scene.tscn(如:auth_scene.tscn) - 脚本文件:
PascalCase.gd(如:AuthScene.gd) - 节点名称:
camelCase(如:loginButton) - 变量/函数:
camelCase(如:playerHealth) - 常量:
UPPER_CASE(如:MAX_HEALTH) - 资源文件:
snake_case(如:bg_auth_scene.png)
代码注释规范
- 文件头注释: 说明文件用途、主要功能和依赖关系
- 函数注释: 包含参数说明、返回值和使用示例
- 复杂逻辑: 添加行内注释解释业务逻辑和设计决策
- 特殊标记: 使用 TODO、FIXME、NOTE 等标准标记
- AI辅助: 支持AI补充注释,提供详细的上下文信息
Git 提交规范
使用格式:<类型>:<描述>
常用类型:feat fix docs refactor scene asset ui test
git commit -m "feat:实现用户登录功能"
git commit -m "fix:修复429错误处理"
git commit -m "test:添加API接口测试"
git commit -m "docs:更新项目文档"
📚 项目文档
核心文档
- 📋 项目结构详解 - 完整的架构说明
- 📝 命名规范 - 详细的命名规则
- 💬 代码注释规范 - 注释标准和AI辅助指南
- 🔀 Git提交规范 - 提交信息标准
- 🌐 Web部署指南 - 完整的Web部署文档
API和测试文档
🛠️ 开发指南
添加新场景
- 在 Scenes/ 对应分类下创建场景文件
- 脚本文件紧邻场景文件存放(场景内聚原则)
- 在 _Core/managers/SceneManager.gd 中注册场景路径
- 使用
SceneManager.change_scene()切换场景
示例:
# 在 SceneManager.gd 中注册
var scene_paths: Dictionary = {
"battle": "res://Scenes/Maps/battle_scene.tscn",
"shop": "res://UI/Windows/ShopWindow.tscn",
}
# 使用
SceneManager.change_scene("battle")
创建可复用组件
- 在 Scenes/Components/ 创建组件场景
- 实现标准接口,保持组件独立性
- 通过 EventSystem 与其他模块通信
- 组件可以被任何场景实例化复用
添加UI界面
- 模态窗口 → 放入 UI/Windows/
- 常驻界面 → 放入 UI/HUD/
- 对话系统 → 放入 UI/Dialog/
- UI脚本紧邻场景文件,保持内聚
资源管理
- 精灵图 → 放入 Assets/Sprites/ 对应分类
- 音频文件 → 放入 Assets/Audio/ 对应分类
- 字体文件 → 放入 UI/Theme/Fonts/
- 配置文件 → 放入 Config/
- 遵循命名规范,使用英文小写+下划线
路径映射参考
| 功能类型 | 旧路径 | 新路径 |
|---|---|---|
| 核心管理器 | core/managers/ |
_Core/managers/ |
| 游戏场景 | scenes/main_scene.tscn |
Scenes/Maps/main_scene.tscn |
| 登录界面 | scenes/auth_scene.tscn |
UI/Windows/LoginWindow.tscn |
| 配置文件 | data/configs/ |
Config/ |
| 工具类 | core/utils/ |
Utils/ |
详细的重构说明请查看:REFACTORING.md
API接口测试
项目提供了完整的Python测试脚本来验证API接口:
# 快速测试API连通性
python tests/api/simple_api_test.py
# 完整的API功能测试
python tests/api/api_test.py --verbose
# 自定义服务器地址测试
python tests/api/simple_api_test.py https://your-api-server.com
测试脚本会验证:
- ✅ 应用状态检查
- ✅ 用户注册和登录功能
- ✅ 邮箱验证码发送和验证
- ✅ 错误处理和频率限制(429错误)
- ✅ 管理员功能和权限控制
- ✅ 用户状态管理
- ✅ 安全功能测试
📖 查看 API测试文档 了解详细使用方法
认证UI测试
项目还提供了Godot内置的UI测试场景:
- 在Godot编辑器中打开
tests/auth/auth_ui_test.tscn - 运行场景进行交互式测试
- 测试各种错误场景和边界条件
📖 查看 认证UI测试文档 了解详细使用方法
🔧 技术栈
- 游戏引擎: Godot 4.5.1
- 脚本语言: GDScript
- 架构模式: 模块化 + 事件驱动
- 状态管理: 单例管理器模式
- 通信机制: 全局事件系统
- API集成: RESTful API + JSON
- 测试框架: Python + Godot内置测试
🤝 贡献指南
- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 遵循项目的命名规范和架构设计
- 添加相应的测试用例
- 更新相关文档
- 提交更改 (
git commit -m 'feat:添加某个功能') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
贡献类型
- 🐛 Bug修复
- ✨ 新功能开发
- 📚 文档改进
- 🧪 测试用例
- 🎨 UI/UX改进
- ⚡ 性能优化
📄 许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
🎯 项目状态
- ✅ 基础架构搭建完成
- ✅ 项目结构重构完成(2025-12-31)
- ✅ 用户认证系统完成
- ✅ API接口集成完成
- ✅ 测试体系建立完成
- ✅ 文档体系完善
- 🚧 游戏核心玩法开发中
- 🚧 更多功能模块开发中
最后更新: 2025-12-31
重要更新: 项目已完成架构重构,采用新的分层结构。详见 REFACTORING.md
Description
Languages
PLSQL
99.4%
GDScript
0.3%
Python
0.1%