根据电脑分辨率自动调整窗体大小_Python自动玩《最强连一连》

f97a5f5cc766ad83477f42f07dbc9203.png

0x00. 前期准备

除了一台能运行的电脑,你还需要以下三样东西:

  1. 安装好Py与依赖的 Pycharm(Python3 + opencv & numpy)
  2. 配置好环境变量的 ADB
  3. 能开机的 Android 手机

189806b6d11fac9fbc5bd8ef2d5bc3c8.png

0x01. 实现思路

使用 ADB 与 OpenCV ,分别完成控制手机与生成解法两个任务,基本步骤如下:

  1. 使用 ADB 命令截屏并传回本地
adb shell screencap -p /sdcard/{ImgName}    
adb pull /sdcard/{ImgName} .
  1. 使用 OpenCV 识别目标定位关键点
res = cv2.matchTemplate(image, template, method, result, mask) # 匹配模式图片
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) # 寻找最匹配位置
  1. 通过定点拾色,读取游戏地图
  2. 使用 DFS,搜索解法
  3. 通过 ADB 点击命令,输入解答
adb shell input tap x y

为了能够达到无人监守自动游戏的效果,我们还需要程序可以 自动进入下一关关闭游戏奖励窗口。所以,我们设计了四种不同的状态:Game StateNext StateClose StateError State,分别对应着进行游戏、进入下一关、关闭弹出窗口、等待过渡动画四种功能。

执行的过程中,使用识别 关键目标物 的方式,来判断当前处于哪种状态并执行对应任务。

2dad66ab82d5dbee0822e37cdb26cbc3.png

最后还有一个问题需要考虑:随着关卡变难,游戏方块大小会逐渐变小。由于,我们扫描地图使用的是定点拾色的办法,方格尺寸变小会大大影响我们的地图扫描准确性,所以我们需要让程序能够智能地匹配游戏方块的大小。

实现方法也很简单,设定 [0.9, 1.1] 为游戏方块的变化区间,当扫描的地图出现问题(游戏无解)或者不存在游戏方块的时候,我们就按照 0.01 为步长循环调整游戏方块的大小,直到能够地图扫描转换功能正常为止。另外,每次游戏启动的时候,也会先自动调整游戏方块大小,如图 ( 图中的 Map Error: %f 就是程序正在调整游戏方块大小,出现白边时为匹配)。

c7ce792274eec8e70cd5517a713d4541.png
自动调整方块尺寸https://www.zhihu.com/video/1082264855477784576

0x02. 使用方法

  1. 配置好 所有环境
  2. 在 Github 上给项目点赞,顺手下载代码,地址:WNJXYK/AutoWechatGames
  3. [重要] 使用 Pycharm 打开项目,打开根目录下 ./Super_Link/AI.py,根据手机的屏幕分辨率修改第二行 SIZE 值。(米8分辨率:2248*1080, SIZE设置为 1.0)
  4. 连接手机,打开手机开发者模式,勾选USB调试,勾选运行ADB模拟点击
  5. 进入游戏页面,运行PY,准备起飞!
5d5bdd296565620b8a22e214d9b547b9.png
测试https://www.zhihu.com/video/1082282569277517824

所有操作仅在本地测试完成(MBP + Mi 8),附上 Bilibili 视频链接。

https://www.bilibili.com/video/av44383086/​www.bilibili.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值