python跳一跳编程构造_Python + 新手 制作“跳一跳”辅助程序
刚开始学习Python,萌新总有一颗渴望做实践享受成就感的心,最近“跳一跳”比较火,在看了一些前辈的辅助程序教程后,我就也想写一个自己版本的辅助(for Android)。
写辅助程序的起因就是这样啦,我觉得写“跳一跳”的辅助比玩“跳一跳”更有趣,所以对于那些被辅助程序伤到的“跳一跳”玩家,我表达一下歉意~
另外也希望把我的思路分享给大家,代码挂在这里,供大家各取所需,自娱自乐~cpruan/enjoyself.wechathopgithub.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 + 新手 制作“跳一跳”辅助程序相关推荐
- python跳一跳编程构造_python实现微信跳一跳辅助工具步骤详解
说明 1.windows上安装安卓模拟器,安卓版本5.1以上 2.模拟器里下载安装最新的微信6.6.1 3.最好使用python2.7,python3的pyhook包有bug,解决比较麻烦 步骤 1. ...
- python中冒号报错_python新手常见错误和异常
在python编程中,新手最常见的错入和异常如下 1.缺少冒号引起的错误 在if,elif,for,while,class,def声明末尾需要添加冒号(:),如果忘记添加,将会提示:"Syn ...
- python黑帽编程视频_Python黑帽编程 3.4 跨越VLAN详解
VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理网络障碍,将不同子网中的用户划到同一个VLA ...
- python如何进入编程界面_Python可视化界面编程入门
Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplicat ...
- python手机开发的软件_Python新手入门教程_在手机上就能学习编程的软件
Python新手入门教程_在手机上就能学习编程的软件 很多小伙伴会问:我在学编程,想利用坐地铁坐公交吃饭间隙学编程,在手机上能学编程的软件有哪些?毕竟时间宝贵啊!!哈哈哈!!! 这个问题,在悟空回答的 ...
- python简单好看的代码_Python新手写出漂亮的爬虫代码1
初到大数据学习圈子的同学可能对爬虫都有所耳闻,会觉得是一个高大上的东西,仿佛九阳神功和乾坤大挪移一样,和别人说"老子会爬虫",就感觉特别有逼格,但是又不知从何入手,这里,博主给大家 ...
- python是什么编程教程-一个新手,什么编程都没学过怎么学好Python?
可以参考一下<笨办法学Python 3>中的笨办法,希望以下方法可以帮忙到你. 在本书的帮助下,你将通过完成下面这些非常简单的事情来学会一门编程语言,这也是每个程序员的必经之路. 1.从头 ...
- 【菜鸟教程】Python 100例编程题--适合新手(1)
菜鸟教程100例题的解答,python 3.7及jupyter notebook实现,可能代码并不是最简洁的,但一定通俗易懂,适合新手阅读. 题目及代码如下: 1.题目:有四个数字:1.2.3.4,能 ...
- python如何自制音乐软件_Python开发制作酷狗和QQ音乐下载器
开发工具 **Python版本:**3.6.4 相关模块: requests模块 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 相关文件 ...
最新文章
- 第三次作业+105032014085
- 中小学计算机报名网址,小学网上报名系统_小学网上在线报名解决方案_海之睿报名系统...
- OpenCV学习笔记三-Mat数据结构
- [SpringBoot2]容器功能_底层注解配置绑定_@Configuration@Import@Conditional@ImportResource
- 教你精确计算 I2C 上拉电阻阻值
- C语言学习笔记---001C语言的介绍,编译过程原理,工具等
- 了解 Adobe Scout 收集和使用的数据
- java ipv4和ipv6通信_IPv6与IPv4连接负载
- Transformers中的Beam Search高效实现
- 虚拟机 linux 盘分小了,增加虚拟机硬盘分区大小
- uniapp区分不同平台
- 实用多媒体技术 课程习题及解答
- linux卸载nvdia驱动_Ubuntu 卸载 Nvidia 驱动和安装最新驱动
- OK6410 V4L2 分析
- Hyper-V 2012 R2 故障转移群集
- 二、基础SpringBoot2.0.0M4项目目录讲解
- 传智播客设计学院简介代码
- 《操作系统之哲学原理(第2版)》——— 操作系统的发展历史
- matlab编一个福利彩票电脑选号的程序,第14讲 计算机模拟_云南师范大学:数学建模与数学实验(费培之)_ppt_大学课件预览_高等教育资讯网...
- Linux操作系统知识点(上)