фермерский бот — пятоги

#python #cv2 #pyautogui

Вопрос:

Просто работаю над фермерским ботом и новичком в python. Поэтому я собрал вместе несколько разных работ, которые я видел в видео на YouTube. Бот работает, но определенно кажется, что он мог бы быть более эффективным. Я пытаюсь в основном заставить движение остановиться, когда e.jpg изображение идентифицируется на экране, и пусть оно обрабатывается в течение 10 секунд. Вместо этого игрок перемещается, и если при остановке у него есть шанс на ферму, он все равно будет работать нормально, но я хочу, чтобы он постоянно двигался и останавливался только при идентификации e.jpg

также паузы между движениями дольше, чем я хочу, когда не нахожу e.jpg

Я уверен, что у вас, ребята, будет несколько советов, как навести порядок в моем беспорядке.

Спасибо,

 import cv2
import pyautogui
import pydirectinput
import time
import random
from time import sleep
from threading import Thread

pyautogui.PAUSE = 0

#template
template = cv2.imread("e.PNG")
template_gray = cv2.cvtColor(template, cv2.COLOR_RGB2GRAY)
template_w, template_h = template_gray.shape[::-1] #(height, width)

#game window dimensions
x, y, w, h = 500, 400, 850, 650

#wait
sleep(3)

def locatebutton():
while True:

    #screenshot
    pyautogui.screenshot("image.png"), (x, y, w, h)
    image = cv2.imread("image.png")

    while True:
        image_gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

        result = cv2.matchTemplate(
            image = image_gray,
            templ = template_gray,
            method = cv2.TM_CCOEFF_NORMED
        )

        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)

        #threshold
        if max_val >=0.8:
            pyautogui.press('e')
            time.sleep(10)

            image = cv2.rectangle(
                img = image,
                pt1 = max_loc,
                pt2 = (
                    max_loc[0]   template_w,
                    max_loc[1]   template_h
                ),
                color = (0,0,255),
                thickness = -1
            )
        else:
            movementall()

def movement1():
#move forward
    pydirectinput.mouseDown(button='middle', x=700, y=225)
    time.sleep(1)
    pydirectinput.mouseUp(button='middle')
    locatebutton()

def movement2():
# move left
    pydirectinput.mouseDown(button='middle', x=500, y=225)
    time.sleep(1)
    pydirectinput.mouseUp(button='middle')
    locatebutton()

def movement3():
# move left again
    pydirectinput.mouseDown(button='middle', x=300, y=225)
    time.sleep(1)
    pydirectinput.mouseUp(button='middle')
    locatebutton()

def movement4():
# move move left again
    pydirectinput.mouseDown(button='middle', x=100, y=225)
    time.sleep(1)
    pydirectinput.mouseUp(button='middle')
    locatebutton()

def movementall():
my_list = [movement1, movement2, movement3, movement4]
random.choice(my_list)()

if __name__ == '__main__':
Thread(target = movementall).start()
Thread(target = locatebutton).start()