参考大佬们的博客,凑出了阴阳师的简单挂机脚本,对各个博主进行感谢,鞠躬.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简单实现阴阳师挂机脚本相关推荐

  1. python辅助脚本教程_Python简单实现阴阳师挂机脚本

    标签:map   代码   通过   rom   中心   des   对象   atp   脚本 参考大佬们的博客,凑出了阴阳师的简单挂机脚本,对各个博主进行感谢,鞠躬.jpg 实现原理: 对各个按 ...

  2. python代码实例-python程序实例

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. github.comteamssixdouluo-download.gi ...

  3. python游戏挂机脚本_Python简单实现阴阳师挂机脚本

    参考大佬们的博客,凑出了阴阳师的简单挂机脚本,对各个博主进行感谢,鞠躬.jpg 实现原理: 对各个按钮等需要点击的地方进行截图,然后对整个屏幕截屏,通过模板匹配得到截图在截屏中的坐标位置,进行点击 实 ...

  4. python挂机脚本阴阳师_Python简单实现阴阳师挂机脚本

    参考大佬们的博客,凑出了阴阳师的简单挂机脚本,对各个博主进行感谢,鞠躬.jpg 实现原理: 对各个按钮等需要点击的地方进行截图,然后对整个屏幕截屏,通过模板匹配得到截图在截屏中的坐标位置,进行点击 实 ...

  5. python最简单的爬虫代码,python小实例一简单爬虫

    python新手求助 关于爬虫的简单例子 #coding=utf-8from bs4 import BeautifulSoupwith open('', 'r') as file: fcontent ...

  6. gurobi使用系列之一——gurobi+Python的实例使用(简单整数规划)

    gurobi是由美国Gurobi公司开发的新一代大规模数学规划优化器,在 Decision Tree for Optimization Software 网站举行的第三方优化器评估中,展示出更快的优化 ...

  7. python测试脚本实例-Python单元测试实例详解

    本文实例讲述了Python单元测试.分享给大家供大家参考,具体如下: 在Python中进行单元测试需要用到自动单元测试框架PyUnit,Python2.1及其以后的版本都将PyUnit作为一个标准模块 ...

  8. python挂机脚本阴阳师_记一次阴阳师挂机脚本开发

    最近和跟着同事一起玩阴阳师,发现这个游戏有太多重复操作了,这完全就是浪费生命啊:所以想到用python写一个自动挂机脚本. 最开始想得很简单,就是一直去找相应得按钮,然后点击就可以了.所以直接用pya ...

  9. python教程实例-python教程实例

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 然后我们要将python原生数据类型恢复成正常的对象实例. serializer ...

最新文章

  1. CachedNetworkImage 图片缓存
  2. 从认证到调度,K8s 集群上运行的小程序到底经历了什么?
  3. CNVD-C-2019-48814 漏洞
  4. hive 分区_代码 | Spark读取mongoDB数据写入Hive普通表和分区表
  5. 【渝粤教育】国家开放大学2018年春季 8617-21T燃气仪表与自动化 参考试题
  6. Python 中 PyQt5 + pycharm 调用 Qt Designer,将.ui文件转换成 .py 文件
  7. 当当花160买400的书,确定不囤一波?
  8. MessageDAL
  9. LG电子成功进行太赫兹频段6G无线信号传输,距离超过100米
  10. jQuery选择器理解
  11. TLS1.3对CIP的影响(对密码套件的解释)
  12. 学习3dmax游戏建模一定要美术基础很高吗?资深建模师一语道出重点
  13. 电力行业工程设计资质怎么办?专业类别有哪些?
  14. 计算机组成原理试题无答案,计算机组成原理试题及答案
  15. 【论文阅读】基于光流的快速人体姿态估计
  16. 如何取消qq的“小世界”功能
  17. .net后台判断服务器(http/https开头)图片是否存在
  18. oracle sql查询取整,Oracle SQL语句操作数字:取整、四舍五入及格式化
  19. python报错ValueError: Found input variables with inconsistent numbers of samples: [x,y]
  20. 微步在线:半年融资8亿,综合型网络安全“新贵”诞生

热门文章

  1. tensorflow精进之路(二十四)——Object Detection API目标检测(中)(COCO数据集训练的模型—ssd_mobilenet_v1_coco模型)
  2. static_cast, dynamic_cast, const_cast,reinterpret_cast探讨
  3. 计算机视觉领域稍微容易中的期刊(第一版)
  4. 原 matplotlib命令与格式:系统字体与显示中文
  5. Java LRU的实现
  6. C# 温故而知新:Stream篇(三)
  7. 关于内存对齐介绍的比较好的一个文章
  8. Sublime Text 3安装与使用
  9. 遊戲是這樣寫成的 (第三篇: 簡單的遊戲框架)
  10. 我的ssis和ssas报错记录