Python实现微信跳一跳小游戏

**

目录

1. 实现原理
2. 实现环境
3. 代码
4. 结果展示

**

- 实现原理

  • 利用adb工具获取手机实时截图:
    adb shell screencap -p /sdcard/screen.png
    adb pull /sdcard/screen.png .

  • 点击起始位置与落地位置,计算像素距离distance
    参考python回调函数的用法

  • 计算按压时间,T=K*distance
    K可调,本文取1.35

  • 用Adb工具点击屏幕蓄力一跳:
    adb shell input swipe x y x y time

  • 重新刷新手机截图
    参考python中matplotlib.animation库下FuncAnimation函数

- 实现环境

  • 下载,安装Python3

  • adb驱动安装
    adb驱动下载地址:https://adb.clockworkmod.com/
    下载完后 将adb 命令 添加到系统环境变量里面
    打开CMD控制台,输入adb,出现如下界面,即为配置成功。如图
    在这里插入图片描述

  • 设置手机权限
    将安卓手机用USB与电脑相连接,在安卓手机上打开开发者模式,并开启USB调试模式,如果以上操作没有任何错误,那么在CMD控制台,执行命令 adb devices可显示当前手机连接的端口号。若十分不幸,adb devices 找不到设备,怎么解决?

    打开设备管理器,找到你的设备adb点击属性,如图:
    在这里插入图片描述
    找到adb_usb.ini文件,一般在使用者文件.android下,若没有则选择新建这样一个文件,在该文件下添加一行0xXXXX,比如在这里添加ox2D95。
    再通过进入 DOS cmd, 输入 adb kill-server,adb devices 便可看到你的设备,这样环境配置就大功告成了!下面开始开始撸代码。

  • Python代码

import os
import time
import numpy
from PIL import Image
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import cv2

"""
实现过程
1.获取手机实时截图
2.点击起始位置与落地位置
3.计算两个点距离
4.计算按压时间
5.发送按压指令
6.重新刷新手机截图

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

need_update = True

def get_screenimage():
    os.system('adb shell screencap -p /sdcard/screen.png')   #手机获取实时截图
    os.system('adb pull /sdcard/screen.png')                 #PC端获取截图
    return numpy.array(Image.open('screen.png'))             #将图片转化为数值矩阵


def distancex_y(point1,point2):
    x1,y1 = point1
    x2,y2 = point2
    dis = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
    print('distance = ', dis)
    # 根据距离计算按压时间,用Adb工具点击屏幕蓄力一跳
    cmd = 'adb shell input swipe 320 410 320 410 {}'.format(int(dis * 1.35))
    print(cmd)
    os.system(cmd)


def getpoint(event,point=[]):
    global need_update
    print('point1=',(event.xdata,event.ydata))
    point.append((event.xdata,event.ydata))
    if len(point)==2:
        distancex_y(point.pop(),point.pop())
        need_update = True

def update_image(*args):
    global need_update
    if need_update:
        time.sleep(1.5)
        axes_image.set_array(get_screenimage())
        need_update = False

    return axes_image,

figure = plt.figure()#创建空白对象
axes_image = plt.imshow(get_screenimage(), animated = True)#把获取的图片画在坐标轴
figure.canvas.mpl_connect('button_press_event', getpoint)#单击回调函数(传递的是对象不是参数!!)
ani = FuncAnimation(figure, update_image, interval = 50, blit = True) #刷新图片、时间50ms
plt.show()

  • 运行结果

在这里插入图片描述
图为获取起点、终点坐标以及两点像素距离。

操作步骤
哈哈最后跑了几百分弃游了,怕被腾讯爸爸把号给封了,狗头保命。下一步再去尝试图像处理的方式,实现全自动化。

最后打个广告如果你对python、计算机视觉等方向也比较感兴趣,欢迎关注公众号,作者不定期更新一些学习资源,大家一起学习呀!
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值