当前位置:   article > 正文

python制作简易阴阳师游戏脚本(基础问题篇)

python制作简易阴阳师游戏脚本(基础问题篇)

正值过年的关卡,疫情严重,在这里盼望武汉马上恢复起来,武汉加油!!!

python制作简易阴阳师游戏脚本(代码篇)

在一动不动的这几天里,受朋友的邀请写了个阴阳师刷御魂的脚本。
因个人水平有限,希望各路大神指点

主要思路如下:

  • 对区域进行截图
  • 将所截图与保存的图片进行对比
  • 控制鼠标移动到该位置并进行点击

1.对区域进行截图

这里我使用的是 pyautogui


!!这里遇到问题

使用PIL中的ImageGrab模块时发现截屏时无法对全屏进行截取

!!这里保留意见可以使用pyqt的方法对指定应用程序进行抓取


import pyautogui
def get_screen():
  # 截屏口令 保存图片
  img = pyautogui.screenshot(region=(0,0, 1280, 720))  #截取范围是左0,右0,1280x720的范围
  #img = pyautogui.screenshot() 截取全屏
  img.save('E:\pyth_roject\yinyagnshi\img/screen_img.png')
  img = cv2.imread('E:\pyth_roject\yinyagnshi\img\screen_img.png', 0)
  return img
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.将所截图与保存的图片进行对比
这里我使用的是CV库中的 matchTemplate


这里发现使用方法不同所取坐标的方式不同!!需要再次进行验证


  matchTemplate(image, templ, method[, result[, mask]]) -> result
  """
matchTemplate():
参数image:待搜索的图像(大图)
参数temple:搜索模板,需要和原图一样的数据类型且尺寸不能大于源图像
参数result:比较结果的映射图像,其必须为单通道,32位浮点型图像,如果原图(待搜索图像)尺寸为W*H,而temple尺寸为w*h,则result尺寸一定是
   (W-w+1)*(H-h+1)
参数method:指定匹配方法,有如下几种:
   CV_TM_SQDIFF:平方差匹配法
   CV_TM_SQDIFF_NORMED:归一化平方差匹配法
   CV_TM_CCORR:相关匹配法
   CV_TM_CCORR_NORMED:归一化相关匹配法
   CV_TM_CCOEFF:系数匹配法
   CV_TM_CCOEFF_NORMED:化相关系数匹配法
"""
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

参考代码如下

import cv2 as cv
import numpy as np
 

"""
minMaxLoc()函数
作用:一维数组当作向量,寻找矩阵中最小值和最大值位置
"""
 
def match_image():
    target = cv.imread(r"2.jpg")
    temple = cv.imread(r"1.png")
    # 获取到小图的尺寸
    th, tw = temple.shape[:2]
    result = cv.matchTemplate(target, temple, cv.TM_SQDIFF_NORMED)
    # 返回匹配的最小坐标
    min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result)
    tl=min_loc
    print(tl)
    br = (int(tl[0]) + tw, int(tl[1]) + th)
    print(br)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3.控制鼠标移动到该位置并进行点击

使用PyMouse 模块


!!! 安装步骤PyMouse安装步骤

!!!使用时发现在使用阴阳师pc端时无法进行点击,怀疑可能阴阳师有反脚本的机制


def click(x, y):
    """输入两个二维列表,表示要点击的位置的x坐标,y坐标"""
    m = PyMouse()
#    cmd_click = 'adb shell input tap {} {}'.format(x, y)
    m.click(x, y, 1)
 #  click(self, x, y, button=1, n=1)
    #click中button默认为1鼠标左键,2鼠标右键,n表示鼠标点击的次数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/490004
推荐阅读
相关标签
  

闽ICP备14008679号