快樂遊戲,解放雙手

上回說到這個PyUserInput這個庫可以模擬鼠標和鍵盤點擊,今天老肥再來實戰一波遊戲腳本製做。segmentfault

file

此遊戲以爆肝著稱,不如寫個簡單的小腳本解放一下雙手。咱們的目標就是爲了可以在該點擊某個按鍵的時候點擊,以達成自動完成任務的目標。關於如何肯定點擊位置,能夠採起以下兩種方式。dom

  1. 手動肯定對應按鍵位置;
  2. 經過收集按鍵圖像素材,與當前屏幕截圖進行對比,從而定位按鍵位置。

第一種方法具備顯而易見的缺陷——須要太多人工的操做,第二種方法則相對智能,接下來咱們來具體介紹一下第二種方法。spa

屏幕截圖

爲了實時獲取當前遊戲狀態,須要進行屏幕截圖,此處採用了PIL庫中的ImageGrab。經過模擬鼠標獲取整個屏幕的尺寸,並進行全屏截圖。3d

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

圖片比對

經過OpenCV庫進行圖片比對,比對按鍵素材與當前實時的屏幕截圖,類似度大於指定閾值則判斷此素材存在於當前屏幕中,而且返回此素材在當前屏幕中的位置。code

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

返回座標範圍是爲了後續在點擊按鍵的時候可以作到隨機選取按鍵區域進行點擊。blog

模擬點擊

在指定的範圍內進行隨機選擇點擊,更加逼近真實操做。遊戲

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:本文僅供技術交流,切勿用以非法用途!!get

相關文章
相關標籤/搜索