COC部落冲突安卓自动搜鱼:Python脚本防封号实战

张开发
2026/5/19 10:51:26 15 分钟阅读
COC部落冲突安卓自动搜鱼:Python脚本防封号实战
1. 为什么需要自动搜鱼脚本玩过《部落冲突》的朋友都知道找鱼资源丰富的对手是个既费时又费力的活儿。每次打开游戏不停地点击下一个按钮眼睛还得紧盯着屏幕生怕错过一条大鱼。我统计过平均要找20-30个对手才能遇到一个资源充足的这个过程可能要花上十几分钟。手动找鱼最大的问题是效率太低。你可能正在上班摸鱼或者晚上睡前想打两把结果时间都耗在找对手上了。更糟的是长时间重复点击还可能导致手指疲劳甚至引发腱鞘炎。我就遇到过这种情况连续找鱼半小时后右手食指明显感到不适。使用脚本自动找鱼的优势很明显解放双手不用一直盯着屏幕可以后台运行不影响你做其他事情搜索速度比人工更快更精准设置好条件后只打符合要求的鱼但要注意的是使用任何自动化工具都有风险。游戏官方禁止第三方脚本所以我们设计的重点是如何让脚本行为更像真人操作降低被封号的风险。这也是为什么我们的脚本要加入随机点击位置、随机间隔时间等防检测策略。2. 环境准备与工具安装2.1 Python环境配置这个脚本需要Python 3.6或以上版本运行。我推荐使用Anaconda来管理Python环境它集成了常用的数据科学库安装起来也很方便。安装步骤访问Anaconda官网下载适合你系统的安装包运行安装程序记得勾选Add Anaconda to my PATH environment选项安装完成后打开Anaconda Prompt测试是否安装成功验证安装conda --version python --version如果都能正确显示版本号说明安装成功。接下来安装必要的Python库pip install pillow opencv-contrib-python pywin32 -i https://pypi.douban.com/simple/2.2 ADB工具配置ADB(Android Debug Bridge)是连接电脑和手机的关键工具。我们需要用它来获取手机屏幕截图并模拟点击操作。安装步骤下载platform-tools工具包约10MB解压到任意目录比如D:\platform-tools添加环境变量将platform-tools目录路径添加到系统PATH中测试ADB连接adb devices这时你的手机应该会弹出允许USB调试的提示点击允许后再次运行上述命令应该能看到设备列表。2.3 Tesseract OCR安装为了识别游戏中的资源数量我们需要OCR工具。Tesseract是一个开源的OCR引擎识别效果不错。安装步骤下载Tesseract安装包约40MB安装时勾选Additional language data下的English同样需要将安装目录如C:\Program Files\Tesseract-OCR添加到系统PATH测试安装tesseract --version3. 脚本核心原理与实现3.1 整体工作流程这个自动搜鱼脚本的工作流程可以分为以下几个步骤通过ADB获取手机当前屏幕截图将截图传输到电脑本地使用OpenCV处理图像截取资源显示区域调用Tesseract识别资源数量判断是否符合肥鱼标准如果符合条件发出提示音并停止搜索如果不符合模拟点击下一个按钮继续搜索整个过程大约每3-5秒循环一次具体间隔时间是随机的这样更不容易被检测到。3.2 防封号关键策略要让脚本安全运行最重要的就是模拟真人操作。我们实现了以下几种防护措施随机点击位置每次点击按钮时会在按钮区域内随机选择点击点而不是固定坐标随机间隔时间搜索间隔在5-6秒之间随机变化避免固定节奏自然操作流程模拟真人操作顺序包括先点击攻击按钮再点搜索等合理频率控制不会不间断运行每次搜索20-30次后会暂停几分钟这些策略使得脚本行为与真人操作几乎无法区分大大降低了被封号的风险。我使用这个脚本已经三个月每天运行2-3小时至今账号状态正常。3.3 核心代码解析让我们看看脚本的几个关键类ScreenCapturer类负责手机屏幕操作class ScreenCapturer: def __init__(self, android_path, trans_path): self.ANDROID_PIC_PATH android_path self.TRANS_PIC_PATH trans_path self.phoneResolution [] def getPhoneScreen(self): os.system(f{adb_path} shell screencap -p /sdcard/screenshot.png) def pointOnPhone(self, x0.0, y0.0): os.system(f{adb_path} shell input tap {x} {y}) # 其他方法省略...PicScanner类处理图像识别class PicScanner: def __init__(self, path): self.filePath path def cutPicToSource(self): im Image.open(f{pic_path}/screenshot.png) width, height im.size img im.crop((0.045*width, 0.105*height, 0.135*width, 0.225*height)) img cv2.cvtColor(np.array(img), cv2.COLOR_RGBA2BGRA) img cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, img cv2.threshold(img, 230, 255, cv2.THRESH_BINARY) cv2.imwrite(f{pic_path}/source.png, img) # 其他方法省略...autoFind类主逻辑控制class autoFind: def __init__(self): self.scanner PicScanner() self.capture ScreenCapturer() self.source {} def beginFind(self): self.capture.getPhoneResolution() self.capture.pointAttackBtn() sleep(1) self.capture.pointSearchAttacker() sleep(random.randint(5000,6000)/1000) while True: print(识别中...) self.capture.getPhoneScreen() self.capture.transPhoneScreen() self.scanner.cutPicToSource() words self.scanner.readPicNum() if len(words) 3 and words[0]2000000 and words[1]2000000: gold, water, oil words if is_fish(gold, water): self.findFish(str(gold), str(water)) break print(f资源: 金币:{gold} 圣水:{water} 黑油:{oil}) self.capture.pointNextAttacker() sleep(random.randint(5000,6000)/1000) # 其他方法省略...4. 参数调优与使用技巧4.1 如何定义肥鱼每个人对肥鱼的定义可能不同。在脚本中我们通过is_fish函数来判断def is_fish(gold, water, oil0): # 默认标准金币圣水150万 if gold water 1500000: return True return False你可以根据自己的需求修改这个条件。比如只打金币100万的if gold 1000000金币和圣水都80万的if gold 800000 and water 800000包含黑油条件的if gold water 1500000 and oil 50004.2 点击位置校准不同手机型号的按钮位置可能略有差异我们需要校准以下几个关键点击位置攻击按钮搜索对手按钮下一个对手按钮结束战斗按钮校准方法用PS打开一张游戏截图将图片尺寸调整为1000×1000像素保持宽高比用选区工具选中按钮区域查看像素坐标计算坐标相对于总尺寸的比例例如搜索按钮可能在(650, 600)-(830, 690)范围内那么代码中对应的比例就是x random.uniform(0.65, 0.83) * width y random.uniform(0.6, 0.69) * height4.3 使用建议运行频率建议每天使用不超过3小时避免长时间连续运行时段选择最好在游戏活跃时段使用比如晚上8-10点配合手动可以先用脚本找到鱼然后手动打这样更安全定期更新游戏更新后要检查脚本是否还能正常工作多账号轮换如果有多个账号可以轮流使用脚本记住没有任何脚本能保证100%不被检测到。如果游戏更新了检测机制或者你的账号行为异常比如连续搜索50次都不打仍然可能被系统标记。所以使用时一定要谨慎不要贪心。

更多文章