java吧 关注:1,258,355贴子:12,751,812

回复:自动扫雷机完成过程详解

只看楼主收藏回复



这样我们的预处理就完成了


IP属地:江苏19楼2016-04-29 13:40
回复
    手动玩扫雷都不会的路过


    来自Android客户端21楼2016-04-29 13:58
    收起回复
      广告
      立即查看
      将这个特征值代替之前的二维数组完整数据,可以将特征值的计算量从144缩短为4个。这样汉明距离的计算速度提高了不止10倍。不过到这里还不算完全成功,在实际使用中,我又发现,由于人为坐标测量的误差和裁剪压缩的误差,这4个值仍然不能保证数字的准确识别。因为有可能图像偏差了一个像素,导致了交叉点的个数发生了变化。也说明目前的训练集特征值之间的距离还不够分散,导致很小的误差就会识别错误。如下是我这里的训练集特征值数据
      #1:1 1 1 1
      #2:2 3 1 1
      #3:3 1 1 1
      #4:2 1 2 1
      #5:3 2 1 1
      #6:3 3 1 2
      #7:2 2 1 1
      #8:3 3 2 2
      从上述数据可以观察出,最容易出现混淆的就是1 和3。1和4。6和8这些数字之间。因为这几组特征值之间的差距也只有一个数字的误差。所以,在这个特征值的基础上,我们需要增加特征值的差异性。而图像的形状是一个非常好的差异。于是我尝试使用像素点的分布来构建特征值。以图像的中心为原点构造坐标系,统计出4个象限的有效数据点个数,然后把4个象限的个数排序。返回类似1234这样的数字。这样,我们就获得了一个描述图像形状的特征值,碰巧,这个特征值可以很好将13,14,68这些数字区分开来。


      IP属地:江苏23楼2016-04-29 14:19
      回复
        以上,数字图像识别就已经搞定。至于空格和0以及雷的识别,我只做了空格和0的识别。当出现雷和对话框这种无法识别的图片时,我的程序也正好会中断,正好游戏也成功或者失败了,所以雷的识别我没有特别处理。0和空格在进行二值化处理以后,我们得到的数据基本上全部为1.因为这两种图片里面没有出现明显的文字。因此这里我们识别到是0和空格时,可以使用灰度的大小或者颜色来判断。(0的颜色和灰度都比空格要浅,空格的颜色是蓝色)


        IP属地:江苏25楼2016-04-29 14:28
        回复
          现在,我们已经搞定了数字的识别,只需要寻找可以控制鼠标单击的api就可以了。python的我是百度来的,java可以使用Robot类。最终重写的单击方法伪代码如下:


          IP属地:江苏26楼2016-04-29 14:30
          回复
            召唤神龙
            @不
            @dearmite
            @dtph007
            @夜枫w若水
            @cao19920425
            @鸡生瑜猴生亮


            IP属地:江苏27楼2016-04-29 14:33
            回复
              IP属地:江苏28楼2016-04-29 14:34
              收起回复
                完成以上所有工作,我们的扫雷机就完成了。至于中间各种报错,卡死,我是不负责的。所以一定确保读取图片和单击方法能够可靠的退出。最后附上一张扫雷机的结果,请无视那可怜的胜率(拜无数次的1/2以及各种识别失败导致的无限循环所赐)


                IP属地:江苏29楼2016-04-29 14:39
                回复
                  广告
                  立即查看
                  少年,这么厉害,跟我混吧


                  32楼2016-04-29 15:13
                  收起回复
                    还真的就是这个人。
                    我对于,一些常规的都不会的人,就敢于向全世界游戏行业,叫嚣的,
                    还真的是没啥感冒。。。
                    你也别没事@我了。
                    这叫啥个事?
                    不会点阵识别的时候,敢于向全世界的游戏叫嚣,
                    现在看了这个了,
                    反而成了小学生了。。
                    这不是灭杀大神了。。
                    罪过。罪过。。


                    IP属地:广东33楼2016-04-29 15:18
                    收起回复
                      如果别人非要认为自己的阵营和我对立,那也没有办法。对于这些把我当做敌人的人,即使我尊重他们表达的权利,也要用行动干死他们。别bb,不服solo


                      IP属地:江苏34楼2016-04-29 15:33
                      收起回复
                        已收藏,有时间看


                        IP属地:山东来自iPhone客户端35楼2016-04-29 15:44
                        回复
                          佩服,竟然在java吧能看到这样的帖子


                          IP属地:江苏36楼2016-04-29 17:47
                          回复
                            求做个炉石脚本


                            IP属地:浙江38楼2016-04-29 19:03
                            收起回复