楽しいゲーム、両手を解放する

1825 ワード

前回このPyUserInputというライブラリはマウスとキーボードのクリックをシミュレートできると言っていましたが、今日は肥さんが実戦でゲームのスクリプトを作っています.
このゲームは肝臓を爆発させることで有名なので、簡単なスクリプトを書いて両手を解放したほうがいいです.私たちの目標は、あるボタンをクリックすべきときにクリックして、自動的にタスクを完了する目標を達成することです.クリック位置を特定する方法については、以下の2つの方法があります.
  • 手動で対応するキーの位置を決定する.
  • は、キー画像素材を収集することにより、現在のスクリーンショットと比較して、キー位置を位置決めする.

  • 1つ目の方法は明らかな欠陥を持っています.人工的な操作が多すぎて、2つ目の方法は相対的に知能的です.次に、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:本文は技術交流のみで、不法な用途では絶対に使用しないでください!!