python游戏自动化实战--游戏辅助软件冰山后的秘密
文章目录
- 前言
- 游戏辅助常用方法总结
- 连续点击脚本
- 实现思路
- 获取窗口句柄
- 大漠插件
- 坐标获取
- 编写自动化脚本
- 最终效果
- 自动吃符咒
- 实现思路
- 符咒图像截取
- 编写自动化脚本
- 最终效果
- 人物是否移动
- 实现思路
- 编写自动化脚本
- 最终效果
- 血量低自动吃药
- 编写自动化脚本
- 最终效果
- 总结
最终脚本 github:https://github.com/tdx1997tdx/kungfu_script
前言
本文记一次用python制作win10游戏辅助制作的实践,总结一些制作辅助常用的手段。为啥做辅助去了?这要从周末打游戏的时候说起。终于升级到90级了,可以去“考古”了,然而考古的过程枯燥无味,基本上就是重复以下过程:
- 找到相关npc
- 接取任务,放弃任务,直到找到红树林地点的任务
- 传送到红树林,根据任务中坐标找到地图中的相关坐标
- 打怪,掉落宝物
- 重新进入1步骤
可以看到,考古的过程的固定的模式。受到工作中自动化测试的启发,为什么不能将这一过程自动化呢?经过深思熟虑,总结了一下这个过程中可能遇到的难点:
- 由于是3d角色扮演类游戏,并非2d平面游戏,单靠坐标定位无法自动化
- 对于接取任务,放弃任务,直到找到红树林地点的任务这一步,你的辅助如何判断你接到了红树林的任务呢?
- 打怪的过程中如何控制血量控制在健康线上呢?
- 辅助如何判断是否被怪物攻击?正在处于战斗模式?
面对考古出来极品神装与元宝的诱惑,面对游戏辅助背后的秘密,面对摆在面前的“业余界难题”,强烈的好奇心让我踏上探索的征程。
游戏辅助常用方法总结
经过查找资料与探索,要完成这一系列自动化操作,需要用到的技术点有:
- 窗口定位:定位游戏窗口,实现后台操作鼠标键盘。
- 鼠标事件以及键盘事件,模拟用户鼠标和键盘操作。
- 获取窗口内某一按钮的坐标,用于鼠标点击操作。
- 图像识别,获取窗口内某一图像出现的位置坐标,用于定位该图像位置从而用于鼠标点击操作或者判断该图像是否存在。
- 内存读取相关数值,比如血量,蓝条,从而实现某些自动化功能,比如如果血量控制在健康线下就吃药补血。
连续点击脚本
秉着业务驱动技术的思想,我们先从最简单的需求开始。
需求:已知游戏界面如下,想要实现的需求,每隔1s重复打开关闭背包。
红框地方是背包按钮
实现思路
要想实现以上功能,需要以下几步:
- 获取想要操作的窗口句柄
- 定位背包按钮在窗口的相对位置
- 编写自动化脚本
获取窗口句柄
要想实现一边浏览网页一边运行后台脚本,就需要定位游戏所在的窗口句柄,所谓窗口句柄可以理解成窗口的uuid。
要获取窗口句柄值,这边用到了《按键抓抓辅助工具》
将其拖动到指定窗口就可以获取到指定窗口的句柄值。
大漠插件
大漠综合插件(dm.dll)采用vc6.0编写,是一款集前后台,文字识别,图色,键鼠,窗口,内存,DX,Call等功能于一身的综合插件。主要用于按键精灵、简单游、易语言等辅助制作工具,具有识别速度超级快的特点! 采用COM接口编写,适用于所有语言调用。
下载后注册大漠插件,用于python调用
坐标获取
《按键抓抓辅助工具》可以获取窗口内背包的相对坐标
编写自动化脚本
由《按键抓抓辅助工具》得到游戏窗口句柄值为2297008
可以用以下python代码实现
import win32com.client
import time# 窗口句柄值
hwnd = 2297008
# 准备大漠插件
dm = win32com.client.Dispatch('dm.dmsoft')
# 绑定窗口
dm.BindWindow(hwnd, "normal", "windows", "windows", 0)
# 背包坐标
x, y = 841, 751# 封装点击事件
def click(dm, x, y):dm.MoveTo(x, y)dm.LeftClick()while 1:time.sleep(1)click(dm, x, y)
BindWindow,MoveTo,LeftClick方法可以查询大漠文档获取使用方法。
至此hello world需求就已经实现,展示效果如下
最终效果
自动吃符咒
需求:以下是游戏界面,红框是符咒,具有双倍经验的加成,限时1小时,1小时过去后要使用f12快捷键吃符咒。
实现思路
要想实现以上功能,最简单的方法就是sleep 1小时,但是这么实现存在问题就是脚本启动的时候不知道是不是吃了符咒。比较优雅的实现方式是用图像识别的方式实现:
- 监听窗口右侧范围内符咒图标
- 进行图像识别,如果没有识别到符咒图标,就按f12吃符咒
符咒图像截取
《按键抓抓辅助工具》自带图像截取的功能,我们先将符咒图片截取保存下来作为基准图片。
首先需要截取指定窗口
获取到符咒图像后保存
符咒图像就保存下来了
编写自动化脚本
import win32com.client
import time# 窗口句柄值
hwnd = 2297008
# 准备大漠插件
dm = win32com.client.Dispatch('dm.dmsoft')
# 绑定窗口
dm.BindWindow(hwnd, "dx2", "windows", "windows", 0)
# 识别区域
x1, y1, x2, y2 = 800, 180, 1020, 650
# 相似度
sim = 0.9
while 1:time.sleep(0.5)is_ok, x, y = dm.FindPic(x1, y1, x2, y2, 'D:\software\按键抓抓\screen\\fuzhou.bmp', "000000", sim, 0)if is_ok == -1:print("符咒失效")# 按f12dm.KeyPress(123)print("吃符咒")
用到的接口如下:
123是f12的虚拟键码,具体见:https://www.cnblogs.com/del/archive/2007/12/07/987364.html
最终效果
人物是否移动
需求:判断游戏中人物是否移动
实现思路
红框是坐标数值,如果该区域,在指定的时间内(秒),图像数据一直不变,就说明静止,否则就为移动
编写自动化脚本
由《按键抓抓辅助工具》得到游戏坐标区域左上角和右下角坐标为(948, 156),(1017, 169)
import win32com.client
import time# 窗口句柄值
hwnd = 2297008
# 准备大漠插件
dm = win32com.client.Dispatch('dm.dmsoft')
# 绑定窗口
dm.BindWindow(hwnd, "dx2", "windows", "windows", 0)
# 坐标区域
x1, y1, x2, y2 = 948, 156, 1017, 169
while 1:time.sleep(0.1)is_ok = dm.IsDisplayDead(x1, y1, x2, y2, 1)if is_ok == 0:print("移动中")else:print("静止中")
用到的接口如下:
最终效果
血量低自动吃药
需求:判断游戏血量是否健康,如果不健康,自动按f1吃药
这个需求难点就是如何判断血量是否健康,这边使用这种方法实现:
看见游戏左上角血条了吗,假如血条的30%的地方颜色由红色转为灰色,那么我们认为她血量不健康。
另一种方法是使用cheat engine读取血量的内存地址,找到基地址直接读内存,这个难度较高,有兴趣的同学可以读一下这个文章:https://www.cnblogs.com/gd-luojialin/p/7789569.html
编写自动化脚本
import win32com.client
import time# 窗口句柄值
hwnd = 2297008
# 准备大漠插件
dm = win32com.client.Dispatch('dm.dmsoft')
# 绑定窗口
dm.BindWindow(hwnd, "dx2", "windows", "windows", 0)# 是否需要吃药,如果
def is_eat_drug(dm):col = dm.GetColor(107, 65)if col[0] != "6" or col[2] != "3" or col[4] != "3":return Truereturn Falsewhile 1:time.sleep(1)res = is_eat_drug(dm)if res:print("需要吃药了")else:print("血量健康")
如果血量健康,107, 65坐标返回的颜色值为,663f3f,一旦不健康,就不是这个值了。
如何获取某一点的颜色值呢,强大的《按键抓抓辅助工具》就可以解决
最终效果
总结
大漠插件还有很多好玩的功能,具体可以看看文档,这些功能配合多线程就可以弄出强大的自动化辅助工具,想体验的同学可以试试呀!
最终脚本 github:https://github.com/tdx1997tdx/kungfu_script
python游戏自动化实战--游戏辅助软件冰山后的秘密相关推荐
- python 自动化-Python API 自动化实战详解(纯代码)
主要讲如何在公司利用Python 搞API自动化. 1.分层设计思路 dataPool :数据池层,里面有我们需要的各种数据,包括一些公共数据等 config :基础配置 tools : 工具层 co ...
- python ui自动化配置文件,python UI自动化实战记录八:添加配置
添加配置文件写入测试地址等,当环境切换时只需修改配置文件即可. 1 在项目目录下添加文件 config.ini 写入: [Domain] domain = http://test.domain.cn ...
- php selenium模拟登陆,python+selenium自动化实战携带cookies模拟登陆微博
首先获取cookies,使用手机扫码登录斗鱼,然后利用网页cookies保存在本地 有些同学可能会问,这不是相当于自己登录了吗,还模拟什么呢,其实来说这是一次获取cookies可以使用很久 #!/us ...
- postman python request_postman自动化实战总结
Postman实战总结 简介 本次实战内容主要包括如下几点: l 背景介绍 l Postman使用,侧重于自动化实现,基础使用不做介绍 l 可视化Newman介绍 l 框架特色 l 实战中的 ...
- 一个 Python 报表自动化实战案例
本篇文章将带你了解报表自动化的流程,并教你用Python实现工作中的一个报表自动化实战,篇幅较长,建议先收藏,文章具体的目录为: 1.Excel的基本组成 2.一份报表自动化的流程 3.报表自动化实战 ...
- python接口自动化实战(框架)_python接口自动化框架实战
python接口测试的原理,就不解释了,百度一大堆. 先看目录,可能这个框架比较简单,但是麻雀虽小五脏俱全. 各个文件夹下的文件如下: 一.理清思路 我这个自动化框架要实现什么 1.从excel里面提 ...
- 对比Excel,轻松学习 Python 报表自动化实战!
来自小z 欢迎关注 ,专注Python.数据分析.数据挖掘.好玩工具! 这篇文章将带你了解报表自动化的流程,并教你用 Python 实现工作中的一个报表自动化实战,篇幅较长,建议先收藏,喜欢点赞支持, ...
- 对比Excel,学习Python报表自动化实战
本篇目录: Excel的基本组成 一份报表自动化的流程 报表自动化实战 将不同的文件进行合并 Excel的基本组成 下图是Excel的中各个部分的组成关系,我们工作中每天会处理很多Excel文件,一个 ...
- python游戏开发实战:游戏按钮
一.效果 二.简介 游戏中,按钮是必不可少的控件.但是pygame并没有给我们提供相关的功能.那么只能自己写一个啦. 演示工程的下载地址:https://pan.baidu.com/s/1dCgCs8 ...
- python接口自动化实战(框架)
python接口测试的原理,就不解释了,百度一大堆. 先看目录,可能这个框架比较简单,但是麻雀虽小五脏俱全. 各个文件夹下的文件如下: 一.理清思路 我这个自动化框架要实现什么 1.从excel里面提 ...
最新文章
- android binder机制之——(创建binder服务)
- 域服务器 ssl证书,服务器添加ssl证书及域名绑定
- 用git提交代码时,由于进程加锁,突然崩溃,未来得及解锁,导致其他进程访问不了...
- numpy添加元素_科研速递 | 花费15年众望所归!NumPy论文终登上Nature!
- c语言错误指导,c语言编程指导.pdf
- MacBook双开微信
- Delphi第三方组件安装DCU.PAS.DPK.BPL.ActiveX控件
- java上传csv错误信息_java处理csv文件上传示例详解
- dhcp snooping华为_使用DHCP snooping 功能防止DHCP Server仿冒者攻击(华为交换机)
- 深度学习入门读书笔记—全
- 6、mysql与suse查看版本信息
- ubuntu下MySQL的安装及远程连接配置(转)
- Linux中文件的7大类型
- vep格式用什么播放器linux,vep格式视频用什么播放器打开
- 微信小程序入门--注册账号
- linux万兆网络传输速度,万兆以太网传输速度实测 (结果: 单向9984Mbps, 双向19808Mbps)...
- 特斯拉Q4财报:底部反弹70%,为信仰打call
- Hive自定义函数(字母大小写转换)
- 电话簿程序设计c语言,电话簿管理程序设计.doc
- 2022年湖北中级工程师职称评审详细流程是哪些步骤呢? 甘建二