周末没什么事做看到网上做的外挂也想试试,做的没有大神效果好,但是也勉强比一般人玩的好那么一点点,最高纪录2560,一般就只有1500左右。记录下我的学习过程。
首先我介绍一下我用到的东西
一台安装ubuntu的电脑,使用的是python3.6环境,eclipse编写程序
一个Android手机,屏幕分辨率 1080×1920 这个会影响到识别距离以及点击跳跃时间,
从最初的环境搭建开始
>> lsusb
显示电脑usb连接设备
Bus 001 Device 006: ID 12d1:107e Huawei Technologies Co., Ltd.
找到你手机对应的设备如上,
>> sudo vi /etc/udev/rules.d/51-android.rules
新建文件51-android.rules将ID 12d1 107e 数字填入下面的对应位置,保存
SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="107e", MODE="0666"
接下来输入以下的命令
>> udevadm control --reload
重新加载51-android.rules配置文件
>> sudo apt-get install android-tools-adb首先安装adb,如果已经安装就不用再安装了;
>> adb kill-server
关闭adb服务,然后重新启动,确保可以识别到你的手机
>> sudo adb start-server
>> adb devices
显示到该这样的就说明配置好了
ThinkPad-Edge:~$ adb devices
List of devices attached
CKL4C16C03001052 device
试试截屏功能
>> adb shell
HWBLN-H:/:/ $ screencap /sdcard/1.png
HWBLN-H:/:/ $ exit
adb pull /sdcard/1.png ./phonephoto/
没有问题就可以看看我的代码,随便写写大神请轻点喷!!!
play.py文件如下
import os
import time
import image_recongnize as imgre
while(1):
os.system('adb shell screencap /sdcard/1.png') #获取截图
os.system('adb pull /sdcard/1.png ./Myphoto/') #保存截图到电脑
time1 = imgre.image1()*1.35 #获取跳跃距离
os.system('adb shell input swipe 500 1000 500 1000 %d'%(time1)) #点击按钮, time1点击时长
time.sleep(2) #延时2s
image_recongnize.py文件简单的对三通道像素进行分解,然后划分阈值,if语句到底。。。。。简单粗暴,适合玩耍
import numpy as np
from PIL import Image
from skimage import draw
import matplotlib.pyplot as plt
from matplotlib.pyplot import figure
from math import sqrt
def image1():
img=Image.open('./Myphoto/1.png') #打开图片
pix = img.load() #获取像素值
width = img.size[0]
height = img.size[1]
image2 = []
flag = 0
me_X = 0
me_Y = 0
black = [1000,1000]
black1 = [1000,1000]
r1,g1,b1,a = pix[100,650]
for x in range(850):
for y in range(750):
r,g,b,a = pix[x+100, +650+y];
if r==58 and g==54 and b==81 :#获取小人坐标
image2.append(255)
me_X = x;
me_Y = y;
else:
image2.append(0)
for x in range(850): #获取下一次跳跃坐标
for y in range(me_Y ):
r,g,b,a = pix[x+100, +650+y];
if r1-20<r<r1+20 and g1-20<g<g1+20 and b1-20 < b < b1+20:
image2[750*x+y] = 0
else:
image2[750*x+y] = 150
if r==245 and g==245 and b==245: #如果出现小白点就一小白点位置为下次跳跃目标
if black1[1]>y:
black1[0]=x
black1[1]=y
flag=1
else:
if black[1]>y and abs(x-me_X)>150: #以最高非背景像素为参考对象
black[0]=x
black[1]=y
me_X = me_X-35
if (abs(black1[0] - me_X )<100) and flag == 1:
flag = 0
if(flag==1):
black[1] = black1[1];
black[0] = black1[0];
else:
black[1] = black[1]+50;
# image2= np.reshape(image2,[850,750]) #输出处理后图片
# plt.figure("screencapr")
# rr, cc=draw.circle(me_X,me_Y,20)
# draw.set_color(image2,[rr,cc],122)
# rr, cc=draw.circle(black[0],black[1],20)
# draw.set_color(image2,[rr,cc],233)
# plt.imshow(image2.T, cmap ='gray')
# plt.show()
distance = sqrt((me_X-black[0])*(me_X-black[0])+(me_Y-black[1])*(me_Y-black[1]))
print(distance) #输出距离
return distance