发表于 2018-1-9 17:46:56
|
显示全部楼层
| 阅读模式
湖南省湘西土家族苗族自治州
分享源码
界面截图:
-
是否带模块:
纯源码
备注说明:
-
前言:最近跳一跳太火,大家都在写,今天把原理来说说,说得不对欢迎指出!
注:请不要加我微信,免得尴尬!(^_^)
低调就好
准备工作:
1.电脑
2.数据线
3.安卓手机(因为我这渣渣电脑带不动模拟器,只能写真机版)
第一步:电脑安装ADB (https://developer.android.google.cn/studio/releases/platform-tools.html )
下载解压就可以了
第二步:大家不需要配置啥环境变量,我搞半天没搞懂,直接在ADB目录创建易语言 源码就不需要配置了!
第三步:手机用数据线连接电脑。手机打开USB调试,还需要打开手机USB调试下面的“模拟按键”
没有“模拟按键”的就打开“USB安全权限”,以我VIVO X20A打开“USB安全权限”打不开,
问客服才知道要先退出VIVO账号,再登陆,才能打开。
第四步:打开第二步创建的易语言源码 ,创建图片框、两个按钮、一个编辑框。界面如下
这是界面
以上工作做完之后,先来测试下ADB,看是否连接到手机
到ADB目录创建一个 a.bat
a.bat用记事本打开
输入”start"保存
运行a.bat得到一个CMD界面
在CMD里面输入“adb shell input keyevent 3 ”(这个是按下手机主页面键) 回车,看手机是否回到主页面
并且CMD里面没有输出错误!
CMD
以上准备工作做完,下面进入代码阶段:
自动模式:
因为跳一跳背景和道具多为渐变色,所以识别不是太好,说下原理(我用这个模式只跳220多点)
第一步:截取手机屏幕保存为图片,并送传到电脑,加载到图片框,代码如下(子程序名:那么我们就开始跳吧)
判断 ( 集开始 =
假 ) 返回 ( ) 删除文件 ( 取运行目录 ( ) +
“\tiaoyitiao.png” ) 运行 ( “adb shell screencap -p /sdcard/tiaoyitiao.png” , 真, 1
) 运行 ( “adb pull /sdcard/tiaoyitiao.png” , 真, 1
) 图片框1.图片 =
读入文件 ( 取运行目录 ( ) +
“/tiaoyitiao.png” ) 判断 ( 集手动 =
假 ) 取棋子底部坐标 ( )
代码都有备注,可以看看,看到最后面有个“取棋子底部坐标()”
那么下一步代码
变量名 类 型 静态 数组 备 注 color 整数型 刷子句柄 整数型 画笔句柄 整数型 r 整数型 g 整数型 b 整数型 x 整数型 y 整数型
dc =
GetDC ( 图片框1.
取窗口句柄 ( ) ) 画笔句柄 =
CreatePen ( 0, 1,
#黑色 ) 刷子句柄 =
CreateSolidBrush ( #红色 ) x = 0
y = 270
判断循环首 ( 真 ) x = x + 1
判断 ( x > 图片框1.宽度
) x = 1
y = y + 1
判断 ( y > 图片框1.高度
) _按钮1_被单击 ( ) 信息框 ( “未找到” , 0, ,
) 跳出循环 ( ) color =
GetPixel ( dc, x, y
) 判断 ( color = 6042679
) 跳出循环 ( ) 判断 ( color = 6502712
) 跳出循环 ( ) 判断 ( color = 6371383
) 跳出循环 ( ) 判断 ( color = 6699831
) 跳出循环 ( ) 判断循环尾 ( ) SelectObject ( dc, 画笔句柄
) Ellipse ( dc, x - 3, y - 3, x + 3, y + 3
) SelectObject ( dc, 刷子句柄
) Ellipse ( dc, x - 3, y - 3, x + 3, y + 3
) DeleteObject ( 刷子句柄
) DeleteObject ( 画笔句柄
) 棋子.x = x 棋子.y = y
输出调试文本 ( “棋子颜色:” +
到文本 ( color
) )
取小板登坐标 ( )
可以看到,棋子我是直接找的4个颜色,经过多方测试,这四个颜色都能识别到棋子底部
找到这个颜色就把坐标记录下来。并且用刷子在坐标的位置画个实心圆显示给我们看,
方便调试!
而且Y轴是从270开始的,一行一行的找,加快速度,按我的图片框高度是从270的!!!!
棋子的坐标找到了,那么我们再找“板凳”的坐标(“板凳”的坐标识别不太理想)
变量名 类 型 静态 数组 备 注 color 整数型 刷子句柄 整数型 画笔句柄 整数型 r 整数型 g 整数型 b 整数型 x 整数型 y 整数型 color2 整数型
dc =
GetDC ( 图片框1.
取窗口句柄 ( ) )
画笔句柄 =
CreatePen ( 0, 1,
#黑色 ) 刷子句柄 =
CreateSolidBrush ( #绿色 ) x = 0
y = 140
判断循环首 ( 真 ) x = x + 1
判断 ( x > 图片框1.宽度
) x = 1
y = y + 1
判断 ( y > 图片框1.高度
) _按钮1_被单击 ( ) 信息框 ( “未找到” , 0, ,
) 跳出循环 ( ) color =
GetPixel ( dc, x, y
) 判断 ( color2 = 0
) color2 = color
判断 ( color - color2 > 78000
) 跳出循环 ( ) 判断 ( color = 16185078
) 跳出循环 ( ) 判断 ( color = 7435156
) 跳出循环 ( ) 判断 ( color = 7434609
) 跳出循环 ( ) 判断 ( color = 7040912
) 跳出循环 ( ) 判断 ( color = 15856113
) 跳出循环 ( ) 判断 ( color = 6655572
) 跳出循环 ( ) 判断 ( color = 9291745
) 跳出循环 ( ) 判断循环尾 ( ) SelectObject ( dc, 画笔句柄
) y = y + 20
Ellipse ( dc, x - 5, y - 5, x + 5, y + 5
) SelectObject ( dc, 刷子句柄
) Ellipse ( dc, x - 5, y - 5, x + 5, y + 5
) DeleteObject ( 刷子句柄
) DeleteObject ( 画笔句柄
) 马桶.x = x
马桶.y = y
输出调试文本 ( “马桶颜色:” +
到文本 ( color
) )
屁股定理 ( )
可以看到“板凳”的Y轴从140开始的,因为通常“板登”都在棋子上方
找的“板凳”是“板凳”的最上面的一个点的坐标,并且画个实心圆,方便调试
找到的坐标也记录下来
棋子、板凳 坐标识别界面图如下
坐标识别界面
可以看到棋子的底部有个红色的实心圆显示找到的坐标
板凳上也有个绿色的实心圆显示坐标(板凳的绿色圆在板凳中间偏上是因为我识别的时候是识别到顶部的,然后我在代码中把板凳的Y轴+30个像素,因为要取板凳中间的坐标的算法还没想出来,比较麻烦,所以就只取了一个顶部的坐标,然后下移30个像素,像小板凳啥的30个刚好)
其实找板凳的颜色只有上面两个判断,后来分数多了,背景色不断变化,就有添加了一个固定的颜色
上面棋子和板凳的坐标找到了,那么进入“勾股定理”(其实我小学没毕业,早忘了这东西了,百度重学的)
计算棋子到板凳直线距离代码如下:
变量名 类 型 静态 数组 备 注 x 整数型 y 整数型 平方 双精度小数型 时间 整数型
判断 ( 棋子.x > 马桶.x
) x = 棋子.x - 马桶.x
x = 马桶.x - 棋子.x
y = 棋子.y - 马桶.y 平方 = x × x + y × y
平方 =
求平方根 ( 平方
) 平方 = 平方 ×
到数值 ( 编辑框1.内容
) 时间 =
到整数 ( 平方
) 我要跳高 ( 时间
)
上面求到直线距离为什么要*编辑框的微调呢?
1.大多手机屏幕分辨率不一样,得到的截图尺寸有大小
2.截图的图片加载到图片框是经过缩放的,而且是按比例缩放
3.一般我测试出的按压时间在200-900毫秒之间
也就是得到的直线距离是30的话,要按到300毫秒,那么微调为10
以我的手机和我设置的图片框尺寸,微调在4.8-5.0之间
最后把得到的按压时间传给下一子程序去执行手机按压
如果真 ( 集开始 =
假 ) 返回 ( ) 运行 ( “adb shell input swipe 251 255 380 395 ” +
到文本 ( 时间
) , 真, 1
) 延迟 ( 2000
) 那么我们就开始跳吧 ( )
运行的那段代码是让手机模拟滑动,从什么地方按住滑动到什么地方,最后一个就是滑动的时间(毫秒)
以上自动跳一跳就完了,测试不理想,就加了个手动档,这个简单
按下手动档,取一次手机屏幕到图片框
_图片框1_鼠标左键被按下 逻辑型 横向位置 整数型 纵向位置 整数型 功能键状态 整数型
棋子.x =
取鼠标水平位置 ( ) 棋子.y =
取鼠标垂直位置 ( ) _图片框1_鼠标左键被放开 逻辑型 横向位置 整数型 纵向位置 整数型 功能键状态 整数型
马桶.x =
取鼠标水平位置 ( ) 马桶.y =
取鼠标垂直位置 ( ) 屁股定理 ( )
鼠标在图片框的棋子下按下不放
到板凳的中心位置放开鼠标,就得到了棋子和板凳的坐标
再调用上面写完的“屁股定理()”
之后就是按鼠标,放鼠标了,不需要再按手动档按钮
注:手机开启USB调试和USB安全权限风险较高,请不要乱使用别人的程序!!!!!
附上源码,无模块,无病毒!
跳一跳.e
(80.43 KB, 下载次数: 754)
评分
参与人数 19 好评 +17
精币 +49
收起
理由
Hwak
+ 1
为何不行了?我链接了 可是一直跳,不跳过去 是什么情况
DDSGXQ
+ 1
+ 2
支持开源~!感谢分享
yangyitzzg
+ 1
+ 1
中心点在起始坐标与目的坐标的中心位置,找到起始点可求目标点
Laomao7
+ 1
+ 2
感谢分享,很给力!~
波哥野结衣
+ 1
+ 2
有点麻烦。背景可以匹配容差。从上到下找到第一个颜色就是起点。然后勾股定理就OK了
现代大虾
+ 1
支持开源~!感谢分享
西蒙
+ 1
+ 2
支持开源~!感谢分享
污师
+ 1
+ 2
因为要用xp的原因,又重新降级回来了
傲娇土豆
+ 1
这么厉害!必须给个红包鼓励下~
fnp902003
+ 1
+ 2
支持开源~!感谢分享
BBBl
+ 1
+ 2
在此留名,以后多多交流哦~
薄荷草
+ 1
+ 1
感谢分享,很给力!~
峰生水起之林
+ 1
+ 1
支持开源~!感谢分享
铅笔刀
+ 1
+ 3
新技能已get√
大飛
+ 1
+ 5
有心了
一瓶矿泉水
+ 1
+ 2
难得有人分享图文教程了,赞一个
Decimal
+ 1
+ 8
新技能已get√
林中道士
+ 1
+ 2
此处应该有鼓励~
胆小的老虎
+ 1
+ 10
感谢发布原创作品,精易因你更精彩!
查看全部评分