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中使用logging模块代替print(logging简明指南)
Jul 09 Python
Python中字典的基本知识初步介绍
May 21 Python
视觉直观感受若干常用排序算法
Apr 13 Python
Python操作MongoDB数据库的方法示例
Jan 04 Python
Python iter()函数用法实例分析
Mar 17 Python
python根据url地址下载小文件的实例
Dec 18 Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 Python
关于Python内存分配时的小秘密分享
Sep 05 Python
详解Python IO口多路复用
Jun 17 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
python中pyplot基础图标函数整理
Nov 10 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实现163邮箱自动发送邮件
2016/03/29 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
Vue实现滑动拼图验证码功能
2019/09/15 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
python 快速排序代码
2009/11/23 Python
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
Python WSGI的深入理解
2018/08/01 Python
python面试题之列表声明实例分析
2019/07/08 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
Python 创建守护进程的示例
2020/09/29 Python
Django model class Meta原理解析
2020/11/14 Python
Python tkinter实现日期选择器
2021/02/22 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
html5弹跳球示例代码
2013/07/23 HTML / CSS
大学生个人事迹材料
2014/01/21 职场文书
关于安全的标语
2014/06/10 职场文书
入党函调证明材料
2015/06/19 职场文书
活动新闻稿范文
2015/07/17 职场文书
导游词之河北野三坡
2019/12/11 职场文书
python如何读取.mtx文件
2021/04/22 Python
一条 SQL 语句执行过程
2022/03/17 MySQL