碧蓝航线-传颂之物脚本(部分)
Posted magnet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了碧蓝航线-传颂之物脚本(部分)相关的知识,希望对你有一定的参考价值。
碧蓝航线新出的联动图SP4
由于这游戏过于的肝 想要解放自己的双手 所以想写一段电脑自己操作的脚本进行自己代挂
代码本身理解十分简单 整个过程只是比较繁琐 后面一段时间因为自己的原因有事情而未全部完成
希望下次如果有这种比较简单的机制的活动时 你也能解放自己双手
该代码需要adb(百度一下 很简单的连接) 网易mumu模拟器 屏幕为:1440 x 810(其他的也行 需要知道连接代码 比如我用的mumu:"adb connect 127.0.0.1:7555") 还需要一张结算图和一张boss图进行结算和攻击的匹配
上代码分析:
import os import random import time import cv2 import numpy as np import win32api #这些包用pycharm安装分分钟的事 #连接mumu模拟器 首先先断开服务再执行连接 def Connection(): cmd = ‘adb kill-server‘ tmp = os.popen(cmd).readlines() cmd = ‘adb connect 127.0.0.1:7555‘ tmp = os.popen(cmd).readlines() print(tmp) #模拟点击 这个是代码的核心 也是繁琐的根源 def Click(x,y): cmd = ‘adb shell input tap {x1} {y1}‘.format(x1 = x,y1 = y) print(cmd) os.system(cmd) #模拟滑动 最后一关boss并未在我切换2队的页面 所以得滑动一段固定的距离让boss关出现在我切换2队后的页面 def Slide(x,y,x3,y3): cmd = ‘adb shell input swipe {x1} {y1} {x2} {y2}‘.format(x1=x, y1=y,x2=x3,y2=y3) print(cmd) os.system(cmd) #通过adb进行截图 让后面图片的匹配有基准 def Screenshot(): os.system(‘adb shell screencap -p /sdcard/loading.png‘) os.system(‘adb pull /sdcard/loading.png‘) return "loading.png" #boss关的位置匹配 def BossCde(BossMap): img = cv2.imread(BossMap,0) template = cv2.imread(‘boss.png‘,0)#分别加载boss和当前场景的图片 res = cv2.matchTemplate(img,template,cv2.TM_CCOEFF_NORMED) threshold = 0.80#匹配精确度 gps = [] loc = np.where(res >= threshold) for pt in zip(*loc[::-1]): gps.append(pt)#将匹配到的位置添加到gps列表中 return gps #打开mumu自动登录时到登录界面进行匹配 因为每次更新都会换登录界面 当然如果你手动登上去了这就不需要了 def Identification1(loading): img = cv2.imread(loading,0) img_gray = cv2.cvtColor(img,cv2.COLOR_BAYER_BG2GRAY) template = cv2.imread("lon.png",0) res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED) threshold = 0.9 print(res) if res[0] > threshold: Click(400,400) else: print("需要更新版本") #关卡结算匹配 def Identification2(loading): img = cv2.imread(loading,0) img_gray = cv2.cvtColor(img,cv2.COLOR_BAYER_BG2GRAY) template = cv2.imread("Atk2.png",0)#与结算界面进行匹配 res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED) threshold = 0.7 if res[0] > threshold: time.sleep(1) Click(1225,680) time.sleep(2) Click(1225, 680) time.sleep(4) Click(1225, 680) time.sleep(2)#因为结算完了这几次点击返回到地图界面这几次点击中每点一次就会出现一点延迟 如何不加sleep()回出现代码跑完但结算不出 return 1 #自动启动mumu模拟器 这是我的电脑上mumu 的位置 def Lon(): win32api.ShellExecute(0, ‘open‘, ‘F:\emulator\nemu\EmulatorShell\NemuPlayer.exe‘, ‘‘, ‘‘, 1) time.sleep(25) Connection() Click(216,117) #登录总流程 def LonIn(): Lon() time.sleep(25) Identification1(Screenshot()) Click(760,345) #开始我们的自动(需要进入到四个选择sp界面执行) def Activity(): Click(733, 418) time.sleep(1) Click(1040,543) time.sleep(3) Click(1195,700) time.sleep(3) Click(860,665) time.sleep(5) Click(556,552) time.sleep(3) Attack() time.sleep(3) Click(700, 440) time.sleep(3) Attack() time.sleep(3) Click(830, 350) time.sleep(3) Attack() time.sleep(3) Click(985, 420) time.sleep(3) Attack() time.sleep(3) Click(1143, 551) time.sleep(3) Attack() time.sleep(3) Click(1067, 756) time.sleep(1) Click(713, 183)#这一步是存在问题 因为这个点的关卡是随机刷的 很可能未刷出来 导致程序一直卡在结算界面 需要完善(进行更多的判断) time.sleep(3) Attack() time.sleep(3) Slide(1210, 166, 1210, 676) p = BossCde(Screenshot()) print(p) Click(p[0][0] + 50, p[0][1] + 50) time.sleep(7) Attack() time.sleep(4) #攻击结算匹配 到出击界面后执行即可完成关卡的结算 def Attack(): n = 0 Click(1200,720) for i in range(1,180): if n >= 65: TF = Identification2(Screenshot()) if TF == 1: break time.sleep(10)#曾经用过一秒一秒的刷 但是发现内存是个问题 适自己的队打的普遍时间定 n += 1 else: n += 1 time.sleep(1) Connection()#首先连接上mumu Activity()#从四张sp图中自动选择 并执行代挂流程
总结:
代码瑕疵比较多,因为是半成品很多地方需要进行完善,比如中途出现紫皮船及new回出现少点击一下而卡在结算界面出不来、当打完接到了紧急委托(尤其是晚上)将无法进行识别也会导致代码功能错乱、当船坞满了的时候也会出现匹配选择问题、还有代码中提及的倒数第二关的判断等,这些就是主要的问题,我希望读者能以我这个案列为例下次给自己写一个好点的脚本代码,因为代码本身思想很简单所以简单关卡实现起来并不是很难。养养肝吧。233
以上是关于碧蓝航线-传颂之物脚本(部分)的主要内容,如果未能解决你的问题,请参考以下文章
;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk
2015.12.14 MDI(多文档窗口结构)设置基本解决,折腾一天,部分解决存在已久的问题。但效果仍不如临时航线的MDI窗体结构。