{ "schema_version": 1, "diagram_type": "architecture", "meta": { "title": "游戏代码实现架构(Godot 场景·脚本·运行时树)", "output": "code-architecture.html", "quality_profile": "showcase", "locale": "zh-CN", "viewBox": [ 1320, 760 ] }, "components": [ { "id": "config_db", "type": "database", "label": "ConfigDB 配置库", "sublabel": "core/config_db.gd", "pos": [ 1140, 168 ], "size": [ 140, 44 ] }, { "id": "rng_service", "type": "backend", "label": "RngService 随机流", "sublabel": "core/rng_service.gd", "pos": [ 1140, 222 ], "size": [ 140, 44 ] }, { "id": "main", "type": "frontend", "label": "组合根 Main", "sublabel": "main.gd · 运行时建树", "tag": "main.tscn", "pos": [ 480, 60 ], "size": [ 200, 72 ] }, { "id": "level_map", "type": "frontend", "label": "关卡地图屏", "sublabel": "三停点选路", "pos": [ 1060, 60 ], "size": [ 180, 70 ], "tag": "level_map_screen.gd" }, { "id": "stage", "type": "frontend", "label": "战斗展示区", "sublabel": "站桩·回合·战斗日志", "pos": [ 40, 260 ], "size": [ 170, 88 ], "tag": "battle_stage_view.gd" }, { "id": "hero", "type": "frontend", "label": "角色信息区", "sublabel": "攻防·秘宝槽·特性", "pos": [ 250, 260 ], "size": [ 170, 88 ], "tag": "hero_info_panel_view.gd" }, { "id": "board", "type": "frontend", "label": "棋盘区", "sublabel": "棋盘·AP条·气泡·特效", "pos": [ 510, 260 ], "size": [ 170, 88 ], "tag": "board_zone_view.gd" }, { "id": "shop_camp", "type": "frontend", "label": "商店·营地浮层", "sublabel": "商品卡·三柜台", "pos": [ 730, 260 ], "size": [ 170, 88 ], "tag": "ui_assembler.gd 拼装" }, { "id": "settle", "type": "frontend", "label": "结算特效", "sublabel": "跨区飞行演出", "pos": [ 918, 260 ], "size": [ 170, 88 ], "tag": "settlement_fx_view.gd" }, { "id": "pause", "type": "frontend", "label": "暂停浮层", "sublabel": "只读入口", "pos": [ 120, 420 ], "size": [ 152, 56 ], "tag": "pause_overlay.gd" }, { "id": "settings", "type": "frontend", "label": "设置浮层", "sublabel": "音量·全屏·减动效", "pos": [ 288, 420 ], "size": [ 152, 56 ], "tag": "settings_overlay.gd" }, { "id": "career", "type": "frontend", "label": "生涯浮层", "sublabel": "六类九项汇总", "pos": [ 464, 420 ], "size": [ 152, 56 ], "tag": "career_overlay.gd" }, { "id": "curio", "type": "frontend", "label": "三选一浮层", "sublabel": "通关停点·三卡点选", "pos": [ 632, 420 ], "size": [ 152, 56 ], "tag": "curio_pick_overlay.gd" }, { "id": "confirm", "type": "frontend", "label": "确认对话框", "sublabel": "通用确认弹窗", "pos": [ 800, 420 ], "size": [ 152, 56 ], "tag": "confirm_dialog.gd" }, { "id": "debug", "type": "frontend", "label": "调试浮窗", "sublabel": "DS_DEBUG 门控", "pos": [ 968, 420 ], "size": [ 152, 56 ], "tag": "debug_overlay.gd" }, { "id": "save", "type": "database", "label": "存档管理", "pos": [ 96, 554 ], "size": [ 130, 48 ], "sublabel": "save_manager.gd" }, { "id": "meta", "type": "database", "label": "元进度", "pos": [ 244, 554 ], "size": [ 130, 48 ], "sublabel": "meta_progression.gd" }, { "id": "orch", "type": "backend", "label": "战斗编排器", "pos": [ 383, 554 ], "size": [ 130, 48 ], "sublabel": "battle_orchestrator.gd" }, { "id": "rules", "type": "backend", "label": "扫雷规则", "pos": [ 540, 554 ], "size": [ 130, 48 ], "sublabel": "minesweeper_rules.gd" }, { "id": "boardgen", "type": "backend", "label": "棋盘生成", "pos": [ 688, 554 ], "size": [ 130, 48 ], "sublabel": "board_generator.gd" }, { "id": "boarddata", "type": "database", "label": "棋盘数据", "pos": [ 836, 554 ], "size": [ 130, 48 ], "sublabel": "board_data.gd" }, { "id": "effects", "type": "backend", "label": "效果引擎", "pos": [ 984, 554 ], "size": [ 130, 48 ], "sublabel": "effect_engine.gd" }, { "id": "adventure", "type": "backend", "label": "冒险运行器", "pos": [ 1132, 554 ], "size": [ 130, 48 ], "sublabel": "adventure_runner.gd" }, { "id": "levelrun", "type": "backend", "label": "关卡运行器", "pos": [ 96, 616 ], "size": [ 130, 48 ], "sublabel": "level_runner.gd" }, { "id": "dmgctl", "type": "backend", "label": "伤害控制", "pos": [ 244, 616 ], "size": [ 130, 48 ], "sublabel": "damage_controller.gd" }, { "id": "dgmath", "type": "backend", "label": "伤害公式", "pos": [ 392, 616 ], "size": [ 130, 48 ], "sublabel": "damage_math.gd" }, { "id": "reward", "type": "backend", "label": "奖励经济", "pos": [ 540, 616 ], "size": [ 130, 48 ], "sublabel": "reward_economy.gd" }, { "id": "lottery", "type": "backend", "label": "技能抽奖", "pos": [ 688, 616 ], "size": [ 130, 48 ], "sublabel": "skill_lottery.gd" }, { "id": "attune", "type": "backend", "label": "同调", "pos": [ 836, 616 ], "size": [ 130, 48 ], "sublabel": "attunement.gd" }, { "id": "action", "type": "backend", "label": "行动经济", "pos": [ 984, 616 ], "size": [ 130, 48 ], "sublabel": "action_economy.gd" }, { "id": "feats", "type": "backend", "label": "特长引擎", "pos": [ 1132, 616 ], "size": [ 130, 48 ], "sublabel": "feats_engine.gd" }, { "id": "status", "type": "backend", "label": "状态容器", "pos": [ 96, 678 ], "size": [ 130, 48 ], "sublabel": "status_container.gd" }, { "id": "units", "type": "backend", "label": "单位容器", "pos": [ 244, 678 ], "size": [ 130, 48 ], "sublabel": "unit_container.gd" }, { "id": "treasure", "type": "database", "label": "秘宝数据", "pos": [ 392, 678 ], "size": [ 130, 48 ], "sublabel": "treasure_items.gd" }, { "id": "resolver", "type": "backend", "label": "配置解析", "pos": [ 540, 678 ], "size": [ 130, 48 ], "sublabel": "config_db_resolver.gd" }, { "id": "xvalid", "type": "backend", "label": "配置交叉校验", "pos": [ 688, 678 ], "size": [ 170, 48 ], "sublabel": "config_db_cross_validator.gd" } ], "boundaries": [ { "kind": "region", "label": "战斗主界面(UiAssembler 拼装)", "wraps": [ "stage", "hero", "board", "shop_camp", "settle" ] }, { "kind": "region", "label": "浮层与对话框(组合根挂载)", "wraps": [ "pause", "settings", "career", "curio", "confirm", "debug" ] }, { "kind": "region", "label": "逻辑层 core/(21 件·名称清单)", "wraps": [ "save", "meta", "orch", "rules", "boardgen", "boarddata", "effects", "adventure", "levelrun", "dmgctl", "dgmath", "reward", "lottery", "attune", "action", "feats", "status", "units", "treasure", "resolver", "xvalid" ] } ], "connections": [ { "id": "main-stage", "from": "main", "to": "stage", "fromSide": "bottom", "toSide": "top" }, { "id": "main-hero", "from": "main", "to": "hero", "fromSide": "bottom", "toSide": "top" }, { "id": "board-main", "from": "board", "to": "main", "label": "翻开·插旗·和弦", "fromSide": "top", "toSide": "bottom" }, { "id": "hero-board", "from": "hero", "to": "board", "label": "秘宝两步交互", "fromSide": "right", "toSide": "left" }, { "id": "main-save", "from": "main", "to": "save", "label": "存档读写", "variant": "dashed", "fromSide": "left", "toSide": "top", "via": [ [ 28, 96 ], [ 28, 512 ], [ 161, 512 ] ], "labelSegment": 0 }, { "id": "orch-stage", "from": "orch", "to": "stage", "label": "结算回流", "variant": "emphasis", "fromSide": "top", "toSide": "bottom", "via": [ [ 448, 376 ], [ 125, 376 ] ], "labelSegment": 1 }, { "id": "main-levelmap", "from": "main", "to": "level_map", "label": "挂载", "fromSide": "right", "toSide": "left" } ], "cards": [ { "dot": "cyan", "title": "组合根与建树", "items": [ "main.tscn 全场景仅 1 个节点,整棵界面树由 main.gd 运行时搭建(1392 行)", "战斗界面由 UiAssembler 拼装;商店/营地浮层即拼装于战斗根内", "元进度账本与存档同由组合根持有(main.gd preload)" ] }, { "dot": "emerald", "title": "战斗动作链", "items": [ "棋盘区 翻开/插旗/和弦 → 组合根 → 战斗编排器规则判定", "结算回流:血量攻防→角色信息区 · 受击演出→展示区 · AP 扣减与提示→棋盘区", "秘宝槽点击走两步交互:角色信息区 → 棋盘区/即刻生效" ] }, { "dot": "rose", "title": "逻辑层与边界", "items": [ "core/ 21 件仅列名称,源码出处见各节点 sources 指针", "ConfigDB/RngService 两单例经 project.godot autoload 全局供给", "smoke/ 下 13 个测试探针场景属测试基建,不入架构主干" ] } ] }