用Python实现自动扫雷

用Python+OpenCV实现了自动扫雷,突破世界记录,我们先来看一下效果吧。


中级 - 0.74秒 3BV/S=60.81
相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件),更是有不少人曾听说过中国雷圣,也是中国扫雷第一、世界综合排名第二的郭蔚嘉的顶顶大名。扫雷作为一款在Windows9x时代就已经诞生的经典游戏,从过去到现在依然都有着它独特的魅力:快节奏高精准的鼠标操作要求、快速的反应能力、刷新纪录的快感,这些都是扫雷给雷友们带来的、只属于扫雷的独一无二的兴奋点。
 0x00 准备
准备动手制作一套扫雷自动化软件之前,你需要准备如下一些工具/软件/环境
- 开发环境

  1. Python3 环境 - 推荐3.6或者以上 [更加推荐Anaconda3,以下很多依赖库无需安装]
  2. numpy依赖库 [如有Anaconda则无需安装]
  3. PIL依赖库 [如有Anaconda则无需安装]
  4. opencv-python
  5. win32gui、win32api依赖库
  6. 支持Python的IDE [可选,如果你能忍受用文本编辑器写程序也可以]

- 扫雷软件
· Minesweeper Arbiter(必须使用MS-Arbiter来进行扫雷!)
好啦,那么我们的准备工作已经全部完成了!让我们开始吧~
 0x01 实现思路
在去做一件事情之前最重要的是什么? 是将要做的这件事情在心中搭建一个步骤框架。 只有这样,才能保证在去做这件事的过程中,尽可能的做到深思熟虑,使得最终有个好的结果。 我们写程序也要尽可能做到在正式开始开发之前,在心中有个大致的思路。
对于本项目而言,大致的开发过程是这样的:

  1. 完成窗体内容截取部分
  2. 完成雷块分割部分
  3. 完成雷块类型识别部分
  4. 完成扫雷算法

好啦,既然我们有了个思路,那就撸起袖子大力干!
- 01 窗体截取
其实对于本项目而言,窗体截取是一个逻辑上简单,实现起来却相当麻烦的部分,而且还是必不可少的部分。 我们通过Spy++得到了以下两点信息:

class_name = "TMain"

title_name = "Minesweeper Arbiter "
  • ms_arbiter.exe的主窗体类别为"TMain"
  • ms_arbiter.exe的主窗体名称为"Minesweeper Arbiter "

注意到了么?主窗体的名称后面有个空格。正是这个空格让笔者困扰了一会儿,只有加上这个空格,win32gui才能够正常的获取到窗体的句柄。
本项目采用了win32gui来获取窗体的位置信息,具体代码如下:

hwnd = win32gui.FindWindow(class_name, title_name)

if hwnd:

left, top, right, bottom = win32gui.GetWindowRect(hwnd)



通过以上代码,我们得到了窗体相对于整块屏幕的位置。之后我们需要通过PIL来进行扫雷界面的棋盘截取。
我们需要先导入PIL库

from PIL import ImageGrab

然后进行具体的操作。

left += 15

top += 101

right -= 15

bottom -= 4
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值