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实现倒计时的示例
Feb 14 Python
理解Python中的类与实例
Apr 27 Python
使用python实现接口的方法
Jul 07 Python
Python3.X 线程中信号量的使用方法示例
Jul 24 Python
Python3实现发送QQ邮件功能(html)
Dec 15 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
python实现公司年会抽奖程序
Jan 22 Python
Python如何实现小程序 无限求和平均
Feb 18 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
Apr 12 Python
python爬虫请求头设置代码
Jul 28 Python
在 Python 中使用 MQTT的方法
Aug 18 Python
Python tkinter制作单机五子棋游戏
Sep 14 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
通过html表格发电子邮件
2006/10/09 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
thinkPHP5项目中实现QQ第三方登录功能
2017/10/20 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
python求素数示例分享
2014/02/16 Python
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
python使用正则表达式提取网页URL的方法
2015/05/26 Python
Python生成随机数组的方法小结
2017/04/15 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
pycharm配置git(图文教程)
2019/08/16 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
李宁官方网店:中国运动品牌
2017/11/02 全球购物
怎样声明子类
2013/07/02 面试题
Why do we need Unit test
2013/01/03 面试题
浅谈react路由传参的几种方式
2021/03/23 Javascript
工程业务员工作职责
2013/12/07 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
英文求职信范文
2014/05/23 职场文书
2014年教师节寄语
2014/08/11 职场文书
教师师德师风整改措施
2014/10/24 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
SQL SERVER存储过程用法详解
2022/02/24 SQL Server