# jump **Repository Path**: siriuscc/jump ## Basic Information - **Project Name**: jump - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-05-18 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # wechat-jump # 简介 微信跳一跳小脚本,没有测过上限,但是基本玩太嗨是要没朋友的。
比较悲剧的是过700 基本就会被抓作弊,暂时没想到比较好的优化 - 添加了随机暂停 - 添加了每一步的分数识别 - 每一步的按压稍微抖动位移 - 分数和步数高斯分布,能多次游戏自动刷分,分数稳定在设置的最高分附近 ## 运行环境 + python2.7和相关py的依赖 + 安卓adb驱动 + 只在1080\*1920的机器上测试过,其他分辨率可能要调一下参数 ## 使用说明 + 主程序是myjump.py,命令行切换到该目录下,运行 ``` python myjump.py ``` + 配置在myjump.py中的main 的前部分 + imgSeek.py 主要负责图像中数字的识别 + map文件夹中是我们的映射库,用来和数字对比的 ### 配置说明 - path:   adb对手机截图后回传到计算机的文件名,默认就好 - screenshot_backup_dir:   debug 截图文件的目录 - swipe:  手指按压点:最好按照真实习惯设置 - gameMaxCount:  最大游戏次数 - press_lambda:  压力系数,建议不要改,改了可能会跳的太远,这个主要是乘以距离用的 - maxStep:  最大步数,限制一下一次游戏最大的步数,后面还会进行高斯分布,这只是个大概值 - maxScore:  最大分数,限制游戏最大分数,防止分数太高被认为作弊,同样是个大概值,会进行高斯分布 - sigma:  正态分布的参数,决定了最大步数和最大分数的发散程度,越大越发散 ## 实现思路 ### 主流程 + 用adb 获取屏幕截图 + 分析图片,获取棋子位置和目标块的位置,获取当前分数(非必需) + 计算棋子和目标块的距离,据此算出按压时间(这个可以多次调试出来) + 用adb发送按压命令 ### adb参考命令 - 扫描并推送到计算机指定目录 ``` adb shell screencap /sdcard/screen.png abd pull /sdcard/screen.png ``` - 模拟点击 ``` adb shell input tap 540 1584 ``` - 模拟按压(x1,y1,x2,y2,time) ``` adb shell input swipe 500 1500 572 1600 800 ``` ### 分析图片 - 从1/3高度开始分析,这边要先用ps采集一下棋子的颜色,然后分析是对比颜色找到棋子的位置 - 从1/3高度开始逐个像素分析,得到第一个和背景不一样的就是目标块的位置 - 分数识别:先截取一下图片,分析发现每个数字一样大小,然后先保存一套0-9的样本,后面直接对比相似度就行了。分析图片建议用FW或PS ## 感谢 > 参考了大牛(神奇的战士)的文章:https://zhuanlan.zhihu.com/p/32452473 > auther eamil:siriusing.cc@qq.com * 这边自己又重新写了识别逻辑,自己实现分数识别为数字 ### 想法 没有深奥的技术,简单的代码就可以实现。事实上这里不需要什么机器学习啥啥的,画个图算一下坐标就好了。 当然,图像中数字识别,一开始真的打算训练个k-mean来做,或者逻辑回归的人工神经网络,不过想想就觉得没必要,把图像转为向量,那就是两个向量的距离问题,而且是绝对一致的k类。所以分析问题很重要。