python 实现 跳一跳游戏 代码解析

python 实现 跳一跳游戏 代码解析这个代码实现的是手动点击起点和终点,程序自动判断距离、触屏时间完成跳跃原理(摘自项目说明页面):1.将手机点击到“跳一跳”小程序界面;2.用Adb工具获取当前手机截图,并用adb将截

大家好,又见面了,我是你们的朋友全栈君。

这个代码实现的是   手动点击起点 和 终点  ,程序自动判断距离、触屏时间  完成跳跃 

 

原理(摘自项目说明页面):
1. 将手机点击到“跳一跳”小程序界面;
2. 用Adb 工具获取当前手机截图,并用adb将截图pull上来:
     adb shell screencap -p /sdcard/1.png
     adb pull /sdcard/1.png .
3. 用matplot显示截图;
4. 用鼠标点击起始点和目标位置,计算像素距离;
5. 根据像素距离,计算按压时间;
6. 用Adb工具点击屏幕蓄力一跳:
     adb shell input swipe x y x y time

 

环境准备(window7):
1. 下载 、安装 python3
2pip安装   
     cmd窗口中 进入python3根目录下的script文件夹,
     执行命令  
       <span role="heading" aria-level="2">python 实现 跳一跳游戏 代码解析

    则Scripts文件夹下会出现一系列和pip有关的文件,其中有pip.exe
    
将pip.exe的路径也添加到环境变量PATH中
    在cmd下输入“pip”,如果能识别”pip”指令,则说明pip安装成功了

3adb驱动安装
    adb驱动下载地址:https://adb.clockworkmod.com/
    下载完后  将adb 命令 添加到系统环境变量里面
     打开CMD控制台,输入adb,出现如下界面,即为配置成功。如图:
     <span role="heading" aria-level="2">python 实现 跳一跳游戏 代码解析

 

4.下载源码

到这一步,我们要将源码下载到本地电脑里。

 

github地址:https://github.com/wangshub/wechat_jump_game


5.安装依赖包

跳一跳微信辅助的最终运行需要很多的Python模块,作者已经将这些所需要的模块都写在了源码中的requirements.txt中,
所以我们执行命令 pip install -r requirements.txt,即可将这些必须的模块下载下来,模块包括有matplotlib,numpy等。

 

如图,我们使用CD命令,切换到源码的下载目录,
再执行命令pip install -r requirements.txt

 

 
6.设置手机权限

将安卓手机用USB与电脑相连接,在安卓手机上打开开发者模式,并开启USB调试模式,
每种安卓手机开启的方法都不一样,
以小米 Mix2 手机为例,在设置中找到手机版本号,连续点击5次即可开启开发者模式
然后进入开发者选项打开   usb调试、usb调试(安全设置)、

如果以上操作没有任何错误,那么在CMD控制台,执行命令 adb devices可显示当前手机连接的端口号。

7.运行
在以上步骤都没有任何错误的情况下,打开微信,开启跳一跳小游戏,进入游戏主页面,
然后再打开CMD控制台,使用CD命令切换目录,切换到跳一跳辅助的源码目录下,执行命令wechat_jump_auto.py。

参数调节请打开源码目录下的config文件夹,里面有适配各种屏幕和机型的文件夹,
根据自己的分辨率或机型,点击进入相应文件夹,打开里面的config.json文件,修改参数即可。建议修改前最好备份一份。

 

import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation from PIL import Image import math import time import os 
def pull_screenshot(): 定义 截取手机屏幕 并 发送截图到电脑 函数 os.system('adb shell screencap -p /sdcard/autojump.png') 发送 截屏命令 到手机 os.system('adb pull /sdcard/autojump.png .') 发送 拉取图片到电脑 命令 def jump(distance): 定义 跳跃函数 形参为距离 press_time = distance * 1.35 计算按屏幕 时间 press_time = int(press_time) cmd = 'adb shell input swipe 320 410 320 410 ' + str(press_time) 按屏幕命令 print(cmd) os.system(cmd) 发送 按屏幕命令 fig = plt.figure() 创建一个图像对象(窗口) index = 0 cor = [0, 0] pull_screenshot() 执行截屏函数 img = np.array(Image.open('autojump.png')) Image.open读取图片 到名为 img 的图片数组 update = True click_count = 0 cor = [] def update_data(): 定义更新数据的函数 更新图片 return np.array(Image.open('autojump.png')) im = plt.imshow(img, animated=True) im = 绘制图像(数组名、动画=打开) def updatefig(*args): 定义动画函数 global update if update: time.sleep(1.5) pull_screenshot() im.set_array(update_data()) update = False return im, def onClick(event): 定义 鼠标点击 处理函数 global update global ix, iy global click_count global cor # next screenshot ix, iy = event.xdata, event.ydata coords = [] coords.append((ix, iy)) [(x1,y1)|(x2,y2)] print('now = ', coords) cor.append(coords) [[(x1,y1)],[(x2,y2)]] click_count += 1 if click_count > 1: click_count = 0 cor1 = cor.pop() [(x2,y2)] cor2 = cor.pop() [(x1,y1)] distance = (cor1[0][0] - cor2[0][0])**2 + (cor1[0][1] - cor2[0][1])**2
x2 - x1 y2 - y1 distance
= distance ** 0.5 print('distance = ', distance) jump(distance) update = True fig.canvas.mpl_connect('button_press_event', onClick) 鼠标点击 处理函数 onClick ani = animation.FuncAnimation(fig, updatefig, interval=50, blit=True)
图像函数 动画函数 更新频率50ms 更新所有点 plt.show() 显示图像

 

