前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 实现 跳一跳游戏 代码解析

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

作者头像
全栈程序员站长
发布2022-09-07 20:16:14
1.2K0
发布2022-09-07 20:16:14
举报
文章被收录于专栏:全栈程序员必看

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

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

原理(摘自项目说明页面): 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 2. pip安装 cmd窗口中 进入python3根目录下的script文件夹, 执行命令

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

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

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文件,修改参数即可。建议修改前最好备份一份。

代码语言:javascript
复制
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

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

第二次点击

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档