文章目录
红楼回忆志 - Claude Code 重构 Prompts
按阶段顺序执行,每个 Prompt 完成后验证再进行下一步。
阶段一:准备工作
Prompt 1.1 — 创建新目录结构
</> PLAINTEXT
请在 Godot 项目根目录 honglou/ 下创建以下新目录结构,不要移动或修改任何现有文件:
core/autoload/
core/systems/
core/constants/
features/eavesdrop/
features/market/
features/inbox/
features/relationship/
features/power/
scenes/main/
scenes/features/
scenes/components/
scenes/debug/
scripts/main/
scripts/features/eavesdrop/
scripts/features/market/
scripts/features/inbox/
scripts/features/relationship/
scripts/components/
scripts/debug/
data/models/
data/templates/
ui/common/
ui/dialogs/
resources/sprites/
resources/audio/
resources/fonts/
tests/unit/
tests/integration/
docs/
在每个新目录中创建一个空的 .gitkeep 文件以使 git 追踪该目录。
完成后列出所有新创建的目录。
Prompt 1.2 — Git 备份
</> PLAINTEXT
在 honglou/ 项目根目录执行以下 git 操作,为重构前的代码创建备份:
1. 执行 git add . 暂存所有当前文件
2. 执行 git commit,提交信息为:
"chore: backup before refactoring - pre-restructure snapshot"
3. 创建新分支 backup-pre-refactor
4. 切换回原来的分支(main 或 master)
完成后输出 git log --oneline -3 的结果确认提交成功。
阶段二:核心层迁移
Prompt 2.1 — 迁移 Autoload 文件
</> PLAINTEXT
将以下文件从旧路径复制到新路径(使用复制而非移动,保持原文件不动直到验证通过):
复制规则:
- autoload/GameTime.gd → core/autoload/GameTime.gd
- scripts/autoload/EavesdropManager.gd → core/autoload/EavesdropManager.gd
- scripts/autoload/EventBus.gd → core/autoload/EventBus.gd
- scripts/autoload/FirebaseManager.gd → core/autoload/FirebaseManager.gd
- scripts/autoload/GameState.gd → core/autoload/GameState.gd
- scripts/autoload/MaidProgressionChecker.gd → core/autoload/MaidProgressionChecker.gd
- scripts/autoload/MockDatabase.gd → core/autoload/MockDatabase.gd
- scripts/autoload/PlayerState.gd → core/autoload/PlayerState.gd
- scripts/autoload/RelationshipManager.gd → core/autoload/RelationshipManager.gd
- scripts/autoload/StaminaManager.gd → core/autoload/StaminaManager.gd
- scripts/autoload/SupabaseManager.gd → core/autoload/SupabaseManager.gd
- scripts/data/GameConfig.gd → core/autoload/GameConfig.gd
同时复制对应的 .gd.uid 文件(如果存在)。
完成后列出 core/autoload/ 目录中的所有文件。
Prompt 2.2 — 更新 project.godot 中的 Autoload 注册路径
</> PLAINTEXT
读取 honglou/project.godot 文件,找到 [autoload] 部分,将其中所有路径更新为新路径。
新的 [autoload] 配置应为:
[autoload]
GameState="res://core/autoload/GameState.gd"
PlayerState="res://core/autoload/PlayerState.gd"
EventBus="res://core/autoload/EventBus.gd"
GameTime="res://core/autoload/GameTime.gd"
GameConfig="res://core/autoload/GameConfig.gd"
SupabaseManager="res://core/autoload/SupabaseManager.gd"
MockDatabase="res://core/autoload/MockDatabase.gd"
StaminaManager="res://core/autoload/StaminaManager.gd"
EavesdropManager="res://core/autoload/EavesdropManager.gd"
RelationshipManager="res://core/autoload/RelationshipManager.gd"
MaidProgressionChecker="res://core/autoload/MaidProgressionChecker.gd"
InboxManager="res://core/autoload/InboxManager.gd"
注意:
1. 如果 InboxManager.gd 目前在 scripts/inbox/ 下,先只注册已迁移的文件
2. 保留原有注册顺序,不要打乱依赖关系
3. 修改完成后输出修改后的 [autoload] 段落内容供我确认
Prompt 2.3 — 迁移 src/ 核心系统文件
</> PLAINTEXT
将 src/ 目录下的文件复制到 core/systems/,同时重命名为 PascalCase:
复制并重命名规则:
- src/game.gd → core/systems/Game.gd
- src/player.gd → core/systems/Player.gd
- src/camera.gd → core/systems/Camera.gd
- src/input.gd → core/systems/InputHandler.gd
- src/tilemap.gd → core/systems/TileMap.gd
- src/collision.gd → core/systems/Collision.gd
- src/animations.gd → core/systems/Animation.gd
- src/scene.gd → core/systems/Scene.gd
- src/player_states.gd → core/systems/PlayerStates.gd
对于 src/maps/ 子目录,将其内容复制到 core/systems/maps/。
复制完成后,在每个迁移到 core/systems/ 的文件顶部检查是否有 class_name 声明,
如果文件名变了,请同步更新 class_name 为新的 PascalCase 名称。
完成后列出 core/systems/ 中的所有文件。
Prompt 2.4 — 迁移常量文件
</> PLAINTEXT
将常量相关文件复制到 core/constants/:
- src/constants.gd → core/constants/GameConstants.gd
(同时将文件内的 class_name 更新为 GameConstants,如有)
- src/assets.gd → core/constants/AssetPaths.gd
(同时将文件内的 class_name 更新为 AssetPaths,如有)
完成后输出两个文件的前 20 行,确认内容正确。
阶段三:功能层迁移
Prompt 3.1 — 迁移听壁脚(Eavesdrop)模块
</> PLAINTEXT
将听壁脚相关的脚本和场景文件复制到对应的新位置:
脚本文件(复制到 features/eavesdrop/):
- scripts/ui/EavesdropHub.gd
- scripts/ui/EavesdropScene.gd
- scripts/ui/EavesdropSessionItem.gd(如存在)
- scripts/ui/IntelIntercept.gd(如存在)
- scripts/ui/IntelBag.gd(如存在)
- scripts/ui/IntelBagUI.gd(如存在)
- scripts/ui/IntelFragmentItem.gd(如存在)
- scripts/data/intel_templates.gd → features/eavesdrop/IntelTemplates.gd
(重命名为 PascalCase,同时更新文件内 class_name)
场景文件(复制到 scenes/features/):
- scenes/ui/EavesdropScene.tscn(如存在)
- scenes/ui/EavesdropHub.tscn(如存在)
- scenes/ui/IntelIntercept.tscn(如存在)
请先列出 scripts/ui/ 中所有包含 "Eavesdrop" 或 "Intel" 关键字的文件,
再执行复制,确保没有遗漏。
Prompt 3.2 — 迁移市场(Market)模块
</> PLAINTEXT
将市场相关文件复制到新位置:
脚本文件(复制到 features/market/):
- scripts/market/BridgeMarket.gd
- scripts/market/BridgeMarketUI.gd
- scripts/market/ListingCard.gd
场景文件(复制到 scenes/features/):
- scenes/market/ 目录下所有 .tscn 文件
请先列出 scripts/market/ 和 scenes/market/ 下的所有文件,
确认后执行复制,并输出新位置的文件列表。
Prompt 3.3 — 迁移信箱(Inbox)模块
</> PLAINTEXT
将信箱相关文件复制到新位置:
脚本文件:
- scripts/inbox/InboxManager.gd → features/inbox/InboxManager.gd
- scripts/ui/InboxUI.gd → features/inbox/InboxUI.gd(如存在)
场景文件(如存在,复制到 scenes/features/):
- 所有包含 "Inbox" 关键字的 .tscn 文件
请先搜索整个项目中文件名包含 "Inbox" 的所有 .gd 和 .tscn 文件,
列出结果后再执行复制。
Prompt 3.4 — 迁移关系(Relationship)和势力(Power)模块
</> PLAINTEXT
将关系和势力相关文件复制到新位置:
关系模块(复制到 features/relationship/):
- scripts/ui/RelationshipPanel.gd(如存在)
- scripts/ui/MaidProgressPanel.gd(如存在)
势力模块(复制到 features/power/):
- scripts/systems/PowerInfluence.gd
对应场景文件复制到 scenes/features/:
- 文件名包含 "Relationship"、"MaidProgress" 的 .tscn 文件
请先搜索项目中所有包含上述关键字的文件并列出,再执行复制。
阶段四:场景与脚本重组
Prompt 4.1 — 迁移主流程场景和脚本
</> PLAINTEXT
将主流程相关的场景和脚本文件复制到对应新目录:
场景文件(scenes/*.tscn → scenes/main/):
- scenes/Main.tscn
- scenes/Login.tscn
- scenes/RoleSelect.tscn
- scenes/Hub.tscn
- scenes/Game.tscn
- scenes/Settlement.tscn
脚本文件(scripts/*.gd 或 scripts/ui/*.gd → scripts/main/):
- 对应上述场景的同名 .gd 文件(如 HubUI.gd 对应 Hub.tscn,请判断对应关系)
请先列出 scenes/ 根目录下所有 .tscn 文件,以及 scripts/ 根目录和 scripts/ui/ 下的
所有主流程相关 .gd 文件,确认映射关系后再执行复制。
Prompt 4.2 — 整理 UI 通用组件
</> PLAINTEXT
整理 UI 目录,将通用组件归类:
1. 将旧 ui/ 目录下的文件复制到 ui/common/:
- ui/TimePanel.gd → ui/common/TimePanel.gd
- ui/TimePanel.tscn → ui/common/TimePanel.tscn
- ui/TimePanel.gd.uid → ui/common/TimePanel.gd.uid(如存在)
2. 将调试面板移动到正确位置:
- debug/DebugTimePanel.tscn → scenes/debug/DebugTimePanel.tscn
- scripts/ui/DebugPanelUI.gd → scripts/debug/DebugPanelUI.gd(如存在)
3. 将弹窗相关文件复制到 ui/dialogs/:
- 文件名包含 "Panel" 或 "Dialog" 且不在 features/ 中的 .gd 和 .tscn 文件
请先列出需要操作的文件,确认后再执行。
阶段五:路径更新
Prompt 5.1 — 批量更新 .tscn 场景文件中的脚本路径
</> PLAINTEXT
扫描 scenes/ 目录下所有 .tscn 文件,找出其中引用了旧路径的 script 属性,
并更新为新路径。
需要替换的路径映射:
- "res://autoload/" → "res://core/autoload/"
- "res://src/" → "res://core/systems/"
- "res://scripts/autoload/" → "res://core/autoload/"
- "res://scripts/ui/" → 根据文件所属功能模块,替换为对应的新路径
- Eavesdrop/Intel 相关 → "res://features/eavesdrop/"
- Market 相关 → "res://features/market/"
- Inbox 相关 → "res://features/inbox/"
- Relationship/Maid 相关 → "res://features/relationship/"
- Hub/Login/Main 相关 → "res://scripts/main/"
- "res://scripts/market/" → "res://features/market/"
- "res://scripts/inbox/" → "res://features/inbox/"
- "res://scripts/data/" → 根据内容分发到 core/autoload/ 或 data/models/
- "res://ui/" → "res://ui/common/"(仅 TimePanel 相关)
操作前请先输出找到的所有旧路径引用,确认替换计划后再执行修改。
Prompt 5.2 — 批量更新 .gd 脚本中的 preload/load 路径
</> PLAINTEXT
扫描 core/、features/、scripts/ 目录下所有 .gd 文件,
找出使用 preload() 或 load() 引用了旧路径的语句,并更新为新路径。
替换规则与 Prompt 5.1 相同:
- "res://autoload/" → "res://core/autoload/"
- "res://src/" → "res://core/systems/"
- "res://scripts/autoload/" → "res://core/autoload/"
- "res://scripts/ui/Eavesdrop" → "res://features/eavesdrop/Eavesdrop"
- "res://scripts/ui/Intel" → "res://features/eavesdrop/Intel"
- "res://scripts/market/" → "res://features/market/"
- "res://scripts/inbox/" → "res://features/inbox/"
- "res://scripts/data/intel_templates" → "res://features/eavesdrop/IntelTemplates"
- "res://scripts/data/GameConfig" → "res://core/autoload/GameConfig"
请先列出所有找到的旧路径引用(文件名 + 行号 + 引用内容),
我确认后再执行批量替换。
Prompt 5.3 — 统一修复文件命名(snake_case → PascalCase)
</> PLAINTEXT
检查 features/ 目录下是否还有使用 snake_case 命名的 .gd 文件。
重点检查:
- features/eavesdrop/intel_templates.gd 应已重命名为 IntelTemplates.gd
- 其他任何 snake_case 文件
对于每个需要重命名的文件:
1. 复制为新的 PascalCase 文件名
2. 如果文件内有 class_name 声明,同步更新
3. 在整个项目中搜索对该文件的引用,并更新为新文件名
请列出所有需要重命名的文件,确认后再执行。
阶段六:清理与收尾
Prompt 6.1 — 验证新结构完整性
</> PLAINTEXT
在删除旧文件之前,执行以下验证检查:
1. 列出 core/autoload/ 中的所有文件,对比原 autoload/ 和 scripts/autoload/ 的文件列表,
确认没有遗漏。
2. 列出 core/systems/ 中的所有文件,对比原 src/ 的文件列表,
确认没有遗漏。
3. 在项目中搜索仍然引用旧路径的语句:
- 搜索 "res://autoload/" 的出现
- 搜索 "res://src/" 的出现
- 搜索 "res://scripts/autoload/" 的出现
- 搜索 "res://scripts/ui/" 的出现(应该只剩非功能模块文件)
4. 输出 project.godot 中的 [autoload] 段落,确认所有路径已更新。
将验证结果整理为一份报告,列出:
- ✅ 已完成的迁移
- ⚠️ 仍需处理的项目
Prompt 6.2 — 删除旧目录
</> PLAINTEXT
在确认 Prompt 6.1 的验证全部通过后,执行以下清理操作:
删除以下旧目录(及其所有内容):
- autoload/
- src/
- scripts/autoload/
- scripts/data/
- scripts/market/
- scripts/inbox/
- ui/(根目录下的旧 ui/,已迁移到 ui/common/)
- scenes/market/
- scenes/ui/(如已全部迁移)
注意:
- 删除前再次确认每个目录下的文件已全部迁移
- scripts/ui/ 暂时保留,仅删除已确认迁移的文件
- debug/ 根目录保留或合并到 scenes/debug/
删除完成后,输出项目根目录的一级目录结构。
Prompt 6.3 — 规范检查:添加类型注解
</> PLAINTEXT
对 core/autoload/ 中的关键文件进行代码质量改进,
为函数参数和返回值添加 GDScript 类型注解:
优先处理以下文件中的 public 函数:
- GameState.gd
- PlayerState.gd
- StaminaManager.gd
- EavesdropManager.gd
改进示例:
# 改进前
func update_deficit(delta):
deficit_value = clamp(deficit_value + delta, 0.0, 100.0)
# 改进后
func update_deficit(delta: float) -> void:
deficit_value = clampf(deficit_value + delta, 0.0, 100.0)
请逐个文件处理,每次修改后输出修改的函数列表。
不要修改函数的逻辑,只添加类型注解。
Prompt 6.4 — 生成架构文档
</> PLAINTEXT
根据重构后的项目结构,在 docs/ 目录下生成以下文档:
1. docs/architecture.md
内容包括:
- 项目概览(引擎、后端、类型)
- 目录结构说明(每个目录的职责)
- 模块依赖关系图(用 Mermaid 语法)
- Autoload 加载顺序及依赖说明
2. docs/module-specifications.md
内容包括:
- 各功能模块(eavesdrop、market、inbox、relationship、power)的职责说明
- 模块间通信方式(EventBus 信号列表)
- 新增模块的标准结构模板
请先读取以下文件以了解现有代码结构,再生成文档:
- project.godot(了解 autoload 注册)
- core/autoload/EventBus.gd(了解现有信号)
- core/autoload/GameState.gd(了解全局状态)
Prompt 6.5 — 最终提交
</> PLAINTEXT
执行最终的 git 提交,记录本次重构:
1. 执行 git add .
2. 执行 git commit,提交信息为:
refactor: complete directory structure reorganization
- Moved all autoload scripts to core/autoload/
- Moved core engine systems from src/ to core/systems/
- Organized feature modules into features/ (eavesdrop, market, inbox, relationship, power)
- Unified file naming to PascalCase
- Separated main-flow scenes into scenes/main/
- Separated feature scenes into scenes/features/
- Cleaned up redundant ui/ and autoload/ directories
- Added type annotations to core autoload scripts
- Added architecture documentation in docs/
BREAKING CHANGE: All resource paths have changed.
See docs/architecture.md for the new directory structure.
3. 输出 git log --oneline -5 确认提交记录。
附录:常用检查命令
在任何阶段遇到问题时,可以使用以下 Prompt 进行排查:
检查路径引用残留
</> PLAINTEXT
在整个项目中搜索以下旧路径的引用,并列出文件名、行号和内容:
- "res://autoload/"
- "res://src/"
- "res://scripts/autoload/"
- "res://scripts/ui/"
- "res://scripts/data/"
- "res://scripts/market/"
- "res://scripts/inbox/"
输出格式:文件路径:行号: 引用内容
检查 Autoload 文件完整性
</> PLAINTEXT
列出以下目录中的所有 .gd 文件,并对比差异:
1. core/autoload/ (新位置)
2. autoload/ (旧位置,如未删除)
3. scripts/autoload/ (旧位置,如未删除)
确认新位置包含旧位置的所有文件。
评论