刚开始学习Python,萌新总有一颗渴望做实践享受成就感的心,最近“跳一跳”比较火,在看了一些前辈的辅助程序教程后,我就也想写一个自己版本的辅助(for Android)。

写辅助程序的起因就是这样啦,我觉得写“跳一跳”的辅助比玩“跳一跳”更有趣,所以对于那些被辅助程序伤到的“跳一跳”玩家,我表达一下歉意~

另外也希望把我的思路分享给大家,代码挂在这里,供大家各取所需,自娱自乐~cpruan/enjoyself.wechathop​github.com

下面就聊一聊这个程序的细节啦,首先是实现原理,萌新版本的原理当然很简单啦。由于很多的知识不太懂(比如os库、Image库、ADB操作等),不懂的部分我就试着套教程、或者照搬别人的轮子。我主要借鉴的是 @霍雍 在下面这篇文章里的程序结构,只是修改了其中的算法。霍雍:人人都能看懂的“跳一跳”平民算法​zhuanlan.zhihu.com

程序中最主要的部分都集中在“jump_one函数”(基本是copy了@霍雍 的部分),每一次跳跃的实现主要分为五个步骤:

def jump_one(filename):

os.system('adb shell screencap ' + phonePath + filename) #第一步

os.system('adb pull ' + phonePath + filename + " " + imgPath + filename) #第二步

os.system('adb shell rm ' + phonePath + filename) #第三步

swipetime = timecalculate(filename) #第四步

os.system('adb shell input swipe 300 1500 300 1500 ' + str(swipetime)) #第五步

time.sleep(1)

return swipetime

第一步,通过ADB截屏,命名为x.png,存储到手机

第二步,通过ADB将x.png从手机复制到电脑

第三步,通过ADB删除手机上的x.png

第四步,根据filename调用对应命名的截图,计算触摸时间

第五步,根据所算时间,通过ADB执行原位滑屏操作

容易看到,五步中有四步是通过os.system()函数控制ADB完成的(导致效率不高,时间都花在ADB操作上...T-T),比较简单就略过了,核心部分在时间计算上。

PS:我称跳动的小人为“棋子(chessman)”,下一个落脚的物体为“棋盘(chessboard)”。

时间计算 → 距离计算 → △X计算

有个隐藏信息是,触摸时间与跳跃距离成正比,因此我们算出需要跳跃的距离,就能得到时间。

另一个隐藏信息是,跳跃方向都是斜着的,但倾斜角度“基本是”固定的(实际有少许偏移),因此我们只需计算 △X 或者 △Y 即可。

最后一个隐藏信息是,游戏初始时的“棋子”和“棋盘”位置总是固定的,因此可以反复测试初始游戏时的 触摸时间init_time 与 距离init_X 的关系,得到这个常数比值K后,后续计算就简单了:

△T = △X * K = △X * (init_x / init_time)跳跃思路

△X计算 → 找特征像素的坐标

如何找“棋子”与“棋盘”的△X 呢?我看到的帖子,大家有用像素识别的,有用深度学习图像识别的,有用OpenCV提取图像边缘再识别的......我......我...我会的少,只能用笨办法的“像素识别”了...

即找到“棋子”左上角的第一个像素(x, y),再计算该行属于“棋子”像素的个数n,从而X = x + n//2,即可得到“棋子”的横坐标 X 啦,“棋盘”同理。原理示意图如下:识别特征像素

找特征像素的坐标 → 像素识别

识别利用的特征包括:“棋子”顶部像素颜色稳定,亮度较低,与背景像素色差较大;“棋盘”顶部像素颜色不稳定、亮度不稳定,但亮度一定比“棋子”高,且与背景像素有一定色差(并且总与“棋子”的第一像素保持一定距离,用于寻找位置较为靠近的“棋盘”)。

利用上述特征,for循环逐个对截图像素进行判断,即可筛选出特征像素啦,效果如下:识别“棋子”识别“棋盘”

从结果来看,识别的成功率还不错~然并卵,并不能保证“棋子”不跑偏,我觉得可能的原因包括像素识别误差的累积(比如并非所有“棋盘”的中心都在其顶点的正下方,如“硬盘”物体)、ADB操作的延迟等等。逐渐跑偏

大家可以看到“棋子”逐渐越跳越偏的过程,其原因就在于存在细小偏差,不能保证每次都落在中心这就意味着,棋子容易“中心 → 中心 → 中心”连中多元,也容易“歪一点 → 再歪一点 → 扑街”。不过,“棋子”其实并非是沿固定方向跳跃,而是以“棋子”中心与下一个“棋盘”中心构成的直线的方向跳跃,视情况这种偏差可能会相互抵消,回到正轨。(暂时无图...)

在上述本征不稳定性的基础上呢,大家可能需要多试几次才能拿到理想的分数,测试大概平均能拿到1000+,基本上1000~3000问题不大,我最高拿过3179。最好成绩

程序的效率并太高,优化后平均跳一次需要4.5~5s,经过测试,约4s的时间花在ADB的操作上了...

