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命令行交互提示符的方法
Jan 14 Python
深入理解python中的闭包和装饰器
Jun 12 Python
python版简单工厂模式
Oct 16 Python
微信跳一跳python自动代码解读1.0
Jan 12 Python
python实现数据写入excel表格
Mar 25 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
Python zip函数打包元素实例解析
Dec 11 Python
Pytest框架之fixture的详细使用教程
Apr 07 Python
Python xlrd模块导入过程及常用操作
Jun 10 Python
Django封装交互接口代码
Jul 12 Python
Java Unsafe类实现原理及测试代码
Sep 15 Python
在pycharm创建scrapy项目的实现步骤
Dec 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
php设计模式 Singleton(单例模式)
2011/06/26 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
PHP设计模式之委托模式定义与用法简单示例
2018/08/13 PHP
PHP函数积累总结
2019/03/19 PHP
php输出形式实例整理
2020/05/05 PHP
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
网站页面自动跳转实现方法PHP、JSP(下)
2010/08/01 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
Python解惑之整数比较详解
2017/04/24 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
Fossil加拿大官网:化石手表、手袋、首饰及配饰
2019/04/23 全球购物
计算机应用职专应届生求职信
2013/11/12 职场文书
企业员工培训感言
2014/02/26 职场文书
大学生就业意向书范文
2014/04/01 职场文书
父母寄语大全
2014/04/12 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书
方法汇总:Python 安装第三方库常用
2022/04/26 Python