“喏,我已经尽力了……”
12月28日,微信宣布,小程序增加了新的类目:小游戏,同时上线小游戏「跳一跳」,瞬间跳一跳成了全民游戏,玩得厉害的撑死不过200多分,如何牢牢占据排行榜的第一位呢?用Python帮助你,Python真的无所不能。
“跳一跳”这个东西还是今天刚接触到的,看到了python群中有人再问“微信跳一跳的外挂有人写了没”,“早就有了”,“github”,“等着出个更详细的教程教程没看懂,主要没有用过adb”。
不过没关系,你们跳的再好,在毫无心理波动的程序面前都是渣渣。
刚刚会python的小白想玩怎么办?
下有详细的教程,哈哈,包教会不收任何的费用。
感受一下被支配的恐惧吧:
使用工具
1.python3.6
2.adb
3.安卓手机(版本4.4+)
使用原理
# === 思路 ===
# 核心:每次落稳之后截图,根据截图算出棋子的坐标和下一个块顶面的中点坐标,
# 根据两个点的距离乘以一个时间系数获得长按的时间
# 识别棋子:靠棋子的颜色来识别位置,通过截图发现最下面一行大概是一条直线,就从上往下一行一行遍历,
# 比较颜色(颜色用了一个区间来比较)找到最下面的那一行的所有点,然后求个中点,
# 求好之后再让 Y 轴坐标减小棋子底盘的一半高度从而得到中心点的坐标
# 识别棋盘:靠底色和方块的色差来做,从分数之下的位置开始,一行一行扫描,由于圆形的块最顶上是一条线,
# 方形的上面大概是一个点,所以就用类似识别棋子的做法多识别了几个点求中点,
# 这时候得到了块中点的 X 轴坐标,这时候假设现在棋子在当前块的中心,
# 根据一个通过截图获取的固定的角度来推出中点的 Y 坐标
# 最后:根据两点的坐标算距离乘以系数来获取长按时间(似乎可以直接用 X 轴距离)
ADB
首先碰到的就是什么是adb。Android Debug Bridge
Android操作系统与桌面电脑间沟通的一个命令列工具。
可以在电脑上通过命令达到操作手机的效果。
下载
在许多Android用户多次呼吁之后,Google终于将ADB和Fastboot作为单独的文件提供给用户下载。以前这些文件只包含在大尺寸的Android SDK或Android Studio当中提供给用户,现在这种变化意味着它们现在比以往更快,更容易执行和侧载。
这样就免去了下载一个600M的Android SDK,这也是坑了我。
1.下载之后将其路径添加到环境变量中去。
2.手机打开开发者,USb调试,用数据线连接到电脑上,如果手机界面显示USB授权,请点击确认。
3.在cmd输入
就可以使用了,本次使用的命令和常用的几个命令
本次使用到的命令,先了解这写就可以应对
adb start-server 开启进程
adb decives 找到设备
adb shell screencao -p /sdcard/i.png 对手机进行截屏保存到sdcard的目录下面。
adb pull /sdcard/i.png . 将sdcard目录下的i.png传送到当前目录下面
adb pull /adcard/i.png D://
注意这些命令在adb下 而不是在shell下面。
adb shell screencap -p /sdcard/1.png adb pull /sdcard/1.png .
用adb工具点击屏幕蓄力一跳。
adb shell input swipe x y x y time
遇到的问题
最开始一直没有检测到手机。然后用360助手排查问题。找到开发者。就是连不上。最可气的就是硬件的问题吧。后来换了一个数据线。解决
端口被360手机助手占用。
只要在进程中退掉360 手机助手
使用安卓模拟器上面的微信的版本不支持(可能是我忘了更新了吧!)。暂时还是用到了真机上的微信。找来多年不用的安卓机。然后一顿root。
玩了好大一会 ,一个一个测试命令,当玩到
adb shell input swipe x y x y time
这条命令的时候延伸
adb shell input(Android模拟输入),input可以用来模拟各种输入设备的输入操作。
D:>adb shell inputusage: input ... input text input keyevent input [touchscreen|touchpad|touchnavigation] tap input [touchscreen|touchpad|touchnavigation] swipe [duration(ms)] input trackball press input trackball roll
1. keyevent指的是android对应的keycode,比如home键的keycode=3,back键的keycode=4.
具体请查阅 android keycode详解http://blog.csdn.net/huiguixian/article/details/8550170
然后使用的话比较简单,比如想模拟home按键:
adb shell input keyevent 3
请查阅上述文章,根据具体keycode编辑即可。
不仅有滑动的操作,还有其他的键的操作。
adb shell input keyevent 3 home键返回adb shell input keyevent 4 返回键
2. 关于tap的话,他模拟的是touch屏幕的事件,只需给出x、y坐标即可。
此x、y坐标对应的是真实的屏幕分辨率,所以要根据具体手机具体看,比如你想点击屏幕(x, y) = (250, 250)位置:
adb shell input tap 250 250
3. 关于swipe同tap是一样的,只是他是模拟滑动的事件,给出起点和终点的坐标即可。例如从屏幕(250, 250), 到屏幕(300, 300)即
adb shell input swipe 250 250 300 300 //滑动 adb shell input swipe 100 100 200 200 300 //从 100 100 经历300毫秒滑动到 200 200 //长按 adb shell input swipe 100 100 100 100 1000 //在 100 100 位置长按 1000毫秒
特别注意下 swipe后面跟的有时间的参数[duration(ms)],这个与手机的版本的问题有关。
input命令是用来向设备发送模拟操作的命令:
因为版本不同,input命令也有所不同
以下为Android 4.0的input命令:
usage:input text input keyevent input tap input swipe
明显两个版本的input命令是有差异的,也就是说在版本是4.4以下的情况下。是不能用swipe后面跟时间的。在使用的时候一定要记得查询清楚所使用的Android版本!
(我拿到手机后就root了,然后一看版本是4.3的,拿着4.3版本的手机心中飞过***,好的一点是还有一个手机,就升级一下版本,这样换手机在接着搞。其他就不会出现什么错误了)
小结
adb在这次所起到的作用是什么?
1.简单来说截取跳一跳中的图片(用python分析计算)
2.精确执行命令,包括按压的时间,按压的间隔(python通过调用cmd能做到)
如果还有什么不懂的可以加群,在这里给大家提供一个java交流学习的地方,java架构群:680130298
1)具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加群。
2)在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加群。
3)如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的可以加群。