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 = Truedef 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 = point1x2,y2 = point2dis = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5print('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_updateprint('point1=',(event.xdata,event.ydata))point.append((event.xdata,event.ydata))if len(point)==2:distancex_y(point.pop(),point.pop())need_update = Truedef update_image(*args):global need_updateif need_update:time.sleep(1.5)axes_image.set_array(get_screenimage())need_update = Falsereturn 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、计算机视觉等方向也比较感兴趣,欢迎关注公众号,作者不定期更新一些学习资源,大家一起学习呀!

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
