学生时代,曾经我数次玩过Windows扫雷小游戏。对于高级盘,想成功完成一盘扫雷难度还是不小了。经常在猜测雷的时候猜错暴雷,懊恼无限。现在让我编个自动扫雷程序对付它,一雪前耻。
自动扫雷程序涉及图形识别、鼠标键盘操作、搜索算法等多个方面,属于目前学习案例中最为复杂的程序了。
1、扫雷游戏简介
《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。
2、算法
本文算法参考了ztxz16的“最强扫雷AI算法详解+源码分享”[1]。文中没有涉及图形识别和鼠标、键盘操作部分介绍,我自己摸索了一下,也在这里分享经验给大家。
2.1 使用到的python模块
本案例涉及Windows和图像操作,使用到以下第三方模块:
import numpy as np;
from PIL import ImageGrab;
import win32api as api;
import win32gui as gui;
import win32con as con;
import time;
其中:
PIL是图像处理模块,主要用于屏幕局部抓屏,将扫雷窗口作为一个图像抓取到程序中。
Numpy是科学计算中常用的数组管理模块,与scipy一起可以实现类似Matlab的矩阵计算和数值处理功能。在本案例中与PIL配合读取图形的像素数据。
Win32封装了windows平台的许多功能,本案例主要用到了窗体操作、鼠标和键盘操作。
Time,本案例中用于短时等待扫雷软件响应自动的鼠标、键盘操作。
PIL、Numpy和Win32模块在python安装包中没有,需要自行下载安装,命令如下。具体方法参加python手册。
py -m pip install numpy