本文实例讲述了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程序设计有所帮助。

时间: 2015-07-22

python扫雷脚本_Python自动扫雷实现方法相关推荐

  1. python写扫雷脚本_Python自动扫雷实现方法

    本文实例讲述了Python自动扫雷实现方法.分享给大家供大家参考.具体如下: #pyWinmineCrack.py # coding: utf-8 import win32gui import win ...

  2. python抢红包脚本_Python自动抢视频红包,仅供学习!

    本文来源于公众号: AirPyt hon 1 目 标 场 景 如今短视频横行的时代,以某短视频为首的,背后依靠着强大的资金后盾,疯狂地对平台用户进行红包轰炸. 与传统的红包不一样,视频红包包含位置的不 ...

  3. python刷票脚本_python自动刷票脚本(在不封IP的情况下)

    # -*- coding:UTF-8 -*- from selenium import webdriver from selenium.common.exceptions import NoSuchE ...

  4. unity应用实例——扫雷游戏(自动扫雷、人工布雷)

    最近用Unity做了一个简单的扫雷小游戏,可以实现电脑自动扫雷.人工布雷等功能,效果图如下. 在游戏的任何时间按下T键后,电脑会自动进行游戏,直到游戏结束.按下B键后可以通过鼠标点击埋雷. 项目一共有 ...

  5. python tab键自动补全_设置python中TAB键自动补全方法

    设置python中TAB键自动补全方法 一.创建自动补全脚本如下: vi /tmp/python/tab.py #!/usr/bin/python # python tab file import s ...

  6. 在Windows上双击运行Python程序不会自动退出的方法

    文章目录 在Windows上双击运行Python程序不会自动退出的方法 前言 将python.exe添加到环境变量中 一个Python程序例子 双击运行Python程序报错 双击运行Windows C ...

  7. python自动扫雷_Python自动扫雷实现方法

    Python自动扫雷实现方法 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python自动扫雷实现方法.txt ] (友情提示:右键点上行txt文档名-> ...

  8. 什么是python自动化脚本_python自动化框架脚本

    # 在写测试类以及测试用例时要规定一个命名习惯, # 一般测试类可以以Test开头,也可以以Test结尾. # 测试用例一般是以test开头. # 调用unittest包 # 调用unittest框架 ...

  9. python自动化代码生成_python 自动生成C++代码 (代码生成器)

    Python代码自动生成方法(代码生成器)遇到这种事在工作遇到问题,你需要写很多c++基础数据库类,但这些类是一样的,只不过是添加,删除,修改并检查.如果你手动编写代码,它是费力而容易出错;它可以很容 ...

最新文章

  1. 用NumPy genfromtxt导入数据
  2. elasticsearch term match multi_match区别
  3. SharePoint 2007 Web Content Management 性能优化系列 前言
  4. 【通知】有三AI固态硬盘最后一次补货,再增3套视频!
  5. Tomcat tomcat-users.xml详解
  6. SQL重复记录查询(转载)
  7. python找零钱问题_Python基于回溯法子集树模板解决找零问题示例
  8. 为了帮粉丝完成毕业设计,我发现了一款私活神器
  9. anaconda激活python_Anaconda使用conda activate激活环境出错(待完全解决)2018-06-09
  10. javabean和java类_java对象 POJO和JavaBean的区别
  11. CodeSmith介绍
  12. Win10客户端 ssh 远程连接 win server 2008 R2服务器
  13. CentOS下Nginx+fastcgi+python3搭建web.py服务环境
  14. vip163邮箱手机版登陆入口是哪个?vip邮箱163实用技巧
  15. (五)2.自动控制原理 Frequency Responce Methods 之 Nyquist曲线
  16. git push如何强制提交
  17. 【转】台湾教授-如何阅读科研论文
  18. Weex和Web开发体验的异同
  19. AI视频插帧 附带『视频插帧』工具
  20. 基于Python的五子棋人机对战

热门文章

  1. 放大分析双缓冲类时间计算问题
  2. latex algorithm 引用格式错误
  3. JavaScript 比较和逻辑运算符
  4. 实现简单render函数
  5. 【BZOJ 1202】 [HNOI2005]狡猾的商人
  6. 03-linux查询端口
  7. Vue模板 script部分
  8. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django
  9. Web前端开发好学吗?谈谈一位学姐的前端工程师之路
  10. springmvc生成注册验证码