refactor(代码术语): 卡① flag→seal 全族换代+game/ 禁用词清扫(迭代 31 卡①)
标识符面:flag_*→seal_ 族(含 Godot 信号 flag_judged→seal_judged 与连接/回调同名、 FACTS 两键 flags_count→seals_count/dug_under_flag→dug_under_seal 全链、 .tres 键名与 schema .gd 同批同步);显式豁免零改动=size_flags_*(Godot 布局属性)+_fatal_flag。 中文面:金币→GP(金币袋→GP 袋)/插旗→封印/雷格→危险格/惩罚格→危险格/旗→封印·封印印记族, game/ 内 *.gd/.tres/.md/.json 四类禁用词与 flag 双双零命中(V1/V4)。 守卫字面量不动(被检查的禁字不是使用):smoke_all V21 零「雷/旗」检查面、 ui_font_asset_test 字形集攻/雷/旗/封 保持原断言逻辑。 代拍板:板面单字槽 glyph「旗」→「封」(禁字纪律+单字位宽,消费面四处同名随动)。 素材换代(2026-10-18 用户裁案甲):assets/art/board/flag_seal.png→seal_mark.png(素材不入 git, 盘上改名+导入重刷),代码两处 res:// 字符串+COL_FLAG/CURSOR_FLAG 常量同步, 闸件四处随批(run_all_gates.sh/render_gate.sh/golden_baseline_refresh.sh/path_check.py)。 anchor.json 键名手改,重锚与改前改后 diff 随本卡收口(同裁案甲)。 基线读数(改前,主区 ed2dfaf6):冒烟 1151 检查 0 失败/单元 34 套全绿/探针 --click 存量红仅 screen_flow_probe(user:// 断点污染在册已知项)。 改后同批读数(本 worktree):冒烟 1151 检查 0 失败/探针 --click 同一存量红、其余全绿。
This commit is contained in:
1 parent
ed2dfaf66f
commit
32fdf957fd
79 files changed
+899
-899
No files matched your search
@@ -50,7 +50,7 @@ func _test_generate_shape_and_mines() -> void:
|
||||
for c in b.mines:
|
||||
if not b.in_bounds(c as Vector2i):
|
||||
all_in_bounds = false
|
||||
Kit.check("全部雷格在界内", all_in_bounds)
|
||||
Kit.check("全部危险格在界内", all_in_bounds)
|
||||
Kit.check("生成期指标集已落盘(metrics 非空)", not b.metrics.is_empty())
|
||||
|
||||
|
||||
|
||||
@@ -15,10 +15,10 @@ func _init() -> void:
|
||||
Kit.check_quiet(EffectEngineScript.EVENTS.has("dig_stop") and EffectEngineScript.EVENTS.has("battle_won"),
|
||||
"新事件在册:dig_stop/battle_won〔专长批 V1〕")
|
||||
Kit.check_quiet(EffectEngineScript.FACTS.has("hp_ratio") and EffectEngineScript.FACTS.has("is_edge_cell")
|
||||
and EffectEngineScript.FACTS.has("new_resource_type") and EffectEngineScript.FACTS.has("dug_under_flag")
|
||||
and EffectEngineScript.FACTS.has("new_resource_type") and EffectEngineScript.FACTS.has("dug_under_seal")
|
||||
and EffectEngineScript.FACTS.has("ap_exhausted_last") and EffectEngineScript.FACTS.has("ap_left")
|
||||
and EffectEngineScript.FACTS.has("is_blank_zero") and EffectEngineScript.FACTS.has("amount"),
|
||||
"新事实在册:hp_ratio/is_edge_cell/new_resource_type/dug_under_flag/ap_exhausted_last/ap_left/is_blank_zero/amount〔专长批 V1〕")
|
||||
"新事实在册:hp_ratio/is_edge_cell/new_resource_type/dug_under_seal/ap_exhausted_last/ap_left/is_blank_zero/amount〔专长批 V1〕")
|
||||
Kit.check_quiet(EffectEngineScript.EFFECT_KINDS.has("heal") and EffectEngineScript.EFFECT_KINDS.has("ac_bonus")
|
||||
and EffectEngineScript.EFFECT_KINDS.has("damage_reduce") and EffectEngineScript.EFFECT_KINDS.has("bonus_delta")
|
||||
and EffectEngineScript.EFFECT_KINDS.has("blast_scaled") and EffectEngineScript.EFFECT_KINDS.has("preview_area")
|
||||
|
||||
@@ -74,7 +74,7 @@ func _init() -> void:
|
||||
a._curio_pending = {"candidates": [{"kind": "gp", "tier": "common"}]}
|
||||
var gp_taken_before := int(a._curio_taken.get("gp", 0))
|
||||
Kit.check_quiet(a.pick_curio("gp", "common") and int(a._curio_taken.get("gp", 0)) == gp_taken_before + 1,
|
||||
"留任小金币袋:GP 通道兑付受理(gp 计数入账——路由零变化)〔专长批 V10〕")
|
||||
"留任小GP 袋:GP 通道兑付受理(gp 计数入账——路由零变化)〔专长批 V10〕")
|
||||
var hp_before := int(a.ledger.get("hero_hp", 0))
|
||||
a._curio_pending = {"candidates": [{"kind": "heal", "tier": "excellent"}]}
|
||||
Kit.check_quiet(a.pick_curio("heal", "excellent") and int(a.ledger.get("hero_hp", 0)) == mini(hp_before + int(db.adventure.curio_value("heal", "excellent")), a.effective_max_hp()),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# tests/unit/core/minesweeper_rules_test.gd — 排雷规则直接单测(迭代 29 T5 补洞:该模块此前零指名)
|
||||
# 断言面 = 装板后的盘面不变量与意图受理:装板零揭示、安全格余量=安全格总数、挖安全格后揭示
|
||||
# 且余量递减、插旗落旗态、禁挖面拒绝、清图判定随揭示推进。期望值一律由盘上数出来。
|
||||
# 且余量递减、封印落封印态、禁挖面拒绝、清图判定随揭示推进。期望值一律由盘上数出来。
|
||||
# 运行:godot --headless --path game --script res://tests/unit/core/minesweeper_rules_test.gd
|
||||
extends SceneTree
|
||||
|
||||
@@ -38,7 +38,7 @@ func _init() -> void:
|
||||
_ae._phase = 1 # Phase.ACTIVE——意图受理的合法相位
|
||||
_test_dig_face_rules()
|
||||
_test_reveal_advances()
|
||||
_test_flag_place()
|
||||
_test_seal_place()
|
||||
_test_reject_out_of_catalog()
|
||||
quit(Kit.finish("minesweeper_rules_test"))
|
||||
|
||||
@@ -93,16 +93,16 @@ func _test_reveal_advances() -> void:
|
||||
_rules.safe_remaining() < before)
|
||||
|
||||
|
||||
func _test_flag_place() -> void:
|
||||
func _test_seal_place() -> void:
|
||||
var c := _unrevealed_safe()
|
||||
if c == Vector2i(-1, -1):
|
||||
Kit.check("存在未揭示安全格(插旗前置)", false)
|
||||
Kit.check("存在未揭示安全格(封印前置)", false)
|
||||
return
|
||||
_ae.grant_ap(20) # 旗动作走行动经济扣点——夹具先给足 AP
|
||||
_rules.flag_range_free = true # 插旗免邻接(信标网络装配态)——否则未揭示格多半够不着英雄
|
||||
_rules.settle_batch([{"action": "flag_place", "cell": c}])
|
||||
Kit.check("插旗后该格在旗态", _rules.has_flag(c))
|
||||
Kit.check("旗数计数 = 1", _rules.flag_count() == 1)
|
||||
_ae.grant_ap(20) # 封印动作走行动经济扣点——夹具先给足 AP
|
||||
_rules.seal_range_free = true # 封印免邻接(信标网络装配态)——否则未揭示格多半够不着英雄
|
||||
_rules.settle_batch([{"action": "seal_place", "cell": c}])
|
||||
Kit.check("封印后该格在封印态", _rules.has_seal(c))
|
||||
Kit.check("封印数计数 = 1", _rules.seal_count() == 1)
|
||||
|
||||
|
||||
func _test_reject_out_of_catalog() -> void:
|
||||
|
||||
@@ -223,7 +223,7 @@ func _init() -> void:
|
||||
Kit.check_quiet(int(lv10.shop_refresh_free_left()) == int(db.adventure.shop_refresh_free) + 2,
|
||||
"刷新执照正常:免费刷新 +2/店(读数即本店可用——进店重置生命周期同 knob)")
|
||||
|
||||
# ⑪ 天眼(3×3 真视+安全格直开/危险格不开/旗格跳过)
|
||||
# ⑪ 天眼(3×3 真视+安全格直开/危险格不开/封印格跳过)
|
||||
var rng11 = load("res://core/rng_service.gd").new(); rng11.set_master_seed(301)
|
||||
var ob11 = orch_s.new(db, rng11)
|
||||
Kit.check_quiet(ob11.begin_battle({"level_index": 1, "node_depth": 0, "hero_hp": int(db.hero.max_hp), "attunement": ["sky_eye"]}),
|
||||
@@ -252,22 +252,22 @@ func _init() -> void:
|
||||
Kit.check_quiet(overlay_ok, "天眼正常:窗口全格入真视叠加层(危险格显示=C5 有差别开格)")
|
||||
Kit.check_quiet(not ob11.minesweeper.clear_map_cleared() or true, "天眼开格走普通挖格链(连锁/资源兑付=fx_reveal 通道——免 AP 即效果本身)")
|
||||
|
||||
# ⑫ 信标网络(插旗不限相邻/旗价照付)
|
||||
# ⑫ 信标网络(封印不限相邻/封印价照付)
|
||||
var rng12 = load("res://core/rng_service.gd").new(); rng12.set_master_seed(311)
|
||||
var ob12 = orch_s.new(db, rng12)
|
||||
Kit.check_quiet(ob12.begin_battle({"level_index": 1, "node_depth": 0, "hero_hp": int(db.hero.max_hp), "attunement": ["beacon_network"]}),
|
||||
"信标网络:装配起战(flag_range_free 注入)")
|
||||
"信标网络:装配起战(seal_range_free 注入)")
|
||||
var far12: Vector2i = _cell_at(ob12, ob12.minesweeper.hero_pos() + Vector2i(4, 4))
|
||||
if far12 != Vector2i(-9, -9):
|
||||
Kit.check_quiet(ob12.minesweeper._board_face_dig(far12) == "not_adjacent",
|
||||
"信标网络边界:只放宽旗可达(挖掘判据不动——挖距零放宽)")
|
||||
Kit.check_quiet(ob12.minesweeper.flag_range_free == true,
|
||||
"信标网络正常:旗可达豁免在册(插旗仍按标准动作价计费=try_spend 照走)")
|
||||
"信标网络边界:只放宽封印可达(挖掘判据不动——挖距零放宽)")
|
||||
Kit.check_quiet(ob12.minesweeper.seal_range_free == true,
|
||||
"信标网络正常:封印可达豁免在册(封印仍按标准动作价计费=try_spend 照走)")
|
||||
var rng12b = load("res://core/rng_service.gd").new(); rng12b.set_master_seed(312)
|
||||
var ob12b = orch_s.new(db, rng12b)
|
||||
ob12b.begin_battle({"level_index": 1, "node_depth": 0, "hero_hp": int(db.hero.max_hp)})
|
||||
Kit.check_quiet(ob12b.minesweeper.flag_range_free == false,
|
||||
"信标网络反例:未装配旗可达豁免=缺省 false(零装配零扰动)")
|
||||
Kit.check_quiet(ob12b.minesweeper.seal_range_free == false,
|
||||
"信标网络反例:未装配封印可达豁免=缺省 false(零装配零扰动)")
|
||||
|
||||
# ⑬ 真视使用计数链(受理成功恰计一次——RunLedger 单类持账;迭代 27 T3 换代)
|
||||
var rng13 = load("res://core/rng_service.gd").new(); rng13.set_master_seed(321)
|
||||
|
||||
@@ -52,7 +52,7 @@ func _init() -> void:
|
||||
# ① 授予归因+受理序+Used 不可逆
|
||||
var inv = _new_inv()
|
||||
var r1: Dictionary = inv.add_item("sapper_order", "safe_cell", Vector2i(3, 4), 2)
|
||||
var r2: Dictionary = inv.add_item("nest_pendulum", "flag_hit", Vector2i(5, 6), 3)
|
||||
var r2: Dictionary = inv.add_item("nest_pendulum", "seal_hit", Vector2i(5, 6), 3)
|
||||
Kit.check_quiet(int(r1.handle) == 1 and int(r2.handle) == 2, "句柄受理序单调(1→2——零随机)")
|
||||
Kit.check_quiet(String(r1.source_class) == "safe_cell" and r1.origin_cell == Vector2i(3, 4) and int(r1.round_index) == 2,
|
||||
"授予来源可归因(source/cell/round)")
|
||||
|
||||
@@ -31,10 +31,10 @@ func _init() -> void:
|
||||
{"on": "mine_hit",
|
||||
"when": [{"fact": "counter", "id": "tree_sense_sharp_used", "op": "lt", "value": 2}],
|
||||
"do": {"kind": "counter_add", "counter_id": "tree_sense_sharp_used", "value": 1, "domain": "adventure"}}],
|
||||
"sense_guard": [{"on": "flag_missed",
|
||||
"sense_guard": [{"on": "seal_missed",
|
||||
"when": [{"fact": "counter", "id": "tree_sense_guard_used", "op": "lt", "value": 2}],
|
||||
"do": {"kind": "grant_ap", "mode": "queue", "value": 1}},
|
||||
{"on": "flag_missed",
|
||||
{"on": "seal_missed",
|
||||
"when": [{"fact": "counter", "id": "tree_sense_guard_used", "op": "lt", "value": 2}],
|
||||
"do": {"kind": "counter_add", "counter_id": "tree_sense_guard_used", "value": 1, "domain": "adventure"}}],
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ func _test_reject_text_by_reason() -> void:
|
||||
var cases := {
|
||||
"not_adjacent": "不能执行:目标与小人不相邻",
|
||||
"target_revealed": "不能执行:目标已开",
|
||||
"flag_present": "不能插旗:此格已有旗(旗为一次性承诺——相邻时左键直接挖开)",
|
||||
"seal_present": "不能封印:此格已有封印印记(封印为一次性承诺——相邻时左键直接挖开)",
|
||||
}
|
||||
var bad: Array[String] = []
|
||||
for sub in cases:
|
||||
|
||||
@@ -28,7 +28,7 @@ func _run() -> void:
|
||||
# ① 选择态:三卡呈现、确认钮隐藏(两段式——点选前不给确认)
|
||||
ov.open_pick("第 1 层通过!", [
|
||||
{"id": "attack", "text": "攻击力提升\n攻击 +1"},
|
||||
{"id": "gp", "text": "金币袋\n金币 +20"},
|
||||
{"id": "gp", "text": "GP 袋\nGP +20"},
|
||||
{"id": "ap", "text": "行动点提升\n每战首轮 AP +1"},
|
||||
])
|
||||
# M7 bcard 换装适配(2026-10-05 奇物批 T2 连带):三选一卡自 M7 起为 BCard(PanelContainer) 非 Button——
|
||||
@@ -46,7 +46,7 @@ func _run() -> void:
|
||||
ov.set_refresh_display(0, 20, false)
|
||||
if not _req("GP 付费档:余量 0 价 20 余额不足=钮现形但禁用、角标 0、价签行可见",
|
||||
ov._refresh_btn.visible and ov._refresh_btn.disabled and ov._refresh_badge.text == "0"
|
||||
and ov._refresh_l.visible and ov._refresh_l.text == "刷新 20 金币"):
|
||||
and ov._refresh_l.visible and ov._refresh_l.text == "刷新 20 GP"):
|
||||
return
|
||||
ov.set_refresh_display(2, 20, false)
|
||||
if not _req("免费位余量 2:钮点亮、角标 2、免费行——真实按钮路径外发 refresh_requested",
|
||||
|
||||
Reference in new issue
Block a user