Python:从FGO中解放双手

图片来自p站

前言

我还是来讲一下写一个完整的FGO脚本的思路吧QWQ,具体代码的实现就不说了,直接到GitHub上面看代码就是了。
不过前期的准备还是讲一下吧owo,主要用到ADB对手机进行操作,Python的话需要cv2(opencv-python),PIL(pillow),pytesseract和numpy这几个库。剩下的话就是怎么写的问题了。

界面识别

只要肝过FGO再分析一下基本上可以把FGO的界面分成3类:

  1. 一般的界面,像是按“下一步”,选择关卡什么的。
  2. 战斗的界面,也就是选择指令卡的界面。
  3. 结束的界面,就是“点击屏幕继续”的界面。

呃不过还有像是选择助战之类的就另当别论了。

这个其实很简单,使用OpenCV库里面的matchTemplate()函数识别出按钮的位置并点按就可以了。而结束界面和选择助战的界面其实只要随便在其上面点按即可,基本没有什么难度。这里也不再多作赘述,因为最主要的指令卡的选择。

核心算法

这一part主要讲述指令卡的识别和选择。

指令卡识别

首先我们要做的其实是识别5张指令卡的种类(Quick Arts Buster)和状态(克制 抵抗)。这个和前面的界面识别其实也差不多,但做法稍微有些不同。我们需要把界面切割成五份,刚好把每张指令卡给截出来,然后便可把每张卡的种类状态和坐标给识别出来并记录下来(也就是要有一个class 是关于 order cards的),然后这些数据后面会用到。

从者的识别

这一个part就比较tricky了,因为我们没办法把所有的从者的头像给爬下来,所以我们要用另外的方法。想法便是从指令卡上截取从者的头像并保存下来,然后我们会遇到以下情况:

  1. 截下时刚好包括了三个从者,这样我们之后就不需要再截从者的头像了。
  2. 截下时未满三个,这样的话我们之后还要还要再截取新的从者的头像。

这样之后我们再帮每张卡标记上从者就可以了,另外如果同一从者的卡片对于三张则给它们一个标记(给后面Brave Chain的识别用)。
从者的识别还有另外的用处,那就是给后面宝具卡的识别使用XD

如果感兴趣的话。。。
识别流程
简书没有流程图orz,这里详细讲一下识别流程

  1. 把裁剪出来的每张指令卡中的从者头像裁剪出来(相当于会输出五张图,里面会有相同的从者,图片的名字和截出来指令卡的名字相对应)
  2. 将从者的头像与其他的指令卡匹配,如果是同一从者这删去多余的该从者,若不同则保留。最后会剩下1-3张从者头像
  3. 将剩余的从者头像另外保存为从者模板(template)
  4. 在以后的识别了,优先识别模板里的从者,若界面有出现除模板从者以外的从者则将该从者的头像截下并保存为模板
  5. 循环XD,然后在每次开脚本时清除就好了

伤害计算

还是这张表

因为我们之前给每张卡都标记过了种类,状态,从者所以我们只需要依据这张表把我们的数据和这张表格匹配就好了OWO

可以知道对伤害主要影响的因素是卡的种类出牌顺序,和Extra Attack卡,至于具体的实现。。。感觉说起来挺绕的,可能看代码更直接一点QAQ

宝具识别

感觉宝具的识别是最麻烦的,我也只是最近才写了出来,后面的代码真的是越写越乱QAQ,但也不妨说一下。

首先我们要识别到宝具卡,因为我们之前已经有识别从者并且将其截下了,所以并没有什么大问题。

真正有问题的是何时放宝具orz,我个人想法是用tesseract识别回合数并在最后一回合放宝具,当然,每个人的想法不尽相同,这个就自己决定吧OWO

磕苹果

这里来讲一下磕苹果的问题,其实我们并不需要识别剩余体力(这样太麻烦了QAQ),所以我的想法是当点击关卡是出现体力不足的时候自动磕苹果,然后自己可以设定磕到苹果的数量就可以了OWO

附1:使用教程(中文版)

  1. 安装ADBTesseractPython(推荐用Homebrew安装adb和tesseract)
  2. 通过pip安装opencv-pythonpytesseractpillownumpy
  3. 将Android手机(开启USB调试,屏幕分辨率要求1080p)连接电脑
  4. 按自己的需求配置config.py文件
  5. 运行脚本

附2:源码等

其实前面已经放过一次了,这里再放一次OWO:GitHub
至于还有什么。。。到时候再补充吧OWO

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351