Python3实现微信跳一跳自动点击跳跃教程
本文详细介绍使用Python3实现微信跳一跳自动点击跳跃的思路与代码。通过ADB工具获取手机截图,利用matplotlib显示图像并绑定鼠标点击事件获取起点和终点坐标。基于两点坐标计算距离,调用ADB指令模拟按压时间完成跳跃。文章提供了完整的技术模块说明及代码获取方式,适合对Python自动化控制感兴趣的开发者参考学习。
参考网络上多位技术大神的代码与思路,本文整理并梳理了通过点击跳跃方式玩微信跳一跳小游戏的具体实现逻辑。
一、整体思路
核心逻辑在于确定棋子当前的坐标位置以及下一步目标落脚点的坐标,通过计算这两个坐标点之间的直线距离,进而控制跳跃动作。
二、分步思路
1、利用ADB命令截取手机屏幕图像,并将初始截图保存至手机存储,随后传输至本地电脑文件夹中。
2、将获取到的截图数据加载到新建的matplotlib坐标轴中进行可视化展示。
3、通过绑定鼠标点击事件,分别获取初始落点坐标和目标落点坐标,并据此计算出两点间的直线距离。
4、执行跳跃操作,在跳跃动作完成后,清空当前坐标记录并更新截图以进行下一轮计算。
三、所用到的相关技术或模块
1、Python3基础语法与编程能力。
2、NumPy数值计算库。
3、Matplotlib绘图与交互库。
4、Python标准库中的os模块,用于执行系统命令。
5、ADB(Android Debug Bridge)工具包,用于与手机进行通信和控制。
四、代码实现
__author__ = '周雁冰'
import os
import PIL,numpy
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import time
need_update = True
# 获取手机截图
def get_screen_image():
os.system('adb shell screencap -p /sdcard/screen.png') # 获取手机当前界面截图
os.system('adb pull /sdcard/screen.png') # 下载当前截图到电脑当前文件夹下
return numpy.array(PIL.Image.open('screen.png')) #转为array返回
# 计算弦的长度
def jump_to_next(point1, point2):
x1, y1 = point1; x2, y2 = point2
distance = ((x2-x1)**2 + (y2-y1)**2)**0.5 # 计算弦长度
os.system('adb shell input swipe 320 410 320 410 {}'.format(int(distance*1))) # 按下横纵左边 放开横纵坐标 按压时间 2K的屏幕弹跳系数为1
# 绑定鼠标单击事件
def on_calck(event, coor=[]): # [(x,y),(x2,y2)]
global need_update
coor.append((event.xdata, event.ydata)) # 获取x和y坐标位置放入coor数组中
if len(coor) == 2:
jump_to_next(coor.pop(), coor.pop()) # 获取到两个坐标后计算长度并清空数组
need_update = True
def update_screen(frame): # 更新图片
global need_update
if need_update:
time.sleep(1) # 因为跳跃需要时间所以这里需要休眠1s,然后重新获取图片
axes_image.set_array(get_screen_image())
need_update = False
return axes_image, # 返回元祖
figure = plt.figure() # 创建一个空白的的图片对象/创建画布
axes_image = plt.imshow(get_screen_image(), animated=True) # 把获取的图片放进坐标轴
figure.canvas.mpl_connect('button_press_event', on_calck)
ani = FuncAnimation(figure, update_screen, interval=50, blit=True) # 实例化 FuncAnimation更新画布图片 50为50ms
plt.show() # 展示坐标图
请点击这里获取:跳一跳源代码
更多内容大家可以参考专题《微信跳一跳》进行学习。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













