美文网首页JAVA架构分享
当java程序员遇到微信跳一跳会擦出什么火花?(详细教程)

当java程序员遇到微信跳一跳会擦出什么火花?(详细教程)

作者: java高级分享 | 来源:发表于2018-01-03 16:14 被阅读634次

    “喏,我已经尽力了……”

    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开发框架掌握熟练的可以加群。

    相关文章

      网友评论

        本文标题:当java程序员遇到微信跳一跳会擦出什么火花?(详细教程)

        本文链接:https://www.haomeiwen.com/subject/eoohnxtx.html