python游戏挂机脚本_Python简单实现阴阳师挂机脚本
参考大佬们的博客,凑出了阴阳师的简单挂机脚本,对各个博主进行感谢,鞠躬.jpg
实现原理:
对各个按钮等需要点击的地方进行截图,然后对整个屏幕截屏,通过模板匹配得到截图在截屏中的坐标位置,进行点击
实现方法:
对整个屏幕进行截图,并保存
1 ####截图方法1####
2 importwin32gui3 importwin32ui4 importwin32con5 importwin32api6 defPrintscreen():7 #获取桌面
8 hdesktop =win32gui.GetDesktopWindow()9
10 #分辨率适应
11 width =win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)12 height =win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)13 left =win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)14 top =win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)15 #width=1920 # 因为用win32api.GetSystemMetrics获取的分辨率不对,于是我直接手输入进去的
16 #height=1080
17
18 #创建设备描述表
19 desktop_dc =win32gui.GetWindowDC(hdesktop)20 img_dc =win32ui.CreateDCFromHandle(desktop_dc)21
22 #创建一个内存设备描述表
23 mem_dc =img_dc.CreateCompatibleDC()24
25 #创建位图对象
26 screenshot =win32ui.CreateBitmap()27 screenshot.CreateCompatibleBitmap(img_dc, width, height)28 mem_dc.SelectObject(screenshot)29
30 #截图至内存设备描述表
31 mem_dc.BitBlt((0, 0), (width, height), img_dc, (left, top), win32con.SRCCOPY)32
33 #将截图保存到文件中
34 screenshot.SaveBitmapFile(mem_dc, ‘yuan.png‘)35
36 #内存释放
37 mem_dc.DeleteDC()38 win32gui.DeleteObject(screenshot.GetHandle())39
40 #测试
41 Printscreen()
1 ####截图方法2####
2 from PIL importImage3 from PIL importImageGrab4
5 defPrintscreen():6 #截图坐标 左上角 ,右下角
7 size = (0, 0,1920,1080)8 img =ImageGrab.grab(size)9 #保存截图
10 img.save("yuan.png")11 print(‘截图进行了一次刷新‘)12 #打开截图
13 #img.show()
14
15 #测试
16 Printscreen()
通过模板匹配得到截图的坐标位置
模板匹配参考博客
图像筛选参考博客
注:模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。所以打开阴阳师后不要进行放大或缩小。
1 importcv22 importnumpy as np3 from matplotlib importpyplot as plt4 importmath5
6 ###图像匹配###
7 defImage_Discern(imgone,imgtwo):8 #1.模板匹配
9 #大图
10 img =cv2.imread(imgone)11 img_gray =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)12
13 #小图
14 template =cv2.imread(imgtwo, 0)15 h, w = template.shape[:2] #rows->h, cols->w
16 img2 =img.copy()17
18 #对比图像
19 res =cv2.matchTemplate(img_gray, template, cv2.TM_SQDIFF_NORMED)20
21 #返回坐标
22 min_val, max_val, min_loc, max_loc =cv2.minMaxLoc(res)23 top_left =min_loc24 bottom_right = (top_left[0] + w, top_left[1] +h)25
26 #计算中心坐标
27 a1, a2 =top_left28 b1, b2 =bottom_right29 c1 = (a1 + w/2)*0.8 #0.8匹配屏幕分辨率(因为分辨率原因这里乘0.8用于适应平复分辨率坐标位置)
30 c2 = (a2 + h/2)*0.8
31 e1 =math.ceil(c1)32 e2 =math.ceil(c2)33 d1 =(e1, e2)34 #print(‘中心坐标为:‘ , d1)
35
36 ###测试图像匹配,弹出图像显示匹配位置###
37 #在匹配点画小圆心
38 #cv2.circle(res, top_left, 10, 0, 2)
39 #cv2.imshow("res", res)
40
41 ## 画矩形
42 #cv2.rectangle(img2, top_left, bottom_right, (0, 255, 0), 2)
43 #cv2.imshow("img2",img2)
44 #cv2.waitKey(0)
45
46 #两张图片是否匹配
47 #print(‘各个参数为:‘,min_val, max_val, min_loc, max_loc)
48
49 ###进行图像筛选###
50 if min_val <= 0.03:51 #print(‘图片匹配‘)
52 return(d1)53 else:54 #print(‘图片不匹配‘)
55 return(0)56
57
58 #测试
59 #Image_Discern(‘e1.png‘,‘a2.png‘) # (大图,小图)匹配图像
通过坐标位置进行点击
鼠标点击参考博客
1 importwin32api2 importwin32con3 importwin32gui4 importtime5 importrandom6
7 defxunzhao():8
9 wdname = u‘阴阳师-网易游戏‘
10 #取得窗口句柄
11 hwnd =win32gui.FindWindow(0, wdname)12 if nothwnd:13 print("窗口找不到,请确认窗口句柄名称:【%s】" %wdname )14 exit()15 #窗口显示最前面
16 win32gui.SetForegroundWindow(hwnd)17
18 def move_click(x, y, t=0): #移动鼠标并点击左键
19 suiji1 = random.randint(0,10)20 suiji2 = random.randint(0,10)21
22 #print(‘鼠标抖动随机数为:+‘,suiji2,‘ +‘,suiji1)
23 win32api.SetCursorPos((x+suiji1, y+suiji2)) #设置鼠标位置(x, y),设置随机数,以防被封
24 time.sleep(0.1)25 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)26 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) #点击鼠标左键
27 #print(‘模拟点击‘)
28 return029
30 #测试
31 #while True :
32 #suiji = random.randint(0,5) #获得随机数
33 #xunzhao() #游戏顶置,获得句柄
34 #time.sleep(suiji) #间隔时间
35 #move_click(1280, 685) #坐标点击
一个简陋的实例
有基本的方法后,然后就可以写代码进行挂机了。
贴一个自己刷探索的代码,其中click模块为鼠标模拟点击,printscreen模块为截屏,image_discern模块为模板匹配
1 importclick2 importprintscreen3 importimage_discern4 importtime5
6 ###进行图标点击###
7 defIdentify_Click(little):8 a = 0.1
9 click.xunzhao()10 time.sleep(a) #间隔秒数
11 printscreen.Printscreen() #截图
12 time.sleep(a)13 b1 = image_discern.Image_Discern(‘yuan.png‘, little) #图像对比
14 for i in range(1,10):15 if b1 ==0:16 print(‘准备再次寻找第‘,i,‘次‘)17 time.sleep(a)18 click.xunzhao()19 time.sleep(a)20 printscreen.Printscreen()21 time.sleep(a)22 b1 = image_discern.Image_Discern(‘yuan.png‘, little)23 else:24 time.sleep(a)25 printscreen.Printscreen() #截图
26 b1 = image_discern.Image_Discern(‘yuan.png‘, little) #图像对比
27 a1, a2 = b1 #地址赋值
28 click.move_click(a1, a2) #模拟点击
29 time.sleep(a)30 break
31
32 ###寻找场景内是否有相应图标###
33 defIdentify_Click_Seek(little):34 a = 0.1
35 click.xunzhao()36 time.sleep(a) #间隔秒数
37 printscreen.Printscreen() #截图
38 time.sleep(a)39 b1 = image_discern.Image_Discern(‘yuan.png‘, little) #图像对比
40 if b1 ==0:41 #print(‘没有相应图标‘)
42 return(False)43 else:44 #print(‘找到相应图标‘)
45 return(True)
上面那代码块为identify_click模块
1 importtime2 importidentify_click3 importrandom4
5 defTansuo():6
7 b=08 whileTrue:9 a = (‘-----------------‘)10 ##判断体力是否足够##
11 if identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo13.png‘):12 print(a)13 print(‘体力不足‘)14 break #结束循环
15 ###组队结束战斗###
16 if identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo17.png‘):17 print(a)18 print(‘战斗结束,回到组队页面‘)19 break #结束循环
20 ##判断是否结束##
21 elif identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo12.png‘):22 print(a)23 print(‘探索结束!!‘)24 break
25 ##判断战斗结束##
26 elif identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo04.png‘):27 identify_click.Identify_Click(‘./png/tansuo/tansuo04.png‘)28 print(a)29 print(‘战斗结束‘)30 continue #跳出本次循环
31 ##判断准备按钮##
32 elif identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo08.png‘):33 identify_click.Identify_Click(‘./png/tansuo/tansuo08.png‘)34 print(a)35 print(‘战斗开始‘)36 whileTrue:37 if identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo15.png‘):38 identify_click.Identify_Click(‘./png/tansuo/tansuo15.png‘)39 break
40 elif identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo04.png‘):41 identify_click.Identify_Click(‘./png/tansuo/tansuo04.png‘)42 break
43 elif identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo16.png‘):44 identify_click.Identify_Click(‘./png/tansuo/tansuo16.png‘)45 else:46 time.sleep(0.1)47 if identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo15.png‘):48 print(‘!!!!!!!!!!!‘)49 print(‘!战斗失败,中止脚本!‘)50 print(‘!!!!!!!!!!!‘)51 break
52 continue #跳出本次循环
53 ##BOSS##
54 elif identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo07.png‘):55 print(a)56 print(‘发现BOSS‘)57 identify_click.Identify_Click(‘./png/tansuo/tansuo07.png‘)58 continue
59 ##小怪##
60 elif identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo03.png‘):61 print(a)62 print(‘发现小怪‘)63 identify_click.Identify_Click(‘./png/tansuo/tansuo03.png‘)64 continue
65 ##奖励宝箱##
66 elif identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo09.png‘):67 identify_click.Identify_Click(‘./png/tansuo/tansuo09.png‘)68 time.sleep(random.randint(1,2))69 whileTrue:70 if identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo10.png‘):71 identify_click.Identify_Click(‘./png/tansuo/tansuo11.png‘)72 break
73 else:74 time.sleep(2)75 print(a)76 print(‘领取奖励宝箱‘)77 continue
78 ##进行走动##
79 elif identify_click.Identify_Click_Seek(‘./png/tansuo/tansuo05.png‘):80 print(a)81 print(‘进行走动‘)82 b = b+1
83 if b < 5:84 identify_click.Identify_Click(‘./png/tansuo/tansuo05.png‘)85 print(‘向右‘)86 time.sleep(random.randint(3,4)) #间隔3~4秒
87 continue
88 else:89 identify_click.Identify_Click(‘./png/tansuo/tansuo06.png‘)90 print(‘向左‘)91 time.sleep(random.randint(3,4)) #间隔3~4秒
92 continue
93
94 time.sleep(0.5) #间隔3~4秒
95 return(True)96
97 #测试
98 Tansuo()
当中的图片
这些是最近东拼西凑的代码,简单的代替了下无聊的手点鼠标环节,虽然说游戏内有樱饼这一说,但我是个穷人。玩游戏的同时,可以学点东西,何乐而不为呢,哈哈哈。以后可能还会去进行优化,修改。
还有一个简单实现的方法,运用pyautogui库,进行鼠标点击、截屏等操作,pyautogui库使用方法参考博客
最后再次感谢各位大佬的博客
原文地址:https://www.cnblogs.com/ananing/p/python.html
python游戏挂机脚本_Python简单实现阴阳师挂机脚本相关推荐
- python辅助脚本教程_Python简单实现阴阳师挂机脚本
标签:map 代码 通过 rom 中心 des 对象 atp 脚本 参考大佬们的博客,凑出了阴阳师的简单挂机脚本,对各个博主进行感谢,鞠躬.jpg 实现原理: 对各个按 ...
- python挂机脚本阴阳师_Python简单实现阴阳师挂机脚本
参考大佬们的博客,凑出了阴阳师的简单挂机脚本,对各个博主进行感谢,鞠躬.jpg 实现原理: 对各个按钮等需要点击的地方进行截图,然后对整个屏幕截屏,通过模板匹配得到截图在截屏中的坐标位置,进行点击 实 ...
- python游戏开发库_Python库之游戏开发及虚拟现实
1.PyGame:简单的游戏开发功能库 http://www.pygame.org 提供了基于SDL的简单游戏开发功能及实现引擎 理解游戏对外部输入的响应机制及角色构建和交互机制 Python游戏入门 ...
- python游戏编程书_Python游戏编程快速上手 第4版 (斯维加特著) 中文pdf扫描版[41MB]...
Python是一种高级程序设计语言,因其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言. Python游戏编程快速上手 (第4版)通过编写一个个小巧.有趣的游戏来教授Python编程,并且采用 ...
- python游戏使用教程_PYTHON游戏编程入门_IT教程网
资源名称:PYTHON游戏编程入门 内容简介: Python是一种解释型.面向对象.动态数据类型的高级程序设计语言,在游戏开发领域,Python也得到越来越广泛的应用,并由此受到重视. 本书教授用Py ...
- python爬取图片实例_Python简单爬取图片实例
都知道Python的语法很简单易上手,也很适合拿来作爬虫等等,这里就简单讲解一下爬虫入门--简单地爬取下载网站图片.html 效果 就像这样自动爬取下载图片到本地:python 代码: 其实很简单,咱 ...
- 简单python脚本实例-Python简单实现阴阳师挂机脚本
参考大佬们的博客,凑出了阴阳师的简单挂机脚本,对各个博主进行感谢,鞠躬.jpg 实现原理: 对各个按钮等需要点击的地方进行截图,然后对整个屏幕截屏,通过模板匹配得到截图在截屏中的坐标位置,进行点击 实 ...
- python游戏循环设置_python - 游戏脚本之无脑的循环挑战
三国挂机手游session 模拟点按并循环,在指定位置截图 # coding: utf-8 import os import time import wda import random #import ...
- python游戏的参考文献_Python游戏的引入
Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语 ...
最新文章
- dataTables常用参数
- 输出程序运行的时间(精确到微秒)
- tensorflow笔记 :常用函数说明
- 重磅,2020年度第十届吴文俊人工智能科学技术奖获奖名单公示
- 【译】缓存最佳实践 max-age的陷阱
- ENVI5.1安装破解教程
- ipad如何连接电脑_ipad如何将电脑文件下载到本地?
- Android中的AsyncTask异步任务的简单介绍
- 团体程序设计天梯赛-练习集L1-011 A-B (20分)getline输入
- nssl1216-码灵鼠【数学】
- flash builder4.7 for Mac升级AIRSDK详解
- matlab信号与系统论文,基于MATLAB的《信号与系统》课程教学研究
- wx2540h配置教程_H3CEWP-WX2540H多业务无线控制器
- 谷歌浏览器安装失败,解决办法
- matlab coder 转 c语言,MATLAB Coder从MATLAB生成C/C++代码步骤
- Python面向对象基本概述
- 手写笔迹鉴别系统(1)
- 闲鱼下单时显示服务器繁忙,闲鱼翻车记。闲鱼用验机报告需要注意的问题,否则分分钟被水鱼...
- 利用计算机网络犯罪案例,网络犯罪指导性案例实务指引
- 招投标小程序开发功能及源码