python代码分析-python 实现 跳一跳游戏 代码解析

本文详细介绍了如何利用Python和ADB工具实现微信小游戏'跳一跳'的自动跳跃功能。通过截图、鼠标点击确定起点和终点,计算距离和按压时间,然后使用ADB命令模拟屏幕滑动。文章涵盖了环境配置、代码实现和参数调节等步骤,为读者提供了完整的自动化辅助工具使用指南。
摘要由CSDN通过智能技术生成

这个代码实现的是 手动点击起点 和 终点 ,程序自动判断距离、触屏时间 完成跳跃

原理(摘自项目说明页面):

1. 将手机点击到"跳一跳”小程序界面;

2. 用Adb 工具获取当前手机截图,并用adb将截图pull上来:

adb shell screencap -p /sdcard/1.png

adb pull /sdcard/1.png .

3. 用matplot显示截图;

4. 用鼠标点击起始点和目标位置,计算像素距离;

5. 根据像素距离,计算按压时间;

6. 用Adb工具点击屏幕蓄力一跳:

adb shell input swipe x y x y time

环境准备(window7):

1. 下载 、安装 python3

2. pip安装

cmd窗口中 进入python3根目录下的script文件夹,

执行命令

1253475-20180104160336471-505302635.png

则Scripts文件夹下会出现一系列和pip有关的文件,其中有pip.exe将pip.exe的路径也添加到环境变量PATH中

在cmd下输入"pip”,如果能识别"pip"指令,则说明pip安装成功了

3.adb驱动安装

adb驱动下载地址:https://adb.clockworkmod.com/ 下载完后 将adb 命令 添加到系统环境变量里面

打开CMD控制台,输入adb,出现如下界面,即为配置成功。如图:

1253475-20180104160555206-55842219.png

4.下载源码

到这一步,我们要将源码下载到本地电脑里。

5.安装依赖包

跳一跳微信辅助的最终运行需要很多的Python模块,作者已经将这些所需要的模块都写在了源码中的requirements.txt中,

所以我们执行命令 pip install -r requirements.txt,即可将这些必须的模块下载下来,模块包括有matplotlib,numpy等。

如图,我们使用CD命令,切换到源码的下载目录,

再执行命令pip install -r requirements.txt

6.设置手机权限

将安卓手机用USB与电脑相连接,在安卓手机上打开开发者模式,并开启USB调试模式,

每种安卓手机开启的方法都不一样,

以小米 Mix2 手机为例,在设置中找到手机版本号,连续点击5次即可开启开发者模式

然后进入开发者选项打开 usb调试、usb调试(安全设置)、

如果以上操作没有任何错误,那么在CMD控制台,执行命令 adb devices可显示当前手机连接的端口号。

7.运行

在以上步骤都没有任何错误的情况下,打开微信,开启跳一跳小游戏,进入游戏主页面,

然后再打开CMD控制台,使用CD命令切换目录,切换到跳一跳辅助的源码目录下,执行命令wechat_jump_auto.py。

参数调节请打开源码目录下的config文件夹,里面有适配各种屏幕和机型的文件夹,

根据自己的分辨率或机型,点击进入相应文件夹,打开里面的config.json文件,修改参数即可。建议修改前最好备份一份。

importnumpy as npimportmatplotlib.pyplot as pltimportmatplotlib.animation as animationfrom PIL importImageimportmathimporttimeimportosdefpull_screenshot(): 定义 截取手机屏幕 并 发送截图到电脑 函数

os.system('adb shell screencap -p /sdcard/autojump.png') 发送 截屏命令 到手机

os.system('adb pull /sdcard/autojump.png .') 发送 拉取图片到电脑 命令defjump(distance): 定义 跳跃函数 形参为距离

press_time= distance * 1.35 计算按屏幕 时间 press_time=int(press_time)

cmd= 'adb shell input swipe 320 410 320 410' +str(press_time)按屏幕命令print(cmd)

os.system(cmd) 发送 按屏幕命令

fig=plt.figure() 创建一个图像对象(窗口)

index=0

cor=[0, 0]

pull_screenshot() 执行截屏函数

img= np.array(Image.open('autojump.png')) Image.open读取图片 到名为 img 的图片数组

update=True

click_count=0

cor=[]defupdate_data(): 定义更新数据的函数 更新图片return np.array(Image.open('autojump.png'))

im= plt.imshow(img, animated=True) im = 绘制图像(数组名、动画=打开)def updatefig(*args): 定义动画函数globalupdateifupdate:

time.sleep(1.5)

pull_screenshot()

im.set_array(update_data())

update=Falsereturnim,defonClick(event): 定义 鼠标点击 处理函数globalupdateglobalix, iyglobalclick_countglobalcor#next screenshot

ix, iy=event.xdata, event.ydata

coords=[]

coords.append((ix, iy)) [(x1,y1)|(x2,y2)]print('now =', coords)

cor.append(coords) [[(x1,y1)],[(x2,y2)]]

click_count+= 1

if click_count > 1:

click_count=0

cor1=cor.pop() [(x2,y2)]

cor2=cor.pop() [(x1,y1)]

distance= (cor1[0][0] - cor2[0][0])**2 + (cor1[0][1] - cor2[0][1])**2x2 - x1 y2 - y1

distance= distance ** 0.5

print('distance =', distance)

jump(distance)

update=True

fig.canvas.mpl_connect('button_press_event', onClick) 鼠标点击 处理函数 onClick

ani= animation.FuncAnimation(fig, updatefig, interval=50, blit=True)

图像函数 动画函数 更新频率50ms 更新所有点

plt.show() 显示图像

运行结果:

python wechat_jump_py3.py

1253475-20180104135021831-989268406.png

第一行 发送截图

2 第一次鼠标点击 生成坐标

3 第二次鼠标点击 生成坐标

4 计算距离

5 发送点击屏幕命令 swipe后面四个参数是 (滑动起点x y 滑动终点 x y 滑动用时)

第一次点击

1253475-20180104135707581-1258203581.png

第二次点击

1253475-20180104135755471-464095183.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值