Удачной игры, свободные руки

Python

В прошлый раз я упомянул, что библиотека 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: Эта статья предназначена только для технического обмена, не используйте ее в незаконных целях! !