前言
- 本教程将会分为多个章节连载,逐渐将开发一个自动化游戏脚本的过程梳理清楚。本系列教程适用于对编程和开发自动化游戏脚本有兴趣的初学者朋友,同时也欢迎大佬的交流指正。专栏不定期更新,关注作者不迷路。
- 此项目由作者于2021年前后开发,最初目的是替代人工完成一些游戏内繁复的操作,省去那些不必要的游戏时间。将此项目的开发思路及源代码整理成文,供后继者参考使用。由于作者是小白,存在诸多不足之处,希望读者批评指正,也欢迎有同好能共同参与对此项目的贡献。
- 关于《部落冲突》:《部落冲突》(Clash of Clans,简称COC)是一款由Supercell开发的策略类手机游戏。该游戏内存在许多频繁又重复的操作(打资源、捐兵),会浪费玩家大量的时间,因此市面上已经诞生了不少游戏脚本。出于防止封号和学习编程考虑,我将自行从头开始开发一个coc脚本。对于其他游戏的自动化脚本编写,原理是一样的。
基础配置
- Windows系统
- Python+IDE(作者用的是PyCharm;除此之外,还有Visual Studio等可使用)
- 安装好游戏《部落冲突》的安卓模拟器(作者用过逍遥和雷电)
核心思路
- 模拟点击:显而易见,要实现自动化的核心在于模拟人类操作。一个方案是使用adb控制手机,另一个方案是用PyAutoGUI库在电脑端实现。鉴于难度和开发效率考虑,作者使用的是后者。此外,PyAutoGUI还能实现简单的UI界面、屏幕截图和分辨率检测等功能。
- 关于坐标:在模拟点击时,绝大多数操作都需要传入游戏对象所在的坐标。由于作者最初没有引入matchTemplate方法(见下文),因此为了适配不同分辨率,作者提前测算好了一些固定按钮的相对坐标(绝对坐标/分辨率),在程序运行时,将自动读取当前设备分辨率,乘上相对坐标计算出在该分辨率下图标的绝对坐标。由于此方法可靠性不如视觉方案(如果你遇上某个按钮的位置在游戏更新中变动,你就知道我在说什么了),后续会逐渐用CV(Computer Vision,计算机视觉)方案替代。
- 资源识别:注意到游戏内资源的显示为数字,我们需要使用OCR (Optical Character Recognition,光学字符识别)实现。当识别到资源数量达到指定阈值时,触发进攻操作。作者暂时使用的是Pytesseract(说到这里顺便吐槽一句,除了pip安装之外,该工具需要额外安装,并且识别结果准确性堪忧,还需要对结果二次校正。目前正在替换为百度飞桨的paddleOCR)。
- 图像识别:OpenCV。我们会用到其中的matchTemplate函数实现对屏幕上游戏图像的匹配。程序通过模板匹配,获取指定图标的在屏幕上的坐标,进而决策进一步操作。在不同的分辨率下,屏幕截图将统一使用cv2.resize函数调整为1920*1080标准,并和1080p下截图的模板进行匹配,最后将识别到的坐标(如果有)再转化为实际分辨率下的坐标。
- 防封号:我们需要使用random库为程序的操作引入一些随机性。
- GUI(尚未实现):可以使用PyQt5库(或其他)实现一个简单的交互界面。
- 机器学习(尚未实现):设想通过机器学习+CV实现一些更复杂的操作,例如AI自动分析阵型并规划流派,完成一次完美的三星进攻。需要写一个coc的模拟器来训练AI,并用CV实现和游戏的高级交互。同时机器学习的方案也会是最高级别的防封号措施。
- yolo(尚未实现):可通过训练后的yolo模型,实现对游戏中变化、运动的复杂对象的识别;在某些高负载场景下,yolo也可能是代替matchTemplate的一个更优解。
环境配置
- python和IDE的安装:
python官网:Welcome to Python.org
pycharm官网:https://www.jetbrains.com/pycharm/
Visual Studio官网:https://visualstudio.microsoft.com/
在官网自行下载适合你的版本并安装。网上有诸多教程,故不赘述。
- 第三方库的安装:在命令行中使用pip安装所有依赖的第三方库(或使用pycharm自动安装),如有遗漏,请自行补全。在后续的教程中我们会用到它们。
pip install pyautogui
pip install opencv-python
pip install pytesseract
pip install pillow
- 安装Tesseract-OCR
Tesseract OCR github地址:https://github.com/tesseract-ocr/tesseract
详细安装教程:Python OCR工具pytesseract详解-CSDN博客
- 安装paddleOCR
paddleOCR github地址:PaddleOCR
官方文档:快速开始 - PaddleOCR 文档
本章完,后续教程更新中