从零实现《三角洲行动》手游自动跑刀脚本:ADB 直控 + OpenCV 视觉识别 + 固定点位搜刮)三角洲自动跑刀教程
从零实现《三角洲行动》手游自动跑刀脚本ADB 直控 OpenCV 视觉识别 固定点位搜刮从零实现《三角洲行动》手游自动跑刀脚本ADB 直控 OpenCV 视觉识别 固定点位搜刮一、前言二、整体架构与技术栈三、ADB 控制层截图、点击、滑动四、核心难点一怎么判断真进游戏了五、核心难点二识别这把刷在哪个出生点5.1 用圆检测把小地图圆形抠出来5.2 模板匹配识别出生点六、核心难点三自动拾取物资七、把它串起来固定路线八、一个诚实的工程结论九、总结源码链接从零实现《三角洲行动》手游自动跑刀脚本ADB 直控 OpenCV 视觉识别 固定点位搜刮声明本文仅用于分享 Android 自动化与计算机视觉的工程实践所有内容面向技术学习。竞技游戏的用户协议通常禁止第三方自动化工具请勿用于线上对局。Demo 与思路仅供研究后果自负。作者小金龙代码可获取先看看效果三角洲https://www.bilibili.com/video/BV1AP7X6AEfh/?spm_id_from333.1387.homepage.video_card.click视频效果一、前言很多人见过 B 站、CSDN 上的自动跑刀脚本——进图后自动跑到几个固定点位搜刮物资。这类脚本到底怎么实现本文以《三角洲行动》手游为例完整复盘一套**「电脑 ADB 直控真机 OpenCV 视觉识别 固定路线」**的实现方案重点讲清楚四个工程难点怎么控制手机截图 / 点击 / 滑动怎么判断真进游戏了霍夫圆检测小地图怎么识别这把刷在哪个出生点小地图模板匹配怎么自动拾取物资物资标签检测以及一个绕不开的结论为什么固定点位方案可行而自主智能跑图不可行。二、整体架构与技术栈PC (Python) ├─ ADB 控制层 —— 截图 / input tap / input swipe ├─ 视觉识别层(OpenCV) │ ├─ 霍夫圆检测 —— 检测小地图 → 判定是否进图 │ ├─ 模板匹配 —— 小地图比对 → 识别出生点 │ └─ 区域裁剪/遮罩 —— 物资标签、按钮定位 └─ 决策/路线层 —— 每个出生点一条固定动作序列 ↓ ADB Android 真机 / 模拟器技术栈模块技术设备控制ADBplatform-toolsinput tap/swipe、exec-out screencap图像处理OpenCV-PythonHoughCircles、matchTemplate、掩膜数值计算NumPy语言Python 3.10关键前提MIUI / HyperOS 等系统默认禁用 ADB 模拟点击INJECT_EVENTS权限需在开发者选项中开启**「USB 调试安全设置」**需插 SIM 卡 登录账号。开启后adb shell input tap/swipe才可用这是整套方案的基础。三、ADB 控制层截图、点击、滑动一切的基础是「能截屏、能操作」。用subprocess包一层 ADBimportsubprocess,timeimportnumpyasnpimportcv2 ADBrD:\platform-tools\adb.exeSERIAL你的设备序列号# adb devices 查看defadb(*args,binaryFalse,timeout20):cmd[ADB,-s,SERIAL]list(args)rsubprocess.run(cmd,capture_outputTrue,timeouttimeout)returnr.stdoutifbinaryelser.stdout.decode(utf-8,ignore)defscreenshot():exec-out screencap 直接拿二进制 PNGOpenCV 解码无需落盘。rawadb(exec-out,screencap,-p,binaryTrue)returncv2.imdecode(np.frombuffer(raw,np.uint8),cv2.IMREAD_COLOR)deftap(x,y,wait1.2):adb(shell,input,tap,str(x),str(y))time.sleep(wait)defswipe(x1,y1,x2,y2,dur_ms300):adb(shell,input,swipe,str(x1),str(y1),str(x2),str(y2),str(dur_ms))对局内的走位和转视角本质也是 swipe走位 在左手虚拟摇杆上按住拖动一段时间swipe的 duration 就是按住时长。注意摇杆死区大必须大幅度推满才会走defmove_forward(seconds):# 摇杆中心(430,760)向上推满 → 前进swipe(430,780,430,350,int(seconds*1000))deflook_right_90():# 右侧视角区横向滑动约 480px ≈ 转 90°swipe(1700,500,2180,500,350)横屏分辨率 2400×1080 下这些坐标都是实测标定出来的。四、核心难点一怎么判断真进游戏了这是最坑的一步。游戏从「点击出发」到「真正进图」要经历匹配 → 选干员 → 着陆确认 → 加载约30s→ 进图。早期我用固定等 30 秒或识别匹配界面文字都不稳——匹配时间不固定加载界面文字时有时无经常还没进游戏就开始乱跑刀。突破口对局内左上角有个圆形小地图而菜单/加载界面没有。于是用霍夫圆检测HoughCircles检测到小地图圆 真进游戏。defdetect_minimap_circle(screenNone):检测左上角小地图圆返回 (cx,cy,r) 或 None。ifscreenisNone:screenscreenshot()roiscreen[0:460,0:500]# 只在左上角找提速gcv2.medianBlur(cv2.cvtColor(roi,cv2.COLOR_BGR2GRAY),5)cscv2.HoughCircles(g,cv2.HOUGH_GRADIENT,dp1,minDist300,param1100,param240,minRadius140,maxRadius215)ifcsisNone:returnNoneccs[0][0]return(int(c[0]),int(c[1]),int(c[2]))defis_in_game(screenNone):returndetect_minimap_circle(screen)isnotNone实测圆心稳定在(~277, 210)、半径~145几乎每把一致。is_in_game()就是可靠的进图判定彻底解决了时序错位问题。五、核心难点二识别这把刷在哪个出生点关键前提很多人以为出生点随机其实不少撤离类地图的出生点就那固定的几个。这意味着——只要识别出本把刷在哪个出生点就能跑预先调好的对应路线。这正是固定点位脚本成立的根基。识别靠小地图它是北朝上 玩家居中的所以同一个出生点周围地形布局每次都一样非常适合模板匹配。5.1 用圆检测把小地图圆形抠出来直接方形裁剪会带进会变化的世界背景四个角干扰匹配。更好的做法是圆检测定位 → 圆形掩膜把圆外涂黑 → 归一化尺寸defget_minimap(screenNone):抠出圆形小地图(圆外涂黑)归一化 360x360。ifscreenisNone:screenscreenshot()circdetect_minimap_circle(screen)ifcircisNone:returnNonecx,cy,rcirc rmin(r8,cx,cy)cropscreen[cy-r:cyr,cx-r:cxr].copy()masknp.zeros(crop.shape[:2],np.uint8)cv2.circle(mask,(crop.shape[1]//2,crop.shape[0]//2),r,255,-1)cropcv2.bitwise_and(crop,crop,maskmask)# 圆外涂黑returncv2.resize(crop,(360,360))配图圆检测 掩膜后抠出的干净圆形小地图。有些出生点小地图上直接带地名如军营“帐篷区”还能用 OCR 读字辅助判断5.2 模板匹配识别出生点提前在每个出生点出生瞬间采集一张圆形小地图存为模板spawn1.png、spawn2.png…进图后拿当前小地图逐一比对取最高分importosdefdetect_spawn(screenNone,threshold0.6):mmget_minimap(screen)ifmmisNone:returnNonebestNoneforfinos.listdir(templates/spawns):tplcv2.imread(os.path.join(templates/spawns,f))iftplisNoneortpl.shape!mm.shape:continuerescv2.matchTemplate(mm,tpl,cv2.TM_CCOEFF_NORMED)_,maxv,_,_cv2.minMaxLoc(res)ifbestisNoneormaxvbest[1]:best(os.path.splitext(f)[0],float(maxv))returnbestifbestandbest[1]thresholdelseNone采集规范踩坑经验模板必须统一风格才匹配得准——① 都在出生瞬间、未移动时采集玩家居中、初始朝向② 统一用圆检测 掩膜 resize 360×360③ 小地图上的玩家箭头、队友标记、区域线是动态噪声进阶可把中心圆区再挖掉只比静态地形。六、核心难点三自动拾取物资走到物资点后画面右上方会弹出物资标签如9V电池。坑点拾取不是点屏幕固定的交互键而是点这个标签本身。PICKUP_LABEL(1600,280)# 右上角物资标签位置(横屏)defpickup():tap(*PICKUP_LABEL,wait0.6)点中后画面提示已拾取 XX 到保险箱即成功。进阶可用模板匹配/颜色检测先判断标签框是否存在存在再点避免空点。七、把它串起来固定路线每个出生点配一条固定动作序列识别到哪个出生点就跑哪条ROUTES{# 降落点出生 → 前进2秒 → 右转90° → 点标签拾取spawn2:[(forward,2),(look,480,0),(pickup,)],# 其它出生点继续补……}defrun_route(name):forstepinROUTES.get(name,[]):ifstep[0]forward:move_forward(step[1])elifstep[0]look:swipe(1700,500,1700step[1],500,350)elifstep[0]pickup:pickup()主循环defmain_loop():deploy()# 自动点出发/指挥出战进局ifnotwait_in_game(timeout60):# 圆检测等进图returnspawndetect_spawn()# 识别出生点ifspawn:run_route(spawn[0])# 跑对应固定路线extract()# 撤离/自杀back_to_lobby()# 退出结算 → 回大厅八、一个诚实的工程结论做下来最大的体会识别不难导航才难。能做到CV 识别进图、识别出生点、识别物资标签固定出生点 固定路线 自动进局/撤离/循环。做不到靠脚本盲操作像人一样自主跑图、避开墙和障碍、找到好货。3D 场景里盲走 ADB 反复撞墙撞围栏这需要深度感知 路径规划等于游戏 AI 自主导航是另一个数量级的工程而真正的自动打人 目标检测自瞄 顶格外挂必被反作弊封号。所以固定点位方案之所以流行正是因为它用确定性固定出生点固定路线绕开了最难的自主导航——这是工程上的务实取舍。九、总结难点解法控制手机ADBinput tap/swipescreencap进图判定霍夫圆检测小地图is_in_game()出生点识别圆形小地图掩膜 matchTemplate物资拾取点右上角物资标签智能跑图❌ 用固定出生点固定路线务实绕开整套方案把Android 自动化和OpenCV 模板匹配 / 霍夫圆检测结合起来是一个很好的CV 自动化工程练习。再次提醒仅供学习计算机视觉与自动化技术切勿用于线上竞技对局源码链接如果这篇对你有帮助欢迎点赞收藏。技术交流理性使用。

