mcpField
P
puzzle

puzzle

github.com/gamedev-skills开发5.4k6.7k 次安装1 天前更新
代码仓库

关于 puzzle

面向网格与棋盘解谜游戏的组合式技能指南,帮助开发者建模棋盘状态、处理规则结算和关卡进程。重点说明确定性结算与完整撤销,以减少谜题逻辑错误。

主要功能

  1. 01建立独立于画面的棋盘模型
  2. 02验证并应用玩家操作
  3. 03持续结算匹配、推块等规则
  4. 04处理连锁、目标与计分
  5. 05实现完整撤销和关卡推进

适用场景

  1. 01设计三消或滑块解谜玩法
  2. 02实现推箱子与规则棋盘
  3. 03加入连锁结算和撤销功能
  4. 04制作可解关卡及难度进程

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/gamedev-skills/awesome-gamedev-agent-skills --skill puzzle

安装后在 Claude Code 中输入/puzzle确认已加载。

附带文件references/board-and-resolution.md

详细介绍

谜题

网格/棋盘谜题游戏指南——棋盘模型、移动输入、规则结算 (匹配、推动、逻辑)、计分、撤销和关卡推进。这是一项组合式 技能:它对棋盘状态和规则进行建模,并通过 tilemap/UI 呈现。它不会 重新讲解 tilemap;它定义了结算循环和正确性规则(状态干净、 结算确定、可撤销),以确保谜题公平且没有漏洞。

适用场景

  • 当游戏采用离散棋盘,玩家通过移动改变棋盘,且棋盘会按照规则结算时使用:三消/方块匹配、推箱子/推块、滑块谜题、逻辑网格。
  • 设计匹配/连锁结算、撤销、关卡推进或可解性时使用。

不适用场景: 带永久死亡机制的实时网格动作游戏 → roguelike。卡牌区域/回合 → card-game。基于物理的“解谜平台游戏” → platformer + physics-tuning。对于 tile 渲染,使用 godot-tilemap / unity-tilemap-2d。

核心循环

读取棋盘 → 规划移动 → 执行移动 → 棋盘按照规则结算(匹配、推动、 下落、填充、连锁)→ 查看目标进度 → 重复,直至解谜成功/失败。乐趣在于规划;引擎的职责是确定性地结算每次移动,并 清晰地呈现结果。

必备系统

  1. 棋盘模型 — 由存放棋子的格子组成;它是唯一事实来源(逻辑,而非视觉)。
  2. 移动输入 — 交换、推动、拖动、旋转或放置;应用前验证是否合法。
  3. 规则结算 — 检测并应用该类型游戏的规则(匹配、推动、逻辑),直到状态稳定。
  4. 连锁/连击 — 结算改变棋盘时,重复结算,直到不再有变化。
  5. 目标 + 计分 — 胜负条件(得分、清除全部、抵达目标);步数/时间限制。
  6. 撤销 — 精确还原上一步移动(及其结算);对需要思考的谜题至关重要。
  7. 关卡推进 +(通常还包括)生成 — 手工制作或生成可解的棋盘。
  8. 反馈(“爽感”) — 为匹配、下落和连锁提供清晰、令人满足的动画/音效。

设计参数

参数效果备注
网格大小/形状复杂度方形是标准形式;六边形/不规则形状会改变体验。
匹配/推动规则游戏类型特征三连、形状匹配、推入目标等。
连锁计分奖励深度连锁越长,回报呈指数级增长。
步数/时间限制压迫感步数限制偏解谜;时间限制偏街机。
难度曲线学习过程一次引入一种机制。
撤销深度容错度撤销一步还是保留完整历史。
可解性保证公平性生成的棋盘必须可解。
死锁处理避免死局检测是否无步可走;重新洗牌或结束(参见参考资料)。

模式

