1. 想法

突然想搞一个FGO的脚本,但还是决定先从阴阳师开始入手

毕竟现在版本官方已经有了自动御魂、觉醒和探索的脚本了。

既然是这样那不如就搞一个抽卡的脚本好了,这样大佬(土豪,欧皇)们

几百连抽就不用画符,和点SSR点到手软了XD。

2. 实现

参考了CSDN上两篇关于阴阳师探索和自动御灵的文章

简单讲一下思路:

通过图像识别(使用cv2这个库)来识别开始抽的蓝票、出现SSR(或SR)和十连抽结束这几个需要点按的场景。然后自动点按就可以了。

不简单的讲一下具体实现

(orz简书的markdown不支持流程图)

通过adb截图判断是否在抽卡界面

在的话,使用matchTemplate()函数识别开始召唤的按钮

点击,画符

同样使用matchTemplate()函数和模板对比识别SSR和SR并点击

若识别到“十连召唤”(即抽卡结束)点击返回

小编在此谢谢大家的观看!Python很容易学!所以小编有弄一个交流,互问互答,资源共享的交流学习基地,如果你也是Python的学习者或者大牛都欢迎你来!㪊:548+377+875!一起 学习共同进步!

开始抽卡的时候要识别的区域

出现SSR或SR要识别的区域

结束时要识别的区域

这里主要通过adb来实现对手机的模拟点按和滑动(手机

记得要开USB侦错啊QWQ)

import os#模拟点按def tap(x0, y0):

cmdTap = 'adb shell input tap {x1} {y1}'.format(

x1=x0,

y1=y0

)

print(cmdTap)

os.system(cmdTap)#模拟滑动(用来画符的)def swipe(x0, y0, x1, y1, delay0):

cmdSwipe = 'adb shell input swipe {x2} {y2} {x3} {y3} {delay1}'.format(

x2=x0,

y2=y0,

x3=x1,

y3=y1,

delay1=delay0

)

print(cmdSwipe)

os.system(cmdSwipe)#截图并返回图片def screenshot():

os.system('adb shell screencap -p /sdcard/sh.png')

os.system('adb pull /sdcard/sh.png .') return "sh.png"

上面这个基本上是对手机的所有操作OWO。

(我将这个单独保存在了项目目录的/lib/ats.py中,这样主程序就可以直接调用啦XD)

然后来讲一下这里最核心的操作:图像识别orz

#我们要用的其实就只有这一个库import cv2#不过我们还是要。。。import timeimport randomimport lib.ats #233 这个就是刚才那段代码import numpy as np

好的我们先来个例子,就从识别开始抽卡的按钮开始。。。

def start(sh):

#一看就知道是导入图片orz

imgSTART = cv2.imread(sh, 0)

templateSTART = cv2.imread('res/START.png', 0) #我的模板保存在了项目目录的/res文件夹里

#和模板对比

resSTART = cv2.matchTemplate(imgSTART, templateSTART, cv2.TM_CCOEFF_NORMED)

thresholdSTART = 0.85

pos = [] #如果result大于threshold才可以执行(不在界面你抽个啥)

if (resSTART >= thresholdSTART).any():

loc = np.where(resSTART >= thresholdSTART) for pt in zip(*loc[::-1]): #刚学Python没多久,我只知道这个压缩后切片QAQ

pos.append(pt) #更新list

return pos #返回按钮位置

else: return 0

然后是抽到SSR的时候(其实这个完全可以不写,因为SSR根本不存在(手动滑稽)XD)

def ssr(sh):

#这个不随机点说不定有封号的可能。。。

xSSR = random.randrange(800, 1200)

ySSR = random.randrange(400, 800) #导入图像和模板

imgSSR = cv2.imread(sh, 0)

templateSSR = cv2.imread('res/SR.png', 0) #和模板对比

resSSR = cv2.matchTemplate(imgSSR, templateSSR, cv2.TM_CCOEFF_NORMED)

thresholdSSR = 0.30 #这里啊QAQ可能是我的模板不是很好,大于0.3基本识别不出来

#只要有SSR就行了,然后点一下

if (resSSR >= thresholdSSR).any():

lib.ats.tap(xSSR, ySSR)

SR和这个代码其实是一样的,无非就是模板不同orz.

