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实现简单状态框架的方法
Mar 19 Python
基python实现多线程网页爬虫
Sep 06 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
对python中的for循环和range内置函数详解
Apr 17 Python
将python代码和注释分离的方法
Apr 21 Python
在python中使用with打开多个文件的方法
Jan 07 Python
python递归法解决棋盘分割问题
Jul 17 Python
python和php哪个更适合写爬虫
Jun 22 Python
详解python程序中的多任务
Sep 16 Python
如何通过Python实现RabbitMQ延迟队列
Nov 28 Python
python实现代码审查自动回复消息
Feb 01 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
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
javascript事件问题
2009/09/05 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
详解a++和++a的区别
2017/08/30 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
python的random模块及加权随机算法的python实现方法
2017/01/04 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
个人教师自我评价范文
2013/12/02 职场文书
告诉你怎样写创业计划书
2014/01/27 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
音乐学专业求职信
2014/07/22 职场文书
统计学教授推荐信
2014/09/18 职场文书
单位租房协议书样本
2014/10/30 职场文书
颐和园英文导游词
2015/01/30 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
倡议书的格式写法
2015/04/28 职场文书
开学第一天的感想
2015/08/10 职场文书
python爬取某网站原图作为壁纸
2021/06/02 Python
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers