iter56-卡2:封印动作改版(迭代56卡2·受理即揭示): 规则核心(target_sealed挖封印格拒/清图口径=挖开∪封印/能清图的封最优先/notify_cleared清图收轮/sealed_identity撤出→BoardData.cell_identity——上限20用户裁)+结算面dug_under_seal删净+破封一击退役+呈现层(地板+身份字形+印记不依赖揭示态+文案四件)+探针V8-V10+sim域(标空封印剔除约束增强+错触直挖补偿注入0.10)+golden三图换代; MC同批重锚50/档=100局(2026-11-08用户批准)三方对照无结构性恶化; 高档审计通过(17行全量·审计后勘误2项闭环)
This commit is contained in:
1 parent
908e518306
commit
5ec4a311bb
34 files changed
+589
-164
No files matched your search
@@ -142,7 +142,7 @@ func _ready() -> void:
|
||||
# 全拒则免邻接旗标+任意未开格重试,AP 不足先 grant_ap 兜底;拒绝全数=取证段红)----
|
||||
var seal_cell := Vector2i(-9, -9)
|
||||
for c in settlement.minesweeper.current_board().safe_cells():
|
||||
if settlement.minesweeper.has_seal(c) and not settlement.minesweeper.is_revealed(c):
|
||||
if settlement.minesweeper.has_seal(c): # 取证选择器换代〔封印改 V8〕——印记可见性不依赖揭示态(受理即揭示)
|
||||
seal_cell = c
|
||||
break
|
||||
if seal_cell.x < 0:
|
||||
|
||||
@@ -20,7 +20,6 @@ var _stall_frames := 0
|
||||
var _closed_via_abandon := false # T17——预算耗尽经放弃路径收口(断点段返回断言豁免位)
|
||||
var _done := false
|
||||
var _rand := RandomNumberGenerator.new()
|
||||
var _seals_placed: Array = []
|
||||
var _ap_spent_this_round := 0
|
||||
var _problems: Array = [] # 新增覆盖的问题收集(退出码合并判定)
|
||||
var _tested_legend := false
|
||||
@@ -37,6 +36,7 @@ var _tested_map_status := false # 地图屏角标一次性 case(选路态
|
||||
var _inter_confirms := 0 # 大奖励屏确认计数(冒险推进停点——首见确认推进 L2,再见 = L2 关卡完成收口)
|
||||
var _settlement_confirms := 0 # 卡⑥ 胜利结算框确认计数(观测面——每场普通战斗胜利恰一)
|
||||
var _route_clicks := 0 # 选路覆盖层点击计数(岔路使用率观测面)
|
||||
var _seals_placed: Array = [] # 随机封印簿记(行为①仍在役;行为②撤封印已退役——dump 读数面保留)
|
||||
var _locktest_state := 0 # T1 D1 锁期/重放断言状态机(0=待注入 1=等重放 2=完结)——每 run 一次
|
||||
var _locktest_cell := Vector2i(-9, -9)
|
||||
var _locktest_frames := 0
|
||||
@@ -827,7 +827,6 @@ func _ready() -> void:
|
||||
_done = true
|
||||
print("[click_probe] 第二关大奖励屏(L2 关卡完成)——探针收口 · 选路口点击 %d 次" % _route_clicks)
|
||||
break
|
||||
_seals_placed.clear()
|
||||
continue
|
||||
if main.ui.modals.run.end_overlay.is_open() and main.run_scope.settlement_stop_timer.is_armed():
|
||||
# 战斗胜利总结结算框(真实信号路径——每场普通胜利到达):断言已拍板面后点「下一节点」
|
||||
@@ -1216,8 +1215,9 @@ func _run_modal_probes_once() -> void:
|
||||
for e in main.ui.modals.run.legend_overlay.ENTRIES:
|
||||
if String(e[1]) == "封印":
|
||||
legend_has_seal = true
|
||||
# 图例封印行换代断言(迭代36 卡A wa5——真实 AP 条图例钮开层路径)
|
||||
if not String(e[2]).contains("标空") or not String(e[2]).contains("受挖掘惩罚") or String(e[2]).contains("插错") or String(e[2]).contains("挖雷"):
|
||||
# 图例封印行换代断言〔封印改 V10〕(迭代36 卡A wa5 载体——真实 AP 条图例钮开层路径):
|
||||
# 新口径=受理即揭示/已封印格零动作;旧「受挖掘惩罚」句随改判路径退役,雷字清零照守
|
||||
if not String(e[2]).contains("受理即揭示") or not String(e[2]).contains("零动作") or String(e[2]).contains("插错") or String(e[2]).contains("挖雷") or String(e[2]).contains("雷格"):
|
||||
_problems.append("图例封印行旧词残留(wa5——%s)" % String(e[2]).replace("
|
||||
", "|"))
|
||||
if not legend_has_seal:
|
||||
@@ -1391,12 +1391,8 @@ func _play_one_action() -> void:
|
||||
_seals_placed.append(target)
|
||||
_ap_spent_this_round += 1
|
||||
return
|
||||
# 行为②:随机撤封印(右键已封印格),约 10% 轮次
|
||||
if _rand.randf() < 0.1 and not _seals_placed.is_empty():
|
||||
var fc: Vector2i = _seals_placed.pop_back()
|
||||
if minesweeper.has_seal(fc) and not minesweeper.is_revealed(fc):
|
||||
main.ui.battle.board_zone.board_view.click_cell(fc, MOUSE_BUTTON_RIGHT)
|
||||
_ap_spent_this_round += 1
|
||||
# 行为②撤封印退役〔封印改 V9 波及面——test-conventions §5.5 同生死〕:右键已封印格零动作
|
||||
# (封印受理即揭示——撤封印路径不存在),随机撤封印行为段整体摘除;_seals_placed 簿记随段退役。
|
||||
return
|
||||
# 行为③:随机无效点击(非相邻格/已开格),约 8% 轮次
|
||||
if _rand.randf() < 0.08:
|
||||
@@ -1500,7 +1496,7 @@ func _locktest_tick() -> void:
|
||||
b.width, b.height, str(settlement.minesweeper.hero_pos())])
|
||||
_problems.append("重放断言:锁期缓存点击未受理恰一次(封印未置位——零发或双发)")
|
||||
_locktest_state = 2
|
||||
main.ui.battle.board_zone.board_view.click_cell(_locktest_cell, MOUSE_BUTTON_RIGHT) # 撤封印恢复现场(尽力而为不判定)
|
||||
# 撤封印恢复现场调用随行为②退役〔封印改 V9〕——右键已封印格零动作(改判路径不存在)
|
||||
|
||||
|
||||
func _locktest_pick_cell(minesweeper) -> Vector2i:
|
||||
|
||||
@@ -271,7 +271,7 @@ func _ready() -> void:
|
||||
if bv.mouse_default_cursor_shape != Input.CURSOR_ARROW:
|
||||
_problems.append("case③ 移动光标缺失(%d)" % bv.mouse_default_cursor_shape)
|
||||
# ---- case④ 右键封印:seal_place 到达组合根 + 核心封印态落位 ----
|
||||
# 判据出处: design/gdd/systems/排雷循环/排雷玩法.md:231 封印受理与印记随挖消失(case④/④b)
|
||||
# 判据出处: design/gdd/systems/排雷循环/排雷玩法.md:52 封印受理即揭示、受理零兑付零事件(case④/④b——受理即揭示改版换代)
|
||||
_push_click(_pos(bv, seal_t), MOUSE_BUTTON_RIGHT)
|
||||
await get_tree().process_frame
|
||||
if not _has_action(seal_t, "seal_place"):
|
||||
@@ -284,6 +284,32 @@ func _ready() -> void:
|
||||
var seal_unit = bv.cells_probe().get(seal_t)
|
||||
if seal_unit == null or not seal_unit.seal_on:
|
||||
_problems.append("case④b 封印印记未下发(seal_on=%s)" % ["无单元" if seal_unit == null else str(seal_unit.seal_on)])
|
||||
# ---- case④c(V9 新增)已封印格零动作:真输入左/右键 → action_requested 零发射、光标态=禁止 ----
|
||||
# 判据出处: design/ux/battle.md Interaction Map 已封印格行——已封印格无动作(左右键同零意图)
|
||||
var acts_before_v9: int = _actions.size()
|
||||
_push_motion(_pos(bv, seal_t))
|
||||
await get_tree().process_frame
|
||||
if bv.mouse_default_cursor_shape != Input.CURSOR_FORBIDDEN:
|
||||
_problems.append("case④c 悬停已封印格光标非禁止(%d)〔封印改 V9〕" % bv.mouse_default_cursor_shape)
|
||||
if bv.cells_probe()[seal_t].face.hl_color != bv.COL_SEAL:
|
||||
_problems.append("case④c 已封印格悬停未落封印禁入框(color=%s)〔封印改 V9〕" % str(bv.cells_probe()[seal_t].face.hl_color))
|
||||
_push_click(_pos(bv, seal_t), MOUSE_BUTTON_LEFT)
|
||||
await get_tree().process_frame
|
||||
_push_click(_pos(bv, seal_t), MOUSE_BUTTON_RIGHT)
|
||||
await get_tree().process_frame
|
||||
if _actions.size() != acts_before_v9:
|
||||
_problems.append("case④c 已封印格左右键仍发射意图(新增 %d——应零发射)〔封印改 V9〕" % (_actions.size() - acts_before_v9))
|
||||
if not ms.is_revealed(seal_t):
|
||||
pass # 封印格保持未开(零副作用同源佐证)
|
||||
else:
|
||||
_problems.append("case④c 已封印格被挖开(零副作用失守)〔封印改 V9〕")
|
||||
# 悬停说明在册:图例封印行承载悬停语义说明(受理即揭示口径——ENTRIES 在册断言)
|
||||
var legend_seal_line := ""
|
||||
for e in main.ui.modals.run.legend_overlay.ENTRIES:
|
||||
if String(e[1]) == "封印":
|
||||
legend_seal_line = String(e[2])
|
||||
if not legend_seal_line.contains("受理即揭示"):
|
||||
_problems.append("case④c 悬停说明在册缺新口径(图例封印行=%s)〔封印改 V9〕" % legend_seal_line)
|
||||
# ---- case⑤ 双击 chord:禁入格双左击(核心拒挖零副作用)→ chord_attempted ----
|
||||
# 判据出处: design/gdd/systems/排雷循环/排雷玩法.md:236 拒绝三源可辨、任何拒绝零副作用(case⑤ chord)
|
||||
_push_click(_pos(bv, forbid_t), MOUSE_BUTTON_LEFT)
|
||||
|
||||
Reference in new issue
Block a user