快乐游戏,解放双手

上回说到这个PyUserInput这个库能够模拟鼠标和键盘点击,今天老肥再来实战一波游戏脚本制作。

file

此游戏以爆肝著称,不如写个简单的小脚本解放一下双手。我们的目标就是为了能够在该点击某个按键的时候点击,以达成自动完成任务的目标。关于如何确定点击位置,可以采取如下两种方式。

  1. 手动确定对应按键位置;
  2. 通过收集按键图像素材,与当前屏幕截图进行对比,从而定位按键位置。

第一种方法具有显而易见的缺陷——需要太多人工的操作,第二种方法则相对智能,接下来我们来具体介绍一下第二种方法。

屏幕截图

为了实时获取当前游戏状态,需要进行屏幕截图,此处采用了PIL库中的ImageGrab。通过模拟鼠标获取整个屏幕的尺寸,并进行全屏截图。

    def screen_shot(self):
        X,Y=self.m.screen_size()
        img=ImageGrab.grab((0,0,X,Y)
        img.save('now.png')

图片比对

通过OpenCV库进行图片比对,比对按键素材与当前实时的屏幕截图,相似度大于指定阈值则判断此素材存在于当前屏幕中,并且返回此素材在当前屏幕中的位置。

    def get_location(self,template_pic):
        img=cv2.imread('now.png')
        template=cv2.imread(template_pic)
        x=template.shape[1]
        y=template.shape[0]
        res=cv2.matchTemplate(img,template,cv2.TM_CCOEFF_NORMED)
        loc=np.where(res>=self.threshold)
        if len(loc[0])!=0:
            self.flag2=True
            loc_x=loc[1][0]
            loc_y=loc[0][0]
            scale_x=(loc_x,(loc_x+x))
            scale_y=(loc_y,(loc_y+y))
            return scale_x,scale_y

返回坐标范围是为了后续在点击按键的时候能够做到随机选取按键区域进行点击。

模拟点击

在指定的范围内进行随机选择点击,更加逼近真实操作。

    def random_click_1(self,scale_x,scale_y):
        x=random.randint(scale_x[0],scale_x[1])
        y=random.randint(scale_y[0],scale_y[1])
        self.m.move(x,y)
        self.m.click(x,y,1,1)

程序逻辑

根据需要完成的任务,依托上述获取指定按钮位置并随机点击的技术方法,我们可以轻松地写出相应逻辑的代码。

file

PS:本文仅供技术交流,切勿用以非法用途!!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 无目标命令 在[上一章][界面元素]中,我们讲述了界面元素,以及如何选取一个界面元素作为目标,以便使用有目标的命令...
    Creator_蔚蓝阅读 10,486评论 0 3
  • 我想一次性付费,阅读所有 Tasker 中文用户指南哦?OK,请访问此链接 原创内容,未经本人授权不得转载
    blackspot阅读 1,496评论 0 1
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,537评论 0 5
  • 没有什么比在一个温暖的秋日午后,散步在林荫小路中更加令人心驰神往的惬意了。树木植物总是有种抚慰人心的治愈力量,无论...
    朝凪阅读 286评论 0 0
  • 今天一辆宝马换刹车片换完后复不了位把报警线也换了一根还是不行 最后又给从新接了一下线要旧的插头新的报警片 还是依旧...
    京心达侯天祥阅读 178评论 0 0