但我的模板实在是太辣鸡了所以我把threshold设成了0.3(也就是说只要30%匹配就行了orz)所以。。。我的SSR和SR识别都混在了一起,也就是说无论出的是SR还是SSR都会按两次QAQ(R的话想必也是这样,只是用了图片测试。。。并没有票给我测试QAQ

结束的识别和点击其实也和这个也差不多。。。

好了基本上就只剩下主程序的代码了OWO

主程序无非就是搞一个循环不断地截图,判断有没有出SR或SSR还有是不是已经抽完了而已

def main():

#里面的delay gap x1 y1 x2 y2 dly 都随机产生这里就懒得写了XD

#这里是截图判断是否在抽卡界面

sh = lib.ats.screenshot()

pos = start(sh) if pos != 0:

lib.ats.tap(pos[0][0], pos[0][1]) #从刚才的代码可以看到返回的是二维数组我们就选第一个好了

lib.ats.swipe(x1, y1, x2, y2, dly)

time.sleep(delay) #十连开始还有点动画的(感觉这个不加也行)

while lib.ats.screenshot(): #不断的截图Zzz...

gap = random.uniform(0.5, 1.5)

time.sleep(gap)

sh = lib.ats.screenshot() if end(sh) == 1: #抽卡没结束(匹配率低于threshold)返回1,否则返回0

ssr(sh)

sr(sh) elif end(sh) == 0: #结束的时候随机按一下

xEND = random.randrange(800, 1200)

yEND = random.randrange(400, 800)

lib.ats.tap(xEND, yEND)

print("Finished") break

else:

print("Error") #如果不在抽卡界面的话。。。

OWO基本上整个程序的吗都打上来了。。。

整个完整的项目已经放到了Github上面,想看完整的就自己去看看咯QWQ

3. 总结

我觉得其实没什么好总结的orz

其实感觉抽卡的脚本真的没什么用。。。

python阴阳师脚本_用Python实现抽卡的脚本相关推荐

  1. 用Python简单模拟《原神》抽卡系统

    用Python简单模拟<原神>抽卡系统[抽卡模拟器] 简介 代码思想 保底机制 概率 概率公式 代码构建 导入软件包random和os 初始化概率 增加概率 保底机制 创建文件夹 抽卡次数 ...

  2. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  3. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  4. python实现阴阳师自动刷御魂脚本_用Python实现FGO自动战斗脚本

    我家黑贞! 1. 背景 Fate/Grand Order(非的肝不过欧的)作为索尼为了拯救自己不倒闭而开发的面向月厨的骗氪养成抽卡爆肝游戏,居然没有像隔壁<阴阳师>的自动战斗系统(看看别人 ...

  5. python黑科技脚本_利用Python实现FGO自动战斗脚本,再也不用爆肝啦~

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 利用Python实现FGO自动战斗脚本,再也不用爆 ...

  6. python写自动脚本_用Python实现FGO自动战斗脚本

    我家黑贞! 1. 背景 Fate/Grand Order(非的肝不过欧的)作为索尼为了拯救自己不倒闭而开发的面向月厨的骗氪养成抽卡爆肝游戏,居然没有像隔壁<阴阳师>的自动战斗系统(看看别人 ...

  7. python写魔兽世界脚本_用python bat写软件安装脚本 + HM NIS Edit自动生成软件安装脚本...

    2019-03-11更新:原来NSIS脚本也可以禁用64位文件操作重定向的! 1.在安装脚本的开始处定义 LIBRARY_X64. !include "MUI.nsh" !incl ...

  8. python 首次登陆outlook 脚本_记Python“用户环境”的一次完美应用

    在之前写过一篇关于虚拟环境使用的文章,但是还没有好好的介绍一下 Python 的用户环境,原因是自己一直没遇到要使用 用户环境 的使用场景,所以就一直懒得写.恰巧这两天,自己遇到了一个使用用户环境的体 ...

  9. python sql脚本_使用Python SQL脚本进行数据采样

    python sql脚本 介绍 (Introduction) The Python programming language is object oriented, easy to use and, ...

最新文章

  1. DIV限制宽度,字符断行,避免变形
  2. Android 工程报错解决 Unable to resolve target 'android-17'
  3. 数据挖掘学习05 - 使用R对文本进行hierarchical cluster并验证结果
  4. python批量读取dbf_Python 读取DBF/FPT 文件
  5. 嵌入式NVR发展浅析
  6. 注意!毕业后这些专业就业难,IT相关专业月收入领跑Top5
  7. Redis有哪几种数据淘汰策略?
  8. 每个程序员都应该知道的5个定律
  9. (二)Netty之IO模型
  10. 大数据是国家目前急需的技术领域
  11. Android TextView之空格占位法
  12. LNMP详解(六)——Nginx location语法详解
  13. editormd html 转义,Markdown(editormd)语法解析成HTML
  14. java中如何确定表的列宽,excel列宽怎么设置_javaexcel怎么设置所有列宽
  15. 【NeoVim Coc.nvim】禁用从文档内提取字段的补全选项(禁用带有“yank”的补全选项)
  16. 阿兹猫 的 Java模拟登陆QQ邮箱获取好友列表的实现
  17. 5.14 按照字体颜色对已拓展的客户数进行排序 [原创Excel教程]
  18. jre包括jvm和java核心类库_包含JVM标准实现及Java核心类库
  19. mysql 去除微秒_mysql的微秒补丁 - sihanjishu的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  20. 赵小楼《天道》《遥远的救世主》深度解析(132)客观的客观的客观,因果的因果的因果

热门文章

  1. 变电站/配电房智能轨道巡检机器人系统
  2. (Python、mysql、机器学习与数据挖掘)小硕的自我修养进阶
  3. Python爬虫日记-解释def __init__(self, *args, **kwargs)
  4. juce: 跨平台的C++用户界面库
  5. 图片上传与excel的导出
  6. 伪静态以及应用(rewrite)
  7. 天宝Trimble Data Transfer安装并传输数据
  8. 用文字编辑图片的神器-Imagic
  9. ENET(四)enet_protocol_send_acknowledgements
  10. BootStra相关脚本引用说明