8.0 KiB
8.0 KiB
Dungeon Sweeper(扫雷 × 自动战斗 闯关 Roguelike)
扫雷推理层 + 自动战斗结算的两段式回合 Roguelike。个人开发,MVP 优先管线。
设计入口(独立版 GDD):design/gdd/gdd.md · 概念:design/gdd/game-concept.md · 支柱:design/gdd/game-pillars.md · 系统索引:design/gdd/systems-index.md
Technology Stack
- Engine: Godot 4.7.2
- Language: GDScript
- Build System: SCons (engine), Godot Export Templates
- Asset Pipeline: Godot Import System + custom resource pipeline
Engine Version Reference
@docs/engine-reference/godot/VERSION.md
Project Layout
design/gdd/— 独立版入口gdd.md(6 节讲清游戏:概念/循环/系统清单/规模/美术/不做清单——人类读者与 30 秒 pitch 的入口层,只导航不另立事实)+ 概念、支柱、系统索引、逐系统 GDD(lean 模板:.claude/docs/templates/game-design-document.md;2026-09-13 前的旧版全文备份在design/gdd/legacy-2026-09-13/)design/registry/entities.yaml— 跨系统事实登记表(已锁数值;仅 owner GDD 可修订,冲突须显式提出)design/gdd/reviews/— design-review 日志(含 delta 复核清单)production/— stage、session-state、gate-checksprototypes/—dungeon-sweeper-vertical-slice/垂直切片(概念 demo 已删除,验证报告留档docs/prototype-report-minesweeper-battle-concept.md)
Conventions(评审确立,勿违反)
- 数值单一事实源:全部玩法数值存
data/tables/(.tres),经ConfigDBautoload 类型化单点读取;玩法代码禁止数值字面量与自建load()表路径(D2 Rule 1/2) - RNG 单点:禁止
randomize()/自建 RandomNumberGenerator——随机只经RngService封闭命名流(D2 Rule 5) - Core 层零 UI 依赖:完整战斗必须可
godot --headless --script运行(D2 Rule 7) - fail-fast:数据校验错误一律致命中止,无软回退(D2 Rule 6)
- spec-AC 一致性:规约与验收标准不得在同一输入上给出不同答案——D2 两轮评审确立的阻塞标准,所有 GDD 同尺度
- GDD 评审纪律:
/design-review必须在独立会话跑(与/design-system隔离) - 用语纪律(2026-09-09 评审确立,勿违反):GDD、评审输出、日志与一切沟通中禁止自造黑话——比喻性生造词、只有作者自己懂的缩略语(反例:"非雾腿""双闸")。只能使用(a)人人可懂的直白语言,或(b)游戏行业通用专业术语(如 flood fill、战争迷雾、连锁展开、结算、增益/减伤)。需要指代新概念时,用直白描述性短语(正例:"剔除雾格后的可推理率""两项达标判据");确需给新概念命名时,首次出现处必须附一句白话定义并登记
design/registry术语条目——不得让读者猜测比喻含义。(2026-09-14 增补)自造词的唯一例外 = 玩家在游戏里也会看到的专属名词(道具名、界面用语,如"显影尘""探巢摆钟")——文档内部的机制概念不得造词,一律直白描述。 - 文档形态纪律(2026-09-13 评审确立,勿违反):GDD 及一切设计文档遵循 lean 格式——模板
.claude/docs/templates/game-design-document.md,门禁tools/gdd_lint.py(新文档与每次修订后必须 PASS)。六条硬规则:① 散文段 ≤240 字,全文表格占比 ≥60%;② 枚举、数值边界、边界情况、依赖一律表格;流程一律字符画(代码块)或出口分发表,禁止散文描述步骤;③ 体验锚点用关键词(支柱 | 关键词 | 机制承诺 表),禁长篇情绪描述;④ 公式结论先行——先一行加粗结论,再"推导"小标题放公式代码块、Variables 表与验算表,公式本体必须保留(推理证明不可省);⑤ 修订历史只写文末「版本历史」表——正文禁止删除线、"(作废)"、"(日期+评审/修订/拍板)"式注记;义务台账、拍板记录、registry 回执等审计元数据入design/registry或附录,不入正文。评审发现写 review log,正文只收干净的现行规则;⑥ 规则两段式:人话先行、举证在后(可读性承重条款):核心规则/玩法/系统按两段写——人话阶段:作用于哪个系统、在什么情况下、谁触发、触发后发生什么;效果与情况用枚举表列出;举证阶段:逐效果给出计算方法/公式(就地给出或指向公式节);纯流程规则明写"无计算"。读者测试:没读过本文档的人能否回答"管的是谁?什么时候?会发生什么?"——答不出就重写。规则名禁止纯名词短语(反例:"获取路由""编排被动性");编号引用(AC-x / F-x / EC-x / 义务×)不进人话,只进举证与依据。(2026-09-14 用户拍板增补):R2 表格占比阈值已由 60% 放宽至 30%(防铺开职责由 R1/R9 承担)——既有 13 份 GDD 按旧口径继续成立,不回改。 - 两件套纪律(2026-09-14 用户拍板,新系统 GDD 即日生效):新系统设计文档写一对——
design/gdd/[system].md只装结论(设计目的/系统范围[负责·不负责]/核心循环/领域章节×2–6/依赖与输出/P0 最小闭环/P1·P2 后置表/调参表/验收标准/版本历史),设计推演(候选取舍、机理、为什么)装design/gdd/analysis/[system].md(每个问题四段:广度分析→深度分析→综合判断;不入 lint 门禁,钩子豁免)。判据:正文出现超过一行的"为什么"即违规——挪 analysis。优先级诚实条款:后置 ≠ 删除,复活后置行 = 修订 GDD,禁止静默加回。数值默认后置:正文定规则/域/单位,平衡值进数据表(provisional 必须标注)。既有 13 份 GDD 维持 lean v1 形态不回改;模板 v2 与 analysis 骨架见.claude/docs/templates/game-design-document.md。 ⑦ 树形文档体系与一页纸节点(导航承重条款):全部设计文档构成一棵树——根索引systems-index承载整棵树的形状与每个节点的一句话概要,读者靠索引决定进入哪个节点,索引必须随文档增删同步维护。树内每个节点(GDD 内的每一节、每条规则、每张公式)内容控制在一页纸内(直接内容 ≤80 行,tools/gdd_lint.pyR9 强制):装不下就拆成子节点,禁止铺开;节点内顺序 = 人话 → 表格枚举 → 字符流程图 → 举证公式。session-state 条目纪律:production/session-state/active.md每条进度 ≤3 行(粗体键 + 短句),详情一律外链到对应 GDD/报告/日志,禁止把定稿摘要、义务清单、回写清单整段塞进条目。
代码规范(写代码前必读,2026-09-11 用户拍板成文)
在编写、修改任何代码之前,必须先通读 docs/code-conventions.md——该文档由用户指出的真实陋习与缺陷逐条成文,含结构/契约/测试/语言/数值/流程六类硬性纪律与本项目反面案例对照表。摘要(全文以文档为准):
- 结构:禁止上帝对象;功能以类封装;views →(信号)→ 组合根 →(写调用)→ core 依赖单向;核心写调用只在组合根发生
- 命名:领域命名,禁止系统 ID 前缀(a1_/b1_/c1_)进入文件名与类名;核心文件头注必须带「实现 GDD」溯源行;禁止事实约定——未成文的约定当场补条文
- 契约:信号/事件契约成文,状态机每条迁移路径都必须发事件(缺事件 = 软锁);跨层标识符语义单一(位置 ≠ 句柄);模态覆盖层打开必须隐藏遮挡物
- 测试:每个可交互 UI 区域必须配套场景级探针(只有 core AC 不算有测试);缺陷修复必须沉淀回归断言;提交前 smoke + 全部场景探针全绿
- 数值:期望值必须标明尺度(每格/每板/每战/每关);调参先测量后复测;单尺度校准必须跨尺度推演;用户拍板外的细节零发挥,列"待拍板"等裁决