1. 棋盘模型 + 匹配检测(逻辑与视觉分离)
# Pseudocode. The board is the truth; rendering reads from it. (0,0) top-left, y grows down.
board = [[piece_or_empty for _ in range(W)] for _ in range(H)]

def find_matches(board):
    matched = set()
    for y in range(H):                       # horizontal runs of >= 3 equal pieces
        run = 1
        for x in range(1, W):
            if board[y][x] and board[y][x] == board[y][x-1]: run += 1
            else:
                if run >= 3: matched |= {(y, k) for k in range(x-run, x)}
                run = 1
        if run >= 3: matched |= {(y, k) for k in range(W-run, W)}
    # ... repeat the same scan vertically (columns) ...
    return matched
2. 结算 → 下落 → 补充 → 连锁(重复直到稳定)
# Pseudocode. One player move can trigger a chain; loop until the board stops changing.
def resolve(board):
    chain = 0
    while True:
        matches = find_matches(board)
        if not matches: break                 # stable: resolution complete
        chain += 1
        score += score_for(matches, chain)    # later chain steps score more (see refs)
        clear(board, matches)                  # remove matched pieces
        apply_gravity(board)                   # pieces fall into the gaps
        refill(board, rng)                      # spawn new pieces at the top (seeded RNG)
    return chain
3. 通过状态快照或命令实现撤销
# Pseudocode. Snapshot before each move; undo restores it exactly (board + score + counters).
def make_move(move):
    history.append(snapshot(board, score, moves_left))   # push BEFORE applying
    apply(move); resolve(board); moves_left -= 1

def undo():
    if history:
        board, score, moves_left = history.pop()         # exact revert, including resolution

大型棋盘优先采用命令模式(存储移动及足以还原移动的信息),而不是完整 快照,以节省内存;小型棋盘使用快照最简单,也完全够用。

常见陷阱 / 失败模式

  • 逻辑与视觉混杂 → 动画会与状态不同步,导致错误。棋盘模型是唯一真实来源;视图只负责渲染。
  • 只解析一次 → 会遗漏连锁反应。循环解析,直到棋盘稳定(模式 2)。
  • 撤销时未恢复所有内容 → 分数、步数和随机状态会出现偏差。对所有状态进行快照,或确保操作可完全逆转。
  • 补充方块时使用未设种子的 RNG → 无法复现关卡,也无法实现确定性的撤销或每日谜题。请为其设定种子。
  • 生成的棋盘无法解出 → 会造成不公平的死局。生成后验证,或从已知解法反向生成(参考资料)。
  • 未检测死锁(match-3)→ 棋盘没有有效步数时会软锁。检测“无步可走”的情况,然后打乱棋盘或结束关卡(参考资料)。
  • 难度陡增 → 一次加入太多机制。每关先讲解一种机制,再将机制组合起来。
  • 动画进行中仍可解析并接受输入 → 可能导致重复移动或状态损坏。棋盘稳定前锁定输入。

组合(使用这些技能构建)

  • 棋盘渲染: 使用 godot-tilemap / unity-tilemap-2d 构建网格;使用 godot-ui-control 构建 HUD、分数和菜单。
  • 关卡: 使用 level-design 设计手工制作的谜题并控制难度节奏;使用 procedural-gen 生成可解棋盘。
  • 持久化: 使用 save-systems 保存关卡进度、高分和带种子的每日谜题。
  • 爽快感: 使用 game-feel 制作匹配 / 连锁消除的弹出效果、屏幕震动和连锁反馈;使用引擎动画 / Tween 技能实现交换、下落和清除效果;使用 audio-design 制作匹配和连锁提示音。
  • 脚本: 使用 godot-gdscript / unity-csharp-scripting 编写解析循环和规则。

参考资料

  • 关于 match-3 检测 / 重力 / 补充 / 连锁反应的细节、死锁检测与重新打乱、sokoban / 基于规则的谜题、撤销策略、可解关卡生成和计分,请阅读 references/board-and-resolution.md。

评论

支持 Markdown