破世界纪录了!用Python实现自动扫雷!

本文介绍了一种使用Python和OpenCV实现的自动扫雷方法,该方法在0.74秒内完成了3BV/S=60.81的记录。文章详细讲解了开发过程,包括窗体截取、雷块分割、雷块识别和扫雷算法的实现,揭示了高效自动化扫雷的技术细节。
摘要由CSDN通过智能技术生成

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

中级 - 0.74秒 3BV/S=60.81

相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件),更是有不少人曾听说过中国雷圣,也是中国扫雷第一、世界综合排名第二的郭蔚嘉的顶顶大名。

扫雷作为一款在Windows9x时代就已经诞生的经典游戏,从过去到现在依然都有着它独特的魅力:快节奏高精准的鼠标操作要求、快速的反应能力、刷新纪录的快感,这些都是扫雷给雷友们带来的、只属于扫雷的独一无二的兴奋点。

1.准备

准备动手制作一套扫雷自动化软件之前,你需要准备如下一些工具/软件/环境

开发环境

  • Python3 环境 - 推荐3.6或者以上 [更加推荐Anaconda3,以下很多依赖-库无需安装]

  • Numpy依赖库 [如有Anaconda则无需安装]

  • PIL依赖库 [如有Anaconda则无需安装]

  • Opencv-python

  • Win32gui、win32api依赖库

  • 支持Python的IDE [可选,如果你能忍受用文本编辑器写程序也可以]

扫雷软件

Minesweeper Arbiter(必须使用MS-Arbiter来进行扫雷!)

好啦,那么我们的准备工作已经全部完成了!让我们开始吧~

2.实现思路

在去做一件事情之前最重要的是什么?是将要做的这件事情在心中搭建一个步骤框架。只有这样,才能保证在去做这件事的过程中,尽可能的做到深思熟虑,使得最终有个好的结果。我们写程序也要尽可能做到在正式开始开发之前,在心中有个大致的思路。

对于本项目而言,大致的开发过程是这样的:

  • 完成窗体内容截取部分

  • 完成雷块分割部分

  • 完成雷块类型识别部分

  • 完成扫雷算法

好啦,既然我们有了个思路,那就撸起袖子大力干!

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 = win
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值