接上一篇:Python解《十滴水》算法
先看个演示视频,建议超清全屏看。https://v.youku.com/v_show/id_XNTgyMzU2NTA4.html
自动点击使用了AutoPy库,AutoPy是一个简单跨平台的Python GUI工具包,可以控制鼠标,键盘,匹配颜色和屏幕上的位图。使用纯ANSI C编写而成,可运行在Mac OS X、Windows和X11上。
GitHub地址:https://github.com/msanders/autopy
API帮助文档:http://www.autopy.org/documentation/api-reference/index.html
虽然介绍说是跨平台,但是从Mac OS X 10.6之后开始,Mac系统就禁用了不少API,作者也停止了维护,所以Mac版本用不了了,只能用Windows虚拟机进行测试。
辅助工具制作过程如下:
一、定位游戏的位置
因为要通过屏幕取色的方法来获取水滴数,所以首先要知道游戏在屏幕上的位置。
用屏幕取色工具可以发现,游戏边框的颜色(#CFDFEB)和其它颜色不同,所以可以通过查找游戏边框的颜色的方法来定位:
因为屏幕的坐标原点在屏幕左上角,所以可以把浏览器移到屏幕左上角,竖直方向在屏幕垂直居中,搜索游戏边框的代码如下:
1 | #通过游戏边框的颜色获取游戏边框的位置 |
二、确定格子边距
装水滴的格子边缘与游戏边框的距离是固定的,用图片编辑工具可以很方便地测量出格子边缘与游戏边框水平相差35像素,竖直相差20像素。
顺便测量出每个格子的大小是60*60像素。
三、判断某个点是不是绿色
因为水滴是半透明的,会和背景颜色混在一起,所以不能判断一个点的颜色是不是等于某种绿色。
用屏幕取色工具观察颜色的规律,很快就能得出一个结论:“如果一个点的颜色的r值小于0x70,并且g值大于0XA0,就表示该点是绿色。”这只是一个大概的范围,比如r小于0x80也是可以的。
四、获取每个格子的水滴数
因为水滴是绿色的,可以很容易区分开水滴和背景的颜色,再找出4种水滴不重叠的地方:
把4种水滴的相对位置的图拼在一起,然后在每种水滴不重叠的地方随便找1个坐标点,分别用来标识4种水滴。
程序首先判断(35,55)处是不是绿色,是的话就说明该格子有4滴水,不是就判断(30,5)是不是绿色,是的话就说明该格子有3滴水……如果4个点都不是绿色,那么该格子就有0滴水:
1 | #获取某个格子上的水滴数 |
五、移动鼠标点击格子
要把格子的坐标转化为屏幕坐标,再移动鼠标指针到该位置单击左键:
1 | #鼠标点击某个格子 |