python辅助Jump一Jump

工作路上偶尔玩下微信Jump一Jump,无奈对时间无感,实际得分一直徘徊不前,碎片之余看到了一篇python辅助Jump一Jump技术帖,按照该帖操作,可行故mark过程。


硬件说明:

  • 台式计算机:ubuntu系统
  • android 7.1手机:1080*1920

python版本及支持库说明:

  • Python 3.6.1
  • matplotlib (2.1.2):可通过pip list | grep mat -i查看
  • PIL: Pillow (5.0.0)

PS: Windows系统也是可以的,相关环境的配置推荐参考:在同一台电脑上同时安装Python2和Python3


实现思路

  1. 通过adb截图命令截取Jump一Jump界面保存,并通过adb push命令保存到电脑端
  2. 用PIL打开截图图片,用matplotlib显示截图并绑定对截图的鼠标点击事件
  3. 记录鼠标点击的起跳起点和终点坐标,计算两点间距离
  4. 通过两点距离适配出需在手机屏幕上按下的时间值,然后通过adb发送按键事件
  5. 重复1~4步骤

实现代码

import os
import math
import matplotlib.pyplot as plt
from PIL import Image

class JumpJump:

    def __init__(self):
        #两点距离乘以该系统得到需按下的时间
        self.coefficient = 1.36
        #记录点下的次数
        self.click_counts = 0
        #记录点下的坐标数组,里面保存的元祖是X,Y坐标值
        self.coords = []

    def screenshot(self):
        #截图保存到sdcard
        os.system('adb shell screencap -p /sdcard/screenshot.png')
        #截图图片pull到当前文件所在目录
        os.system('adb pull /sdcard/screenshot.png .')


    def onClick(self, event):
        #保存点击x,y坐标
        self.coords.append((event.xdata, event.ydata))
        self.click_counts += 1
        if self.click_counts == 2:
            #如果点击两次,次数归零并取出两点坐标数据计算两点距离
            self.click_counts = 0
            next = self.coords.pop()
            pre = self.coords.pop()
            distance = math.sqrt((next[0] - pre[0])**2 + (next[1] - pre[1])**2)
            self.jumpToNext(distance)


    def jumpToNext(self, distance):
        #距离乘以系数即为按下时间值
        pressTime = int(distance * self.coefficient)
        #发送滑动事件,滑动时间为pressTime
        cmd = 'adb shell input swipe 100 100 200 200 {}'.format(pressTime)
        print(cmd)
        os.system(cmd)


    def run(self):
        while True:
            self.screenshot()
            self.screenshot()
            #可通过dir(plt)查看该模块所有属性,通过help(plt.figure)查看方法介绍
            figure = plt.figure()
            figure.canvas.mpl_connect('button_press_event', self.onClick)

            img = Image.open('screenshot.png')
            #print(type(img))
            plt.imshow(img)
            plt.show()

if __name__=='__main__':
    jump = JumpJump()
    jump.run()

保存该JumpJump.py文件,cd到该py文件所在目录,然后python JumpJump.py, 接着会显示Jump一Jump截图,用鼠标先后点击起跳点和终点位置,点完后就自动跳到终点位置了,如果跳的距离不合理,可适配coefficient值直至合理。

总结

mark该帖主要是加深学习adb命令,同时了解matplotlib、PIL库的使用,一句话仅供学习,谨慎使用

你可能感兴趣的:(python)