用C++和android模拟器实现《跳一跳》自动刷分


用C++和android模拟器实现《跳一跳》自动刷分

 

一、人物定位

  人物的定位比较简单,因为颜色是固定的,用颜色分割基本能比较准确的定位。

  基本的做法就是先把图像转到HSV颜色空间,再通过简单的阈值分割,最后用形态学运算去除错误的点。计算过程示图如下。

 

 

二、落点定位

  落点都是很规则的菱形和椭圆,而且边缘非常明显,所以可以用模板匹配的方法来准确的定位。因为匹配的目标相对简单,可以用chamfer matching的简化版来实现。

  通过实验,下图的四个模板可以非常稳定的匹配到大部分落点图上,其中绿色的点为实际计算时取的匹配点。

  计算过程:

    1.计算图像的边缘图,方法有很多种,常用的是canny算子和梯度的方法。

    2.计算距离变换图。

    3.在距离变换图上对所有模板的匹配点进行匹配,选出最优的匹配作为匹配结果,模板的中心点为落点。

     - 因为落点最上部分的边缘基本是图像所有边缘的最高点,所以可以很容易的定位到该点,以该点为模板的起始点可以简化运算;

     - 因为落点不存在旋转变换,所以匹配的参数可以简化为x, y, scale, 分别代办水平位移,垂直位移和尺度变换。

 

  下图是模板评估的公式和计算过程示意图

 

    

 

  
  最后通过人物和落点的定位可以计算出起始点的距离,然后根据距离换算成对应的按压屏幕的时间。

 

 三、输入和输出

 

      输入的图像是通过WINAPI的截屏函数来获得的,首先打开android模拟器并开启跳一跳小程序,然后通过截屏的方式获取;

   输出也是通过WINAPI的模拟鼠标动作的函数,鼠标按下和松开之间休眠的时间就是按压屏幕的时间。

 

 四、测试结果

  

 

  

  

   

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM