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读写文件方法总结
Jun 09 Python
简单介绍Python中的几种数据类型
Jan 02 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
Python 多进程和数据传递的理解
Oct 09 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
python进行两个表格对比的方法
Jun 27 Python
详解windows python3.7安装numpy问题的解决方法
Aug 13 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
解决Djang2.0.1中的reverse导入失败的问题
Aug 16 Python
Jupyter加载文件的实现方法
Apr 14 Python
解决python便携版无法直接运行py文件的问题
Sep 01 Python
在python中实现导入一个需要传参的模块
May 12 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
再次研究下cache_lite
2007/02/14 PHP
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
php实现图形显示Ip地址的代码及注释
2014/01/20 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
自己封装的常用javascript函数分享
2015/01/07 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
微信小程序中顶部导航栏的实现代码
2017/03/30 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
python并发编程之线程实例解析
2017/12/27 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
Python 虚拟空间的使用代码详解
2019/06/10 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
jupyter 导入csv文件方式
2020/04/21 Python
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
光盘行动倡议书
2014/02/02 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
授权收款委托书
2014/09/23 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
2014年医生工作总结
2014/11/21 职场文书
总账会计岗位职责
2015/04/02 职场文书
Django集成富文本编辑器summernote的实现步骤
2021/05/31 Python
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python