MaaNTE俄罗斯方块AI自动连打原理从棋盘识别到评估算法内置AI决策完全拆解【免费下载链接】MaaNTEMaaNTE. Nevertheless to Everless automatic assistant 异环小助手项目地址: https://gitcode.com/gh_mirrors/maa/MaaNTEMaaNTE《异环》小助手内置了自动俄罗斯方块功能通过画面识别锁定游戏棋盘用内置 AI 决策算法为每一块计算最优落点模拟按键自动操作并可自动连打直到活力耗尽。本文带你完全拆解这套从棋盘识别到评估算法的 AI 决策原理。一、整体架构流水线是大脑Python 是双手MaaNTE 基于图像识别自动化框架驱动俄罗斯方块任务分为两层协作流水线层assets/resource/base/pipeline/Tetris/Tetris.json 定义了一个场景状态机——加载界面、准备界面、对局中、结算界面……每个节点先识别当前画面属于哪个场景再执行对应动作点击、按键、等待。决策执行层当场景分发器判断已进入游戏后触发自定义动作auto_tetrisagent/custom/action/auto_tetris.py真正的 AI 打牌逻辑全部在这里。场景识别本身由 assets/resource/base/pipeline/Tetris/TetrisScene.json 定义例如退出按钮节点用 OCR 在固定区域读取退出 / Exit / 終了等多语言文本——这正是 MaaNTE 多语言适配的基础。二、棋盘识别它如何看见10×20 的棋盘 MaaNTE 不读取任何游戏内存只靠截屏工作。核心是 agent/custom/action/Tetris/utils/scene.py 中的SceneGate模板匹配为 I、J、L、O、S、T、Z 七种方块各准备一张活跃方块模板图用 OpenCV 的模板匹配算法在棋盘区域BOARD_REGION坐标裁剪寻找相似度最高者即可识别当前下落的方块类型与位置。读队列右侧还有QUEUE_REGION区域对下一块队列做同样的模板匹配 重叠过滤按 y 坐标排序最多读出未来 6 块——这是后续前瞻决策的数据来源。状态机确认新方块是否真的出生了play.py会对比检测到的方块与当前方块及队列里预期下一块连续多帧一致才认为还是同一块避免误判见 agent/custom/action/Tetris/feats/play.py 的_detect_next_piece。棋盘本身则被维护成一块10 列 × 20 行的布尔网格agent/custom/action/Tetris/utils/board.py 中BOARD_ROWS 20, BOARD_COLS 10。每次 AI 落子后程序在内部网格上同步落块 消行保证下一轮评估永远基于最新局面——这就是 AI 的工作记忆。七种方块的所有旋转形态定义在 agent/custom/action/Tetris/utils/pieces.py例如 T 块有 4 个朝向I 块 2 个朝向。三、评估算法一个棋盘的健康分 拿到一个候选落点后AI 并不是随手一丢而是用evaluate_boardboard.py给落子后的棋盘打分。它是经典的启发式评估函数融合了多个维度维度含义方向消除行数本次落子消掉的行 × 行权值越高越好空洞Holes被上层盖住的空格越深、覆盖块越多越危险惩罚总高度 / 凹凸度堆得越高、相邻列高差越大越差惩罚过渡Transitions行/列上空-实交替次数衡量碎片化程度惩罚井Well窄槽陷阱但开口井反而有奖励可留 I 块位罚/奖中心堆积中间列比两侧高太多会堵死空间惩罚连击Combo3 秒内连续消行连击数 × 25 加分奖励T-Spin 检测detect_t_spin检查 T 块四角被堵情况触发额外 40 分 每行 30 分奖励更有意思的是动态权重棋盘平均高度 8、8~14、 14 时使用三组不同权重——开局鼓励消行、平整后期大幅提高空洞和井的惩罚权重让 AI 在局面恶化时明显变得更保守稳健。占用率超过 45% 还会给空洞、井的惩罚再乘 1.3 倍。四、前瞻决策带着未来 5 块做束搜索 如果只看当前一块AI 最多算个贪心选手。MaaNTE 的play.py里_choose_best_current_piece_move做得更多穷举当前块对每种旋转 × 每一列目标位置先用_is_move_feasible验证旋转路径和横移路径都不撞墙排除现实中打不出来的花活模拟落子simulate_drop在内部网格上让方块自由下落、消行得到新局面束搜索Beam Search看未来把队列里最多 5 块未来方块接在后面递归推演_search_best_queue_move每层只保留分数前 5~8 名的候选分支。搜索深度是自适应的棋盘占用率越高40%、55%往未来多看一层最多探到 5 层深度折损未来的分数按 0.85 的指数逐层打折离得越远权重越低避免为了三步后好看现在摆烂执行成本惩罚旋转一次扣 0.15 分、每横移一格扣 0.06 分——同样的局面操作越省越优先模拟真人手感。最终得分 当前评估分 前瞻加分 − 执行惩罚选最高分者。五、执行动作键盘模拟与标准化落子 ⌨️选中目标位置后_apply_move_no_feedback会精确模拟按键旋转方向取顺时针/逆时针步数较少者J 键逆旋、K 键顺旋按 A / D 键逐格横移到目标列开启速降模式时补一记空格键硬降进一步压缩每块耗时。执行前还有一个_rotate_and_standardize小技巧先把方块移到最左列归零位置再规划位移确保内部记录的列号与游戏实际状态严格对齐。整局对局循环上限 15 分钟检测到结算界面TetrisSceneMatchend场景节点即收工。六、自动连打从开局到活力耗尽 连打由三层保障实现轮次控制auto_tetris动作支持repeat_count与use_all_vitality参数一局结束自动进入下一局活力 OCR 检查tetris_check_vitality_action截屏后用 OCR 读取活力数值区域读到 0 就优雅退出agent/custom/action/auto_tetris.py场景自愈中途跳出结算、加载或异常界面时场景状态机会自动点掉确认框、按 ESC、重新回到对局几乎无需人工干预。七、相关源码速查 模块路径任务入口与轮次控制agent/custom/action/auto_tetris.pyAI 对局主循环与束搜索agent/custom/action/Tetris/feats/play.py棋盘网格 / 启发式评估 / T-Spinagent/custom/action/Tetris/utils/board.py七种方块旋转形态表agent/custom/action/Tetris/utils/pieces.py模板匹配与队列读取agent/custom/action/Tetris/utils/scene.py场景节点OCR 识别assets/resource/base/pipeline/Tetris/TetrisScene.json想要了解 MaaNTE 流水线机制的更多细节可以继续阅读 docs/zh_cn/develop/pipeline-guide.md 与开发者文档索引 docs/zh_cn/develop/README.md。⚠️ 提示MaaNTE 通过识别画面模拟常规操作请以娱乐学习为目的理性使用并留意游戏官方对第三方工具的相关规定自行承担使用风险。【免费下载链接】MaaNTEMaaNTE. Nevertheless to Everless automatic assistant 异环小助手项目地址: https://gitcode.com/gh_mirrors/maa/MaaNTE创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?