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
@@ -176,7 +176,8 @@ static func outcome_text(outcome: Dictionary) -> String:
|
||||
"not_adjacent": "不能执行:目标与小人不相邻",
|
||||
"target_revealed": "不能执行:目标已开",
|
||||
"target_concealed": "不能移动:目标未开",
|
||||
"seal_present": "不能封印:此格已有封印印记(封印为一次性承诺——相邻时左键直接挖开)",
|
||||
"target_sealed": "不能挖:此格已封印(封印受理即揭示——不可再挖开)",
|
||||
"seal_present": "不能封印:此格已有封印印记(封印受理即揭示——印记随图存续)",
|
||||
"no_path": "不能移动:已探明区不连通",
|
||||
"out_of_catalog": "无效目标",
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ func _apply_hover_visuals(c: Vector2i) -> void:
|
||||
_show_path_preview(c)
|
||||
elif adjacent:
|
||||
u.face.hl_visible = true
|
||||
u.face.hl_color = COL_HL_TARGET # 挖掘目标格边框(相邻封印格同此——左键直接挖)
|
||||
u.face.hl_color = COL_HL_TARGET # 挖掘目标格边框(已封印格不入 _diggable——落下方封印禁入分支)
|
||||
_set_cursor_shape(c, CURSOR_DIG)
|
||||
elif seal:
|
||||
u.face.hl_visible = true
|
||||
|
||||
@@ -300,8 +300,8 @@ func refresh() -> void:
|
||||
var hero: Vector2i = _minesweeper.hero_pos()
|
||||
_diggable.clear()
|
||||
for n in _board.neighbors8(hero):
|
||||
if not _minesweeper.is_revealed(n) and not _minesweeper.is_removed(n):
|
||||
_diggable[n] = true
|
||||
if not _minesweeper.is_revealed(n) and not _minesweeper.is_removed(n) and not _minesweeper.has_seal(n):
|
||||
_diggable[n] = true # 已封印格不入可挖域(封印受理即揭示——挖封印格被拒)
|
||||
_recompute_glow(hero)
|
||||
for y in _board.height:
|
||||
for x in _board.width:
|
||||
@@ -474,14 +474,15 @@ func _on_cell_input(c: Vector2i, ev: InputEvent) -> void:
|
||||
if ev.button_index == MOUSE_BUTTON_LEFT:
|
||||
if _minesweeper.is_revealed(c):
|
||||
action_requested.emit(c, "move")
|
||||
elif _minesweeper.has_seal(c):
|
||||
pass # 已封印格零动作(封印受理即揭示——挖封印格被拒,左右键同零意图)
|
||||
else:
|
||||
action_requested.emit(c, "dig")
|
||||
_hover_comp.detect_chord(c)
|
||||
elif ev.button_index == MOUSE_BUTTON_RIGHT:
|
||||
if not _minesweeper.has_seal(c):
|
||||
action_requested.emit(c, "seal_place")
|
||||
# 封印 = 一次性承诺:右键对封印格零动作(无撤封印);
|
||||
# 左键相邻封印格直接挖(规则引擎放行)。
|
||||
# 封印 = 受理即揭示的最终承诺:右键对封印格零动作(无撤封印),左键同零动作。
|
||||
|
||||
|
||||
# ---- 奖励徽章(已开格身份 icon——封印之下、纹带之上、不进数字区) ----
|
||||
@@ -536,20 +537,22 @@ func _paint_cell(c: Vector2i, hero: Vector2i) -> void:
|
||||
var seal: bool = _minesweeper.has_seal(c)
|
||||
var removed: bool = _minesweeper.is_removed(c) # 中立移除格(退色降档)
|
||||
var is_hero: bool = c == hero
|
||||
# 封印印记下发(卡④ 法阵化):封印格=未开且未移除 → CellUnit 封印子件绘制(着色器参数化);
|
||||
# 其余格撤子件。层序与迷雾门控在 CellUnit 侧承载(seal_mark_layer/fog_state 联动)。
|
||||
u.seal_on = seal and not revealed
|
||||
# 封印印记下发(卡④ 法阵化+封印受理即揭示改版):封印格(未移除)→ CellUnit 封印子件绘制
|
||||
# (着色器参数化)——印记可见性不依赖揭示态(已揭示格承载=新组合态);其余格撤子件。
|
||||
# 层序与迷雾门控在 CellUnit 侧承载(seal_mark_layer/fog_state 联动)。
|
||||
u.seal_on = seal
|
||||
if removed:
|
||||
revealed = false # 移除格固定未开呈现基座(退色暗幕层承载;危险格本无数字,周边数字冻结)
|
||||
seal = false
|
||||
u.seal_on = false
|
||||
# 绘制层五段(字形与色牌→基底瓦片→立面投影→秘宝/变异叠加→迷雾)——段间交换经单元状态面
|
||||
#(u.base/u.face 域件与 u.glyph/u.glyph_color),唯一例外=基底色 bg 经 ink 段返回值交 base 段(无单元场域承载)
|
||||
var shown: bool = revealed or seal # 呈现揭示态(封印受理即揭示——地板瓦片/身份字形/迷雾开启)
|
||||
var bg: Color = _paint_cell_ink(c, u, revealed, seal)
|
||||
_paint_cell_base(c, u, revealed, is_hero, bg)
|
||||
_paint_cell_facade(c, u, revealed)
|
||||
_paint_cell_base(c, u, shown, is_hero, bg)
|
||||
_paint_cell_facade(c, u, shown)
|
||||
_paint_cell_overlays(c, u, revealed)
|
||||
_paint_cell_fog(c, u, revealed, hero)
|
||||
_paint_cell_fog(c, u, shown, hero)
|
||||
u.face.removed_dim = removed
|
||||
u.queue_redraw()
|
||||
|
||||
@@ -575,11 +578,19 @@ func _paint_cell_ink(c: Vector2i, u: Node2D, revealed: bool, seal: bool) -> Colo
|
||||
else:
|
||||
glyph = str(d)
|
||||
digit_col = _digit_ink(d) # 数字墨三档色温(§4.1)
|
||||
elif seal:
|
||||
# 封印受理即揭示:身份字形按板事实当场可见(cell_identity 单点——不用等轮末判定;
|
||||
# 数字遮蔽不适用——遮蔽打脸受理即揭示)。
|
||||
bg = COL_FLOOR
|
||||
var ident: Dictionary = _board.cell_identity(c)
|
||||
if String(ident.get("kind", "")) == "mine":
|
||||
glyph = "危"
|
||||
digit_col = UiKit.RED_MINE
|
||||
elif int(ident.get("digit", 0)) > 0:
|
||||
glyph = str(int(ident.get("digit", 0)))
|
||||
digit_col = _digit_ink(int(ident.get("digit", 0)))
|
||||
else:
|
||||
if seal:
|
||||
bg = COL_BRICK # 封印印记由 CellUnit 封印子件绘制(卡④ 法阵化——缺图字形回退随贴图路径退役)
|
||||
else:
|
||||
bg = COL_BRICK
|
||||
bg = COL_BRICK
|
||||
u.glyph = glyph
|
||||
u.glyph_color = digit_col
|
||||
# 色牌后备(数字直画退牌;「危」/「?」维持牌载保读性)+ v3.4:双峰纹理板
|
||||
@@ -588,7 +599,7 @@ func _paint_cell_ink(c: Vector2i, u: Node2D, revealed: bool, seal: bool) -> Colo
|
||||
if plate_digit:
|
||||
digit_col = COL_DIGIT # 牌上深墨族(素牌 12:1——双峰纹理免疫)
|
||||
u.glyph_color = digit_col
|
||||
u.plate = revealed and (glyph == "危" or glyph == "?" or plate_digit)
|
||||
u.plate = (revealed or seal) and (glyph == "危" or glyph == "?" or plate_digit)
|
||||
return bg
|
||||
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ func _build_board_children(board_area: Control, vb: VBoxContainer) -> void:
|
||||
hint.size_flags_horizontal = Control.SIZE_SHRINK_CENTER
|
||||
hint.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
vb.add_child(hint)
|
||||
var hl := UiKit.label("左键 挖掘 / 移动 · 右键 封印(不可逆) · 同格双击 快开",UiKit.FS_CAPTION, false, UiKit.WARM_FAINT)
|
||||
var hl := UiKit.label("左键 挖掘 / 移动 · 右键 封印(受理即揭示·不可逆)",UiKit.FS_CAPTION, false, UiKit.WARM_FAINT)
|
||||
hint.add_child(hl)
|
||||
# 信号转发(组合根只接线一处)
|
||||
board_view.action_requested.connect(_forward_action)
|
||||
|
||||
@@ -8,7 +8,7 @@ signal closed
|
||||
const ENTRIES := [
|
||||
["#C9AF83", "完整覆尘地砖", "未开格——左键挖开(1AP,须相邻)· 右键封印(1AP)"],
|
||||
["#B39A78", "碎裂裸土", "已开 0 格——可通行,左键移动(免费)"],
|
||||
["#000000", "封印", "封印印记(呈现名·不能拔)——轮末自动判定标中;标空可左键直接挖开(安全格零奖励、危险格受挖掘惩罚)"],
|
||||
["#000000", "封印", "封印印记(受理即揭示——落定当场可见格下身份,随图存续不能拔)——轮末自动判定标中/标空;已封印格零动作(不可再挖开)"],
|
||||
["#2e86de", "小人", "探险者——8 向相邻未开格常驻微光 = 可挖域"],
|
||||
["#F0A828", "金徽章", "已开格奖励身份 icon(封印之下、数值之上,不进数字区)"],
|
||||
["#F0A828", "九徽章解码", "攻=攻击 · 守=护甲 · 爆=爆裂 · 医=回复 · 弱=削弱 · 穿=穿刺 · 魔=魔法 · 行=行动点 · 金=GP"],
|
||||
|
||||
Reference in new issue
Block a user