...┐(‘~`;)┌ ...

如果开发个APP,所有操作都在手机上进行会不会快一些...

使用说明:

我用Python3写的,在Windows 7上测试跑得很欢,Linux上没有试。

由于使用了ADB工具,所以是针对Android手机的,手机需要打开“USB调试”,电脑端需要安装好手机驱动(或者让手机助手如豌豆荚连一下手机,再退出豌豆荚)。

建议打开cmd命令行,用“cd”命令,进入ADB工具所在路径,输入“adb”,检测adb是否正常使用。

运行.py文件前,建议用IDE打开,调整一下基本参数(在程序最下面):预期跳多少步,默认70

分辨率,默认1440 * 2560 (for Samsung S6)

init_x,经过我的测试,填607 (for 1440 * 2560)或455 (for 1080 * 1920, 1080p),效果比较好,默认607

init_time,经过我和 @霍雍 各自测试,最后不约而同认为723比较好,默认723

phonePath,手机上临时存储截图的路径,建议新建一个,默认/storage/emulated/0/test/

imgPath,电脑端存储截图的路径,建议新建一个,默认C:\Users\Administrator\test\

开始游戏:手机连接电脑,可能有“是否允许该计算机调试”之类的弹窗,点允许调试。

手机进入“跳一跳”界面后,电脑端运行.py文件即可。

运行.py文件的方式有两种,用Python的IDE打开并执行;或者用cmd命令执行“python + .py文件的路径”指令,如:

python c:\users\administrator\test\wechathop.py

也可以在cmd窗口输入:“python”+“ ”,然后把wechathop.py文件拖入cmd窗口,按回车执行即可。

萌新上路,胆大粗心,很多代码写法以及程序使用方法上不严谨、不标准,本程序也仅供娱乐,请其他萌新们谨慎参考,大佬们多指导~~

python跳一跳编程构造_Python + 新手 制作“跳一跳”辅助程序相关推荐

  1. python跳一跳编程构造_python实现微信跳一跳辅助工具步骤详解

    说明 1.windows上安装安卓模拟器,安卓版本5.1以上 2.模拟器里下载安装最新的微信6.6.1 3.最好使用python2.7,python3的pyhook包有bug,解决比较麻烦 步骤 1. ...

  2. python中冒号报错_python新手常见错误和异常

    在python编程中,新手最常见的错入和异常如下 1.缺少冒号引起的错误 在if,elif,for,while,class,def声明末尾需要添加冒号(:),如果忘记添加,将会提示:"Syn ...

  3. python黑帽编程视频_Python黑帽编程 3.4 跨越VLAN详解

    VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理网络障碍,将不同子网中的用户划到同一个VLA ...

  4. python如何进入编程界面_Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplicat ...

  5. python手机开发的软件_Python新手入门教程_在手机上就能学习编程的软件

    Python新手入门教程_在手机上就能学习编程的软件 很多小伙伴会问:我在学编程,想利用坐地铁坐公交吃饭间隙学编程,在手机上能学编程的软件有哪些?毕竟时间宝贵啊!!哈哈哈!!! 这个问题,在悟空回答的 ...

  6. python简单好看的代码_Python新手写出漂亮的爬虫代码1

    初到大数据学习圈子的同学可能对爬虫都有所耳闻,会觉得是一个高大上的东西,仿佛九阳神功和乾坤大挪移一样,和别人说"老子会爬虫",就感觉特别有逼格,但是又不知从何入手,这里,博主给大家 ...

  7. python是什么编程教程-一个新手,什么编程都没学过怎么学好Python?

    可以参考一下<笨办法学Python 3>中的笨办法,希望以下方法可以帮忙到你. 在本书的帮助下,你将通过完成下面这些非常简单的事情来学会一门编程语言,这也是每个程序员的必经之路. 1.从头 ...

  8. 【菜鸟教程】Python 100例编程题--适合新手(1)

    菜鸟教程100例题的解答,python 3.7及jupyter notebook实现,可能代码并不是最简洁的,但一定通俗易懂,适合新手阅读. 题目及代码如下: 1.题目:有四个数字:1.2.3.4,能 ...

  9. python如何自制音乐软件_Python开发制作酷狗和QQ音乐下载器

    开发工具 **Python版本:**3.6.4 相关模块: requests模块 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 相关文件 ...

最新文章

  1. 第三次作业+105032014085
  2. 中小学计算机报名网址,小学网上报名系统_小学网上在线报名解决方案_海之睿报名系统...
  3. OpenCV学习笔记三-Mat数据结构
  4. [SpringBoot2]容器功能_底层注解配置绑定_@Configuration@Import@Conditional@ImportResource
  5. 教你精确计算 I2C 上拉电阻阻值
  6. C语言学习笔记---001C语言的介绍,编译过程原理,工具等
  7. 了解 Adobe Scout 收集和使用的数据
  8. java ipv4和ipv6通信_IPv6与IPv4连接负载
  9. Transformers中的Beam Search高效实现
  10. 虚拟机 linux 盘分小了,增加虚拟机硬盘分区大小
  11. uniapp区分不同平台
  12. 实用多媒体技术 课程习题及解答
  13. linux卸载nvdia驱动_Ubuntu 卸载 Nvidia 驱动和安装最新驱动
  14. OK6410 V4L2 分析
  15. Hyper-V 2012 R2 故障转移群集
  16. 二、基础SpringBoot2.0.0M4项目目录讲解
  17. 传智播客设计学院简介代码
  18. 《操作系统之哲学原理(第2版)》——— 操作系统的发展历史
  19. matlab编一个福利彩票电脑选号的程序,第14讲 计算机模拟_云南师范大学:数学建模与数学实验(费培之)_ppt_大学课件预览_高等教育资讯网...
  20. Linux操作系统知识点(上)

热门文章

  1. 暑假周进度总结报告2
  2. OO第一单元总结分析
  3. [P2396] yyy loves Maths VII
  4. Oracle PL/SQL编程之变量
  5. 数据库写入中文出现乱码的处理方式
  6. 修改sublime 侧边栏 颜色 等
  7. Cordova安装与配置过程中出现的问题及解决办法
  8. jquery click点击事件重复执行多次
  9. 使用celery执行Django串行异步任务
  10. php+高德地图webapi 高德jsapi 实现 当前位置与目标位置距离 并按照距离排序(坐标逆转换)...