运行结果:

python wechat_jump_py3.py

 <span role="heading" aria-level="2">python 实现 跳一跳游戏 代码解析

第一行 发送截图
   2       第一次鼠标点击  生成坐标
   3       第二次鼠标点击  生成坐标
   4        计算距离
   5         发送点击屏幕命令  swipe后面四个参数是    (滑动起点 x   y     滑动终点   x   y      滑动用时
 
第一次点击

 <span role="heading" aria-level="2">python 实现 跳一跳游戏 代码解析

 

第二次点击
<span role="heading" aria-level="2">python 实现 跳一跳游戏 代码解析

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156163.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • ROS中使用A星算法进行路径规划[通俗易懂]

    ROS中使用A星算法进行路径规划[通俗易懂]ROS中使用A星算法进行路径规划前言python编写A星算法描述具体实现ROS结合A星算法描述具体实现实现结果前言由于本人这学期修了一门《智能工程》的课程,课程的大作业要求大家自主编写机器人导航程序,包括:路径规划、轨迹规划、控制器、机器人建模等相关程序,因此特在此写下一篇博客,记录开发过程。这是第一篇博客,用于记录如何将自己编写的A星算法用于ROS中。python编写A星算法描述先声…

  • 计算机一级本本可以办吗,笔记本电脑卡怎么办,小编教你笔记本电脑太卡怎么解决…[通俗易懂]

    计算机一级本本可以办吗,笔记本电脑卡怎么办,小编教你笔记本电脑太卡怎么解决…[通俗易懂]电脑内的灰尘容易造成部件加快老化,导致硬件的运行迟钝,甚至导致一些因接触不良而无法正常开机。比如风扇,不及时的清理容易造成电脑的温度过高,则就容易电脑开机慢。那笔记本电脑太卡怎么解决?下面,小编给大家带来了笔记本电脑太卡的解决图文。相信很多人都有过以上的经历,其实刚买笔记本的时候,玩游戏开软件都是嗷嗷快,速度快的飞起,然而随着时间的推移,系统垃圾慢慢堆积导致系统运行缓慢。电脑在使用过程中太卡让很多…

  • hdu1106 java字符串分割

    hdu1106 java字符串分割排序TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):30220    AcceptedSubmission(s):8391ProblemDescription输入一行数字,如果我们把这行数字中的‘5’都

  • latex参考文献为网址「建议收藏」

    latex参考文献为网址「建议收藏」1、引入hyperref包:\usepackage{hyperref }2、举例:@misc{A:2005,  author = {AlexanderTotok},  title = {hello },  howpublished = {\url{http://cs.nyu.edu/totok/professional/software/tpcw/tpcw.html}}

  • 二叉树层序遍历(C语言)[通俗易懂]

    二叉树层序遍历(C语言)[通俗易懂]二叉树的层序遍历即从上到下,在每一层从左到右依次打印数据。如下:层序遍历结果:ABCDEFG基本思路即将根节点入队后,之后每次都将队首元素出队,打印队首元素数据,并将队首元素左右子树入队,一直重复上述过程。自然,本题还可以用数组来实现。代码:#include<stdio.h>#include<stdlib.h>#defineQueueMax100typedefstructNode{chardata;structNode*

  • 华为静态路由配置[通俗易懂]

    华为静态路由配置[通俗易懂]静态路由静态路由是由管理员手动配置和管理的路由,静态路由配置简单,因此,被广泛应用于结构简单网络中,静态路由还可以实现负载均衡与路由备份。拓扑PC1位于192.168.1.0网段,它的IP是192.168.1.2,网关是192.168.1.1,掩码255.255.255.0。PC2位于192.168.2.0网段,它的IP是192.168.2.2,网关是192.168.2.1,掩码255….

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号