相关新闻

Navicat Premium 17 免费安装教程

Navicat Premium 17 免费安装教程

Navicat Premium 17 是一款强大的数据库管理工具,支持 MySQL、PostgreSQL、SQL Server、Oracle、MongoDB 等多种数据库。本教程将带你从官方下载、安装、配置到合法激活,安全合规,适合开发者、运维、学生等人群。 一、下载 Navicat Premium…

2026/10/11 18:25:45 阅读更多 →
Grok 表格如何导出 word 不用反复试错,AI 导出鸭多端适配,快速完成表格转 Word 操作

Grok 表格如何导出 word 不用反复试错,AI 导出鸭多端适配,快速完成表格转 Word 操作

引言 日常借助Grok生成数据表格已是不少职场人、科研从业者的常规操作,但原生平台缺少一键导出Word的官方功能,表格复制错位、格式错乱、图文排版丢失成为普遍困扰。AI导出鸭依托适配大模型文档解析技术,针对性补齐Grok文档导出短板&#xff…

2026/10/3 16:39:11 阅读更多 →
【计算机毕业设计Django案例】 基于 Django 的智慧院系考勤服务平台计算机学院学生请假审批与考勤管理系统(程序+文档+讲解+定制)

【计算机毕业设计Django案例】 基于 Django 的智慧院系考勤服务平台计算机学院学生请假审批与考勤管理系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/10/9 1:43:56 阅读更多 →

