zoukankan      html  css  js  c++  java
  • 【辅助工具】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调试,什么?你说其他手机打开方式?百度吧!

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

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

  • 相关阅读:
    Linux命令之乐--nmap
    shell脚本学习总结09--分支与循环结构
    shell脚本学习总结08--比较与测试
    Linux命令之乐--test
    Linux命令之乐--read
    shell脚本学习总结06--数学计算
    Linux命令之乐--time
    Linux命令之乐--expr
    Linux命令之乐--seq
    Linux命令之乐--rename
  • 原文地址:https://www.cnblogs.com/lesroad/p/8486083.html
Copyright © 2011-2022 走看看