"大家来找茬"是我小时候在家里家里人都喜欢玩的一款休闲游戏,因为这游戏可以考验人的眼力和反应能力才不是因为电脑垃圾玩不了其他大作游戏(╯‵□′)╯︵┻━┻
最近了解到了一个特别牛逼的python第三方库———pywin32库,这个库是超级牛逼,打个比方,可以根据你的代码,大到鼠标操作,键盘操作,小到弹窗的声音,都能做到。不过网上关于该库的教程太少了,找不到专门的python文档来看。
PIL库的文档也少之又少。
本人代码还没写完,而且代码很杂,我都有点晕了。
我说下我做这个辅助的大体思路吧。
Sade,ikuzo(๑•̀ㅂ•́)و✧
1、屏幕抓取。
2、图片对比,找出不同之处。
3、找到不同之处的坐标值,利用win32api的mouse_event进行单击操作。
怎么样,是不是很简单呢?简单个P(对我来说)
我来再说点详细方法吧。
首先就是屏幕抓取,要用PIL库里面的ImageGrab进行抓取,抓取还要对准找茬的两张图片,找这个图片位置的像素用的截图软件,截的我眼睛都快瞎了,一直对像素对了半天,图片才勉强对上。
图片对比以及处理:(之前我是准备用PIL库的image.getdata()对比RGBA值的不同,每一行就是图片每一行像素点的RGBA值,然后判断出不同位置的坐标,利用win32api点击该坐标并进行标记,在下次点击前进行判断,如果在上一个标记的多少像素之内就不能进行点击(防止鼠标的多次点击同一块不同区内发生错误)。)后面发现有一个ImageChops.difference方法可以直接对两张图片进行对比,可以直接返回一张差异图片。这就要方便多了。在对比图片后就可以查看不同之处了。差异图片将会把差异高亮出来,其他的地方全部标黑。
比如:
其实辅助做到这里就可以了哟(´・ω・`),既然已经找到了不同之处,就可以靠鼠标点击了。
但我想实现自动点击啊,不然pywin32没有用武之地啊
找坐标值(暂未实现):这个游戏用了反作弊,原本两个图片就有一些色差,只是肉眼不好分辨(其实仔细看也看得出来),两个图片还分别增加了噪点,虽然我们看上面对比后的图(就是几乎全黑的那个图片)没什么毛病,但其实仔细看图还是可以看到一些轮廓(不知道上传的图片压缩了没有,反正我的是看得出来的)。如果觉得不够明显,我这里有另外一个二值化的图片(不是上面对比的二值化图片):
这是另外一次测试对比图二值化后的结果,密集点的地方就是不同之处,但观察可以看到其他的地方(几乎全屏)都是点,这些就是图片的噪点对比出的结果。我是打算通过像素分析周围白点大于多少就判断为点击处(看目前这个样子是实现不了的),本人正在找去除噪点的方法。(遍历像素:判断周围多少像素内的白点大于多少,大于多少就判断为此处为应该点击的地方。有这种思路,但不知道如何实现,文档不好找鸭。)
容我想想(・ω・)
(当然,方法不一定只有我这种,但我只想到这种方法。)