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按照多个字符对字符串进行分割的方法
Mar 17 Python
python实现各进制转换的总结大全
Jun 18 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
Python元组拆包和具名元组解析实例详解
Mar 26 Python
Python日志模块logging基本用法分析
Aug 23 Python
5分钟 Pipenv 上手指南
Dec 20 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 Python
python中提高pip install速度
Feb 14 Python
FP-growth算法发现频繁项集——构建FP树
Jun 24 Python
python库Tsmoothie模块数据平滑化异常点抓取
Jun 10 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
Jul 23 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
多重?l件?合查?(二)
2006/10/09 PHP
PHP 采集程序原理分析篇
2010/03/05 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
php模板引擎技术简单实现
2016/03/15 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
js 文件引入实现代码
2010/04/23 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
JS实现的雪花飘落特效示例
2019/12/03 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python实现多进程共享数据的方法分析
2017/12/04 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
django迁移文件migrations的实现
2020/03/31 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
Html5页面二次分享的实现
2018/07/30 HTML / CSS
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
食品厂厂长岗位职责
2014/01/30 职场文书
先进集体事迹材料
2014/02/17 职场文书
道路建设实施方案
2014/03/18 职场文书
代办委托书怎么写
2014/08/01 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
JavaScript 原型与原型链详情
2021/11/02 Javascript
Python Numpy库的超详细教程
2022/04/06 Python