使用PYautoGUI开发配对解谜脚本,要求仅点2个相同图为何误点所有匹配图
脚本点击逻辑异常原因与修复方案
- 外层循环未中断:当前代码的
break仅作用于内层遍历匹配坐标的for i in found循环,无法跳出外层遍历所有图案模板的for image in images循环。处理完一组配对后,脚本会继续扫描剩余所有模板,只要其他模板匹配到≥2个相同图案,就会再次触发点击,最终连续点击多组目标。 - 配对目标未做数量限制:没有逻辑限定仅点击当前匹配到的2个配对项,也没有记录已点击/已配对的坐标或图案,导致同一图案的多余匹配项、已消除的残留匹配都会被重复触发点击。
- 前置检测逻辑失效:粘贴的代码中外层
if判断后的for循环未正确缩进,导致TapPair.png的界面状态检测完全失效,无论当前是否处于可配对状态都会持续执行扫描点击。 - 时序逻辑缺失:配对解谜需要等待第一张卡片翻牌显示图案后再点击第二张,当前代码没有对应等待逻辑,容易因为卡片状态变化(比如未配对卡片翻回背面)导致匹配结果异常,误触多余目标。
修正后参考代码
import pyautogui import time # 替换为你实际使用的图案模板列表 images = ["图案1.png", "图案2.png", "图案3.png"] # 记录已配对的图案与坐标,避免重复处理 processed_data = set() if pyautogui.locateCenterOnScreen('TapPair.png', confidence=0.9, region=(689, 250, 640, 1000)) is not None: for image in images: # 跳过已经处理过的图案 if image in processed_data: continue found = list(pyautogui.locateAllOnScreen(image, confidence=0.99, region=(689, 250, 640, 1000))) # 过滤掉已经处理过的坐标 found = [pos for pos in found if pos not in processed_data] if len(found) >= 2: # 仅点击前2个匹配的配对项 for pos in found[:2]: pyautogui.click(pos) print("Got a match") time.sleep(2) # 标记当前图案与对应坐标为已处理 processed_data.add(image) processed_data.update(found[:2]) # 处理完当前配对后直接跳出外层模板遍历,避免连续触发其他配对的点击 break
内容的提问来源于stack exchange,提问作者HGPlays
相关产品推荐
相关产品推荐

