Рыба ловится
This commit is contained in:
parent
f9e26cfa50
commit
3dd853bf17
BIN
catched_bober.png
Normal file
BIN
catched_bober.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.7 KiB |
BIN
game_orig.png
Normal file
BIN
game_orig.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 72 KiB |
164
main.py
164
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:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user