最新新闻

PSO有约束优化:粒子群算法处理工程限制条件寻优实战

PSO有约束优化:粒子群算法处理工程限制条件寻优实战

简介:解决带约束非线性优化问题的Matlab源码包,面向掌握一定优化算法基础的研究人员与工程师,采用Kennedy和Eberhart提出的粒子群算法,并借助Deb可行性规则处理等式/不等式约束,同时涵盖罚函数、约束投影等辅助策略。压…

2026/10/13 23:19:21 阅读更多 →
轻量级折叠展开插件 ponytail:从高度动画到FAQ交互的实战方案

轻量级折叠展开插件 ponytail:从高度动画到FAQ交互的实战方案

最近在做官网 FAQ 模块改版时,需要把一大段问题描述默认收起来,用户点击后再平滑展开。这个需求本身不复杂,但手写展开收起会遇到高度计算、动画中断、重复点击崩溃这些零碎问题。后来在 GitHub 上翻到一个轻量插件,名字叫 ponyta…

2026/10/13 23:19:21 阅读更多 →
APM备降点机制全解析:从Rally Point原理到失控返航源码调用链

APM备降点机制全解析:从Rally Point原理到失控返航源码调用链

做飞控二次开发这几年,我经常被问到一个问题:失控之后,飞机到底往哪飞?很多人以为是直接回起飞点,打开源码才发现默认行为里还有一条“中间缓冲”,也就是APM里的备降点(Rally Point)…

2026/10/13 23:19:21 阅读更多 →
C语言结构体核心解析:内存对齐、位段与实战避坑指南

C语言结构体核心解析:内存对齐、位段与实战避坑指南

先聊聊我自己的经历。几年前我给人讲C语言,讲到数组的时候,对方觉得"一堆同类型的数据集合"很好理解,可一到结构体就卡住了:为什么要定义新类型?为什么花括号后面要加分号?为什么a.b和a->b有时…

2026/10/13 23:19:21 阅读更多 →
2026年网络安全高薪赛道:AI安全与云原生安全等5大方向解析

2026年网络安全高薪赛道:AI安全与云原生安全等5大方向解析

我在2025年帮几个团队做安全能力评估的时候发现一个很有意思的现象:同一家公司里,做传统安全运维的工程师年薪可能还卡在二十万出头,而隔壁做AI安全评估、云原生安全设计的同事,薪资已经翻了一倍多。这不是个例,而是整…

2026/10/13 23:19:21 阅读更多 →
程序员如何培养“设计师的眼睛”:从经典包豪斯栅格到日常 UI 找茬训练法

程序员如何培养“设计师的眼睛”:从经典包豪斯栅格到日常 UI 找茬训练法

在前端产研团队中,我们经常能听到这样的争论: 资深 UI 设计师走查页面时,皱着眉头说:“这个图标和旁边的文字不对劲,往上偏了 2 像素;这块卡片的投影太脏了;两个区块之间的呼吸感完全断了。”坐…

2026/10/13 23:18:21 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →