专栏首页算法与数据之美快乐游戏,解放双手

快乐游戏,解放双手

上回说到这个PyUserInput这个库能够模拟鼠标和键盘点击(没看过的朋友底部有传送门),今天老肥再来实战一波游戏脚本制作

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

  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)

程序逻辑

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

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

本文分享自微信公众号 - 算法与数据之美(algo_and_data),作者:老肥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 给你的README整一些花里胡哨的图片

    在浏览人类精华宝库GitHub时,老肥注意到有些项目的README文件中会展示其Star以及Fork的数目,如下图所示,

    老肥码码码
  • 十分钟掌握Pandas基本操作(下)

    对于Pandas的基本操作我们就总结到这里,这个数据集还可以用来做机器学习,把宝可梦的类型作为标签来预测,或是把是否是神兽作为标签来做二分类等等,我们下回见。

    老肥码码码
  • 十分钟掌握Pandas基本操作(上)

    为了更好地掌握数据科学必备库Pandas的基本使用,本文通过精灵宝可梦的数据集实战,我们一起过一遍Pandas的基本操作,文中的代码都附有注释,并给出了结果的配...

    老肥码码码
  • 画解算法:6. Z 字形变换

    https://leetcode-cn.com/problems/zigzag-conversion/

    灵魂画师牧码
  • 十分钟教你开发EOS智能合约

    区块链大本营
  • Make WeChat Great Again

    导语: 关闭朋友圈有一年多了,突然有一天微信的策略变了,在关闭朋友圈的同时也不让别人查看自己的朋友圈了。有妹子表示看不到我朋友圈很不爽,于是我决定对微信进行一番...

    MelonTeam
  • 查找----基于无序链表

    SuperHeroes
  • Java 的 CAS原理

    在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存...

    用户3467126
  • 这才是你寻寻觅觅想要的 Python 可视化神器!

    Plotly Express 是一个新的高级 Python 可视化库:它是 Plotly.py 的高级封装,它为复杂的图表提供了一个简单的语法。

    崔庆才
  • iOS12 切换到后台请求丢失的问题

    iOS12版本后,AFNetworking请求过程中,app返回后台,会出现以下错误,并且网络请求中断(只在真机中出现,模拟器不会复现)

    freesan44

扫码关注云+社区

领取腾讯云代金券