个人娱乐的项目|用PYTHON+ADB实现手游自动刷图

2020魔幻开年,在家等学校通知的时候,随手写了这个程序,代码比较乱,后面学校安排出来后也没时间进一步完善了,暑假和学长交流中叫我们最好把做过的项目都记录一下,才开始试试写文章,写不好多多包涵。
大概效果

安装ADB并且连接到模拟器
https://www.cnblogs.com/yangshifu/p/9790125.html

控制ADB
Python可以用

import os
os.system('输入到CMD里的内容'

或者

import subprocess
subprocess.call('输入到CMD里的内容',shell=True

来操作CMD进而达到操作ADB的目的,其中os.system()会像演示图中弹出CMD窗口,后来采用subprocess.call()可以不用弹出窗口,让程序在后台安静运行。

常用的ADB命令

subprocess.call('adb -s 127.0.0.1:62001 shell screencap -p /sdcard/screen.png',shell=True)#Android截图保存到/sdcard/screen.png
subprocess.call(r'adb -s 127.0.0.1:62001 pull /sdcard/screen.png C:\Users\Administrator\Desktop',shell=True)#把截图文件发送到电脑
subprocess.call('adb -s 127.0.0.1:62001 shell input tap 1350 750',shell=True)#点击屏幕坐标为X=1350 Y=750的点
subprocess.call('adb -s 127.0.0.1:62001 shell input swipe 1400 340 900 400 2000 ',shell=True)#滑动屏幕,其中前两个是起始坐标,中间两个是终点坐标,最后是移动所需时间

绝大多数手游没有太多随机性,有了最后两个点击和滑动的操作基本,再加上一个time.sleep()函数控制等待时间,就可以写出自动挂机脚本了,复杂一点的还要对屏幕进行分析。

分析屏幕

import subprocess
from PIL import Image
subprocess.call('adb -s 127.0.0.1:62001 shell screencap -p /sdcard/screen.png',shell=True)#Android截图保存到/sdcard/screen.png
subprocess.call(r'adb -s 127.0.0.1:62001 pull /sdcard/screen.png C:\Users\Administrator\Desktop',shell=True)#把截图文件发送到电脑
img = Image.open(r"C:\Users\Administrator\Desktop\screen.png") #读取保存到电脑中的截图
  for i in range(1400,300,-40):#扫描X=1400到X=300区域,-40控制扫描间隔和扫描方向
    for j in range(100,800):#扫描Y=100到Y=300区域
      data = (img.getpixel((i,j)))#记录扫描数据
      if (data[0]>=250 and data[1]<=50 and data[2]<=90):#分析扫描点颜色的RGB参数
        subprocess.call('adb -s 127.0.0.1:62001 shell input tap '+str(i)+' '+str(j),shell=True)#点击符合条件的点
        break

最开始是用模板匹配法分析图像,后面发现效率太低就改为了使用特定位置的色块来定位,扫描X轴的时候使用40的间隔采样也是为了提高效率,采用负号是因为咸鱼号练度不够要从右边向左开始战斗捡右上角的补给。

一个获取目标地点RGB图的方法
不太想安装多余的软件,就可以用电脑自带的画图软件打开截图用颜色吸管选取要的颜色,然后就可以看到参数了,截取的时候左下角还能看坐标。
工具在这里插入图片描述
如果想要使用模板匹配法的话可以使用cv2模块。
https://blog.csdn.net/RNG_uzi_/article/details/90034485

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值