diff --git a/catched_bober.png b/catched_bober.png new file mode 100644 index 0000000..9712d99 Binary files /dev/null and b/catched_bober.png differ diff --git a/game.png b/game.png new file mode 100644 index 0000000..d283f98 Binary files /dev/null and b/game.png differ diff --git a/game_orig.png b/game_orig.png new file mode 100644 index 0000000..369c0f4 Binary files /dev/null and b/game_orig.png differ diff --git a/main.py b/main.py index 0963310..09fa549 100755 --- a/main.py +++ b/main.py @@ -212,6 +212,170 @@ def find_bober_on_screen(): time.sleep(0.5) pyautogui.mouseUp(button='left') print(" ✓ Левой кнопкой мыши удержано 0.5 секунды!") + + # Теперь ищем game.png на всем экране + game_template_path = "game.png" + if os.path.exists(game_template_path): + print(f"\nПоиск '{game_template_path}' на всем экране...") + + # Загружаем шаблон game.png + game_template = cv2.imread(game_template_path, cv2.IMREAD_GRAYSCALE) + + if game_template is not None: + game_w, game_h = game_template.shape[::-1] + game_threshold = 0.5 + + # Захватываем весь экран + full_screen = sct.grab(sct.monitors[1]) # monitors[1] - это основной монитор + + # Конвертируем в numpy array и оттенки серого + full_screen_np = np.array(full_screen) + full_screen_gray = cv2.cvtColor(full_screen_np, cv2.COLOR_BGR2GRAY) + + # Выполняем поиск шаблона game.png + game_res = cv2.matchTemplate(full_screen_gray, game_template, cv2.TM_CCOEFF_NORMED) + + # Получаем максимальное значение совпадения + game_min_val, game_max_val, game_min_loc, game_max_loc = cv2.minMaxLoc(game_res) + + # Проверяем, найден ли game.png + game_loc = np.where(game_res >= game_threshold) + game_matches = list(zip(*game_loc[::-1])) + + if len(game_matches) > 0: + print(f"✓ game.png НАЙДЕН на экране!") + print(f" Уверенность совпадения: {game_max_val:.2f}") + print(f" Позиция: ({game_max_loc[0]}, {game_max_loc[1]})") + + # Сохраняем координаты найденной области в переменные + left_side = game_max_loc[0] + right_side = game_max_loc[0] + game_w + top_side = game_max_loc[1] + bottom_side = game_max_loc[1] + game_h + + print(f" Координаты области:") + print(f" left_side: {left_side}") + print(f" right_side: {right_side}") + print(f" top_side: {top_side}") + print(f" bottom_side: {bottom_side}") + + # Теперь ищем catched_bober в этой области и мониторим его позицию + catched_bober_template_path = "catched_bober.png" + if os.path.exists(catched_bober_template_path): + print(f"\nПоиск '{catched_bober_template_path}' в области game...") + + # Загружаем шаблон catched_bober.png + catched_bober_template = cv2.imread(catched_bober_template_path, cv2.IMREAD_GRAYSCALE) + + if catched_bober_template is not None: + catched_w, catched_h = catched_bober_template.shape[::-1] + catched_threshold = 0.5 + check_interval = 0.1 # секунд между проверками (быстрая реакция) + + # Определяем область для мониторинга (область game) + game_area = { + "top": top_side, + "left": left_side, + "width": right_side - left_side, + "height": bottom_side - top_side + } + + print(f" Мониторинг позиции catched_bober в области game...") + print(f" Область: ({left_side}, {top_side}) - ({right_side}, {bottom_side})") + + mouse_pressed = False + previous_x = None + check_count = 0 + + # Цикл непрерывного мониторинга + while True: + check_count += 1 + + # Захватываем область game + game_area_screenshot = sct.grab(game_area) + + # Конвертируем в numpy array и оттенки серого + game_area_np = np.array(game_area_screenshot) + game_area_gray = cv2.cvtColor(game_area_np, cv2.COLOR_BGR2GRAY) + + # Выполняем поиск шаблона catched_bober + catched_res = cv2.matchTemplate(game_area_gray, catched_bober_template, cv2.TM_CCOEFF_NORMED) + + # Получаем максимальное значение совпадения + catched_min_val, catched_max_val, catched_min_loc, catched_max_loc = cv2.minMaxLoc(catched_res) + + # Проверяем, найден ли catched_bober + catched_loc = np.where(catched_res >= catched_threshold) + catched_matches = list(zip(*catched_loc[::-1])) + + if len(catched_matches) > 0: + # Вычисляем центр найденного catched_bober + current_x = catched_max_loc[0] + catched_w // 2 + current_x_absolute = left_side + current_x # Абсолютная координата на экране + + # Вычисляем расстояние до левой и правой стороны + distance_to_left = current_x + distance_to_right = (right_side - left_side) - current_x + + # Определяем, к какой стороне ближе + closer_to_left = distance_to_left < distance_to_right + + # Показываем информацию каждые 10 проверок + if check_count % 10 == 0: + print(f" Проверка #{check_count}: catched_bober на позиции {current_x_absolute} (относительно: {current_x})") + print(f" Расстояние до левой: {distance_to_left}, до правой: {distance_to_right}") + + # Управление мышью в зависимости от позиции + if closer_to_left: + # Ближе к левой стороне - нажимаем кнопку мыши + if not mouse_pressed: + pyautogui.mouseDown(button='left') + mouse_pressed = True + print(f" → catched_bober ближе к левой стороне - мышь НАЖАТА") + else: + # Ближе к правой стороне - отпускаем кнопку мыши + if mouse_pressed: + pyautogui.mouseUp(button='left') + mouse_pressed = False + print(f" → catched_bober ближе к правой стороне - мышь ОТПУЩЕНА") + + previous_x = current_x + else: + # catched_bober не найден + if check_count % 50 == 0: + print(f" Проверка #{check_count}: catched_bober не найден (макс. уверенность: {catched_max_val:.2f})") + + # Если мышь была нажата, отпускаем её + if mouse_pressed: + pyautogui.mouseUp(button='left') + mouse_pressed = False + print(f" → catched_bober не найден - мышь ОТПУЩЕНА") + + # Небольшая задержка перед следующей проверкой + time.sleep(check_interval) + else: + print(f"Ошибка: Не удалось загрузить '{catched_bober_template_path}'") + else: + print(f"\nПредупреждение: Файл '{catched_bober_template_path}' не найден, пропускаем мониторинг.") + else: + print(f"✗ game.png НЕ найден на экране.") + print(f" Максимальная уверенность совпадения: {game_max_val:.2f} (порог: {game_threshold})") + left_side = None + right_side = None + top_side = None + bottom_side = None + else: + print(f"Ошибка: Не удалось загрузить '{game_template_path}'") + left_side = None + right_side = None + top_side = None + bottom_side = None + else: + print(f"\nПредупреждение: Файл '{game_template_path}' не найден, пропускаем поиск.") + left_side = None + right_side = None + top_side = None + bottom_side = None else: # Показываем прогресс каждые 10 проверок if check_count % 10 == 0: