В прошлый раз я упомянул, что библиотека PyUserInput может имитировать щелчки мышью и клавиатурой, а сегодня старый жир вернется, чтобы попрактиковаться в написании игровых сценариев.
Эта игра славится своей взрывной печенью, лучше написать простой скрипт, чтобы развязать руки. Наша цель состоит в том, чтобы иметь возможность щелкнуть, когда нужно нажать кнопку, чтобы достичь цели автоматического выполнения задачи. Что касается того, как определить положение щелчка, можно использовать следующие два метода.
- Вручную определить соответствующее положение кнопки;
- Собрав материал ключевого изображения и сравнив его с текущим снимком экрана, найдите ключевую позицию.
У первого способа есть очевидные недостатки - он требует слишком много ручных операций, а второй способ относительно интеллектуален.Остановимся на втором способе подробнее.
Скриншоты
Для получения текущего состояния игры в режиме реального времени необходимо делать скриншоты, здесь используется библиотека 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: Эта статья предназначена только для технического обмена, не используйте ее в незаконных целях! !