Python自动扫雷实现方法


Posted in Python onJuly 25, 2015

本文实例讲述了Python自动扫雷实现方法。分享给大家供大家参考。具体如下:

#pyWinmineCrack.py
# coding: utf-8
import win32gui
import win32process
import win32con
import win32api
from ctypes import *
#雷区最大行列数
MAX_ROWS = 24
MAX_COLUMNS = 30
#雷区格子在窗体上的起始坐标及每个格子的宽度
MINE_BEGIN_X = 0xC
MINE_BEGIN_Y = 0x37
MINE_GRID_WIDTH = 0x10
MINE_GRID_HEIGHT = 0x10
#边框、无雷、有雷的内部表示
MINE_BOARDER = 0x10
MINE_SAFE = 0x0F
MINE_DANGER = 0x8F
#“雷区”在 扫雷程序中的存储地址
BOARD_ADDR = 0x1005340
class SMineCtrl(Structure):
 _fields_ = [("hWnd", c_uint),
  ("board", (c_byte * (MAX_COLUMNS + 2)) * (MAX_ROWS + 2)),
  ("rows", c_byte),
  ("columns", c_byte)
 ]
kernel32 = windll.LoadLibrary("kernel32.dll")
ReadProcessMemory = kernel32.ReadProcessMemory
WriteProcessMemory = kernel32.WriteProcessMemory
OpenProcess = kernel32.OpenProcess
ctrlData = SMineCtrl()
#找到扫雷程序并打开对应进程
try:
 ctrlData.hWnd = win32gui.FindWindow("扫雷", "扫雷")
except:
 win32api.MessageBox(0, "请先运行扫雷程序", "错误!", win32con.MB_ICONERROR)
 exit(0)
hreadID, processID = win32process.GetWindowThreadProcessId(ctrlData.hWnd)
hProc = OpenProcess(win32con.PROCESS_ALL_ACCESS, 0, processID)
#读取雷区数据
bytesRead = c_ulong(0)
ReadProcessMemory(hProc, BOARD_ADDR, byref(ctrlData.board), SMineCtrl.board.size, byref(bytesRead))
if(bytesRead.value != SMineCtrl.board.size):
 str = "ReadProcessMemory error, only read ", bytesRead.value, " should read ", SMineCtrl.board.size
 win32api.MessageBox(0, str, "错误!", win32con.MB_ICONERROR)
 exit()
#获取本次程序雷区的实际大小
ctrlData.rows = 0
ctrlData.columns = 0
for i in range(0, MAX_COLUMNS + 2):
 if MINE_BOARDER == ctrlData.board[0]:
 ctrlData.columns += 1
 else :
 break
ctrlData.columns -= 2 
for i in range(1, MAX_ROWS + 1):
 if MINE_BOARDER != ctrlData.board[1]:
 ctrlData.rows += 1
 else:
 break
#模拟鼠标点击动作
for i in range(0, ctrlData.rows):
 for j in range(0, ctrlData.columns):
 if MINE_SAFE == ctrlData.board[i + 1][j + 1]:
  win32api.SendMessage(ctrlData.hWnd,
   win32con.WM_LBUTTONDOWN,
   win32con.MK_LBUTTON,
   win32api.MAKELONG(MINE_BEGIN_X + MINE_GRID_WIDTH * j + MINE_GRID_WIDTH / 2,
   MINE_BEGIN_Y + MINE_GRID_HEIGHT * i + MINE_GRID_HEIGHT / 2))
win32api.SendMessage(ctrlData.hWnd,
   win32con.WM_LBUTTONUP,
win32con.MK_LBUTTON,
   win32api.MAKELONG(MINE_BEGIN_X + MINE_GRID_WIDTH * j + MINE_GRID_WIDTH / 2,
   MINE_BEGIN_Y + MINE_GRID_HEIGHT * i + MINE_GRID_HEIGHT / 2))
#搞定!
win32api.MessageBox(0, "搞定!", "信息", win32con.MB_ICONINFORMATION)

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python 字符串中的字符倒转
Sep 06 Python
Python检测网站链接是否已存在
Apr 07 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
Python 含参构造函数实例详解
May 25 Python
python下解压缩zip文件并删除文件的实例
Apr 24 Python
浅析Python pandas模块输出每行中间省略号问题
Jul 03 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
Python中无限循环需要什么条件
May 27 Python
Keras实现支持masking的Flatten层代码
Jun 16 Python
如何解决python多种版本冲突问题
Oct 13 Python
Python导出DBF文件到Excel的方法
Jul 25 #Python
Python实现的RSS阅读器实例
Jul 25 #Python
Python获取央视节目单的实现代码
Jul 25 #Python
Python实现将DOC文档转换为PDF的方法
Jul 25 #Python
将Django框架和遗留的Web应用集成的方法
Jul 24 #Python
将Python的Django框架与认证系统整合的方法
Jul 24 #Python
Django与遗留的数据库整合的方法指南
Jul 24 #Python
You might like
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
有关PHP中MVC的开发经验分享
2012/05/17 PHP
PHP无限分类(树形类)的深入分析
2013/06/02 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
2014/03/28 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
简单的Python抓taobao图片爬虫
2014/10/26 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
Python实现Dijkstra算法
2018/10/17 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
python字符串查找函数的用法详解
2019/07/08 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
信息管理专业学生自荐信格式
2013/09/22 职场文书
人力资源专业推荐信
2013/11/29 职场文书
高中毕业生生活的自我评价
2013/12/08 职场文书
安全生产月标语
2014/10/07 职场文书
琅琊山导游词
2015/02/05 职场文书