【辅助工具】Python实现微信跳一跳

最近迷上了微信跳一跳小游戏,正好也看到知乎上有大神分享了技术贴,我也参考了好多资料,原理就是通过abd命令截取图片,python计算两个点距离,然后转化按压时间,让电脑来完成游戏。我花了很长时间才把程序跑起来,作为一名技术小白我谈谈自己的认识,尽量让大家少走弯路。

先贴上大神的github地址:https://github.com/wangshub/wechat_jump_game

准备工具

  • abd驱动
  • 安卓手机
  • 打开手机调试模式
  • usb线连接好手机与电脑

 

实现原理

  • 获取手机实时截图
  • 点击起始位置与落地位置
  • 计算两个点距离
  • 计算按压时间
  • 发送按压指令
  • 重新刷新手机截图

 

我用的python版本是 3.6 开发环境是pycharm,首先下载abd驱动,在pc上通过命令模式操作手机。

下载好后配置环境变量,右键此电脑-高级系统设置-环境变量-Path

或者直接在abd所在的文件夹shift右键打开cmd

在cmd窗口中输入abd

然后有一些库需要提前下载好:matplotlib, PIL, numpy

我之前下载的anaconda自带这些库

获取手机截图:

os.system('adb shell screencap -p /sdcard/screen.png')#手机获取实时截图
os.system('adb pull /sdcard/screen.png')#PC端获取截图

通过numpy转化成多维数组进行图片绘制:

numpy.array(PIL.Image.open('screen.png'))

 

贴一份完整代码

 1 # -*- coding: utf-8 -*-
 2 import os
 3 import time
 4 import numpy,PIL
 5 import matplotlib.pyplot as plt
 6 from matplotlib.animation import FuncAnimation
 7 
 8 need_update = True
 9 
10 def get_screen_image():
11     os.system('adb shell screencap -p /sdcard/screen.png')
12     os.system('adb pull /sdcard/screen.png')
13     return numpy.array(PIL.Image.open('screen.png'))
14 
15 def jump(point1, point2):
16     x1, y1 = point1; x2, y2 = point2
17     dis = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
18     os.system('adb shell input swipe 320 410 320 410 {}'.format(int(dis * 1.35)))#抓包获取(坐标、1.35是单位按压时间)
19 
20 def on_click(event, coor = []):#点击事件的坐标位置
21     coor.append((event.xdata, event.ydata))
22     if len(coor) == 2:#单击2次开始计算
23         jump(coor.pop(), coor.pop())
24     need_update = True
25 
26 def update_screen(frame):
27     global need_update
28     if need_update:
29         time.sleep(1)
30         axes_image.set_array(get_screen_image())#更新图片
31         need_ipdate = False
32     return axes_image,
33 
34 figure = plt.figure()#创建空白对象
35 axes_image = plt.imshow(get_screen_image(), animated = True)#把获取的图片画在坐标轴
36 figure.canvas.mpl_connect('button_press_event', on_click)#单击回调函数(传递的是对象不是参数!!)
37 ani = FuncAnimation(figure, update_screen, interval = 50, blit = True) #刷新图片、时间50ms
38 plt.show()

 

手机连接pc一定要打开usb调试!!!!一加5t 关于手机-狂点版本号 在开发者选项中打开usb调试,什么?你说其他手机打开方式?百度吧!

最后贴几张图  ( ͡° ͜ʖ ͡°)✧

 

无奈分数如果太高是会上传失败的,谁有解决办法可一定要告诉我啊~

posted @ 2018-02-28 22:08  LesRoad  阅读(929)  评论(1编辑  收藏  举报