用Python實(shí)現(xiàn)陰陽(yáng)師自動(dòng)結(jié)界突破

把我家御饌津當(dāng)封面OwO

1. 想法

陰陽(yáng)師作為一個(gè)過(guò)氣游戲纵势,非常識(shí)時(shí)務(wù)的給覺(jué)醒踱阿、御魂和探索加上了官方的腳本(壓了等級(jí),估計(jì)御靈也有)钦铁。但問(wèn)題就是软舌,結(jié)界突破官方并沒(méi)有加上腳本,而只有一個(gè)“鎖定陣營(yíng)”育瓜。所以就決定搞一個(gè)結(jié)界突破的腳本XD

2. 基本思路

我們先以個(gè)人結(jié)界突破為例子葫隙,如圖:

個(gè)人結(jié)界突破界面

我們選定三個(gè)特征點(diǎn)(紅圈的位置),然后以這三個(gè)坐標(biāo)為基準(zhǔn)躏仇,基本上就可以搞定這九個(gè)結(jié)界的位置恋脚,在這里不多做贅述腺办。我們主要想實(shí)現(xiàn)的是陰陽(yáng)寮結(jié)界突破的腳本(寮突破加的經(jīng)驗(yàn)又少,還不消耗突破券糟描。多勛章或者是低等級(jí)的結(jié)界都有怀喉,簡(jiǎn)直是為我這種壓級(jí)的所準(zhǔn)備的XD)

好的,我們來(lái)看陰陽(yáng)寮突破的界面船响,如圖:

陰陽(yáng)寮突破界面

這里我們同樣選擇選擇三個(gè)特征點(diǎn)(紅圈)來(lái)定位躬拢。我們?nèi)缓笏愠鲞@三點(diǎn)坐標(biāo)的平均坐標(biāo),大致就位于畫(huà)面的中間位置见间,然后加上隨機(jī)函數(shù)聊闯,這樣大致模擬點(diǎn)按的就是綠色的區(qū)域。但這樣還是有問(wèn)題米诉,如果我們?nèi)说念^像就比較麻煩(這個(gè)我們后面在實(shí)現(xiàn)的時(shí)候會(huì)講到)
點(diǎn)按之后界面就會(huì)變成這樣菱蔬,我們要做的就是識(shí)別出“挑戰(zhàn)”這個(gè)按鈕的位置然后點(diǎn)擊

簡(jiǎn)單來(lái)說(shuō)就是點(diǎn)擊“挑戰(zhàn)”

當(dāng)然我們要保證已經(jīng)鎖上了陣營(yíng),點(diǎn)擊“挑戰(zhàn)”之后這樣就不用手動(dòng)點(diǎn)開(kāi)始了
好的史侣,當(dāng)我們勝利之后拴泌,如果不進(jìn)行操作,最后會(huì)到這樣的位置:

勝利的界面

這個(gè)地方很明顯有一個(gè)打開(kāi)的達(dá)摩(還是啥玩意兒orz)我們只有識(shí)別到黃圈的部分就可以了惊橱,然后隨便按一下蚪腐。
但如果輸了的話(huà),我個(gè)人認(rèn)為用“薙魂”這個(gè)圖標(biāo)會(huì)比較好税朴,不過(guò)旁邊的“式神強(qiáng)化”什么的也都可以啦OwO回季,然后隨便點(diǎn)一下就行了。

失敗的界面

我在這里會(huì)考慮終止腳本(總不能一直輸吧掉房。茧跋。。不過(guò)倒也無(wú)所謂卓囚,陰陽(yáng)寮突破每小時(shí)只有6次233)
基本腳本的思路就是這樣的瘾杭,下面就來(lái)看怎么實(shí)現(xiàn)吧OwO

3. 實(shí)現(xiàn)

需要的模塊和模擬點(diǎn)按的實(shí)現(xiàn)什么的都在上一篇關(guān)于抽卡的腳本的文章里講了,這里就不再贅述了
有了基本的思路哪亿,然后我們照著這個(gè)思路來(lái)寫(xiě)代碼就可以了QWQ

  • QAQ我還是加上我們要用的庫(kù)吧(經(jīng)某些同學(xué)提醒)粥烁,另外我們還要裝上adb(本來(lái)覺(jué)得上一篇提到過(guò)了就可以不提了orz)
import time  # 延時(shí),例如戰(zhàn)斗完后會(huì)有一點(diǎn)動(dòng)畫(huà)效果
import cv2  # OpenCV的庫(kù)蝇棉,也就是我們圖像識(shí)別要用到的
import lib.ats  # 自己建的XD里面放的是Android操作的函數(shù)(點(diǎn)按讨阻,滑動(dòng),截圖的操作篡殷,具體在我上一篇文章有提到)
import random  # 隨機(jī)數(shù)钝吮,防封號(hào)用的
import numpy as np  #這個(gè)嘛orz。。奇瘦。
  1. 首先是界面的識(shí)別
def base(sh):
    img = cv2.imread(sh, 0)
    template1 = cv2.imread('res/dorm_loc1.jpg', 0)  # 我把所有的模板放到了Project里面的/res文件夾中
   # 導(dǎo)入模板圖片棘催,還有template2 和template3 也是一樣的操作
    res1 = cv2.matchTemplate(img, template1, cv2.TM_CCOEFF_NORMED)
    # 這里是匹配率 res2 和 res3 也是相同的代碼
    threshold = 0.75
    pos1 = []
    # 坐標(biāo)的數(shù)組(吧)pos2 和 pos3 也是一樣的操作
    loc1 = np.where(res1 >= threshold)
    for pt1 in zip(*loc1[::-1]): # 壓縮
        pos1.append(pt1)
    # 對(duì) pos2 和pos3 也是相同的操作
    tapX = (pos1[0][0] + pos2[0][0] + pos3[0][0]) / 3
    tapY = (pos1[0][1] + pos2[0][1] + pos3[0][1]) / 3
    # 計(jì)算平均值,得出中心的坐標(biāo)
    tap_loc = [tapX, tapY]  # 中心的坐標(biāo)
    return tap_loc
  1. 然后是隨機(jī)點(diǎn)按(一個(gè)目標(biāo))
def tap_range(org_loc):
    orgX = org_loc[0]
    orgY = org_loc[1]
    # 隨機(jī)函數(shù)
    tapX = orgX + random.uniform(-100, 600)
    tapY = orgY + random.uniform(-300, 300)
    # 真正點(diǎn)按的坐標(biāo)
    tap_loc = [tapX, tapY] 
    return tap_loc
  1. 識(shí)別“挑戰(zhàn)”按鈕并點(diǎn)擊耳标,這里的代碼和前面的識(shí)別界面“特征點(diǎn)”的代碼并沒(méi)有什么區(qū)別
def start(sh):
    # 導(dǎo)入截圖和模板 
    img = cv2.imread(sh, 0)
    template = cv2.imread('res/start.jpg', 0)
    res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)  # 匹配
    threshold = 0.7
    pos = []
    loc = np.where(res >= threshold)  # 找到高于threshold的坐標(biāo)
    for pt in zip(*loc[::-1]):
        pos.append(pt)
    lib.ats.tap(pos[0][0], pos[0][1])  # 我們只取第一個(gè)醇坝,并點(diǎn)按
  1. 對(duì)于“勝利”“失敗”和一不小心點(diǎn)到頭像的情況和上面識(shí)別“挑戰(zhàn)”都是差不多的
    #前面的代碼和上面的是一樣的
    # 判斷是否出現(xiàn)這樣的畫(huà)面
    if (res >= threshold).any():
        # 點(diǎn)按或者返回某個(gè)值,例如:(配合主程序的條件語(yǔ)句)
        return 1
  1. 我們把上面的函數(shù)按照順序在main里面依次調(diào)用就行了QWQ
def main():
    for i in range(6):  # 因?yàn)殄纪黄泼啃r(shí)只有6個(gè)所以用for就行了
        sh = lib.ats.screenshot()
        tap_base = base(sh)
        # 這里選擇突破的目標(biāo)
        tap_loc = tap_range(tap_base)
        lib.ats.tap(tap_loc[0], tap_loc[1])
        # 判斷是否錯(cuò)誤點(diǎn)按
        while lib.ats.screenshot():
            sh = lib.ats.screenshot()
            if special(sh) == 1: # 如果剛好點(diǎn)到了人的頭像上次坡。呼猪。。
                # 重新選擇突破的目標(biāo)
                # 重新執(zhí)行上面選擇突破的目標(biāo)的代碼即可
            else:
                break
        # 這里要再次截圖
        start(sh) # 開(kāi)始突破
        # 重復(fù)截圖砸琅,判斷戰(zhàn)斗是否結(jié)束
        while lib.ats.screenshot():
            time.sleep(1)
            # 隨機(jī)設(shè)定x1和x2
            judge = lib.ats.screenshot()
            if win(judge) == 1:  # 贏(yíng)的話(huà)
                lib.ats.tap(x1, y1)
                break  # 僅僅是退出這個(gè)小循環(huán)
            elif lose(judge) == 1:  #輸?shù)脑?huà)
                lib.ats.tap(x1, y1)
                break
                # 退出這個(gè)小循環(huán)之后還有終止整個(gè)大循環(huán)

orz又是基本把所有代碼都寫(xiě)出來(lái)了(不過(guò)還是省略了很多宋距,直接copy過(guò)去肯定是不行的XD)

4. 思考

寫(xiě)完這個(gè)腳本之后,發(fā)現(xiàn)這個(gè)腳本和之前的腳本都會(huì)頻繁的使用到cv2庫(kù)中的某幾個(gè)函數(shù)明棍,所以想了一下干脆把那他們打包成函數(shù)直接調(diào)用乡革,這樣應(yīng)該就省事很多OwO

# 如果我們識(shí)別圖像后還要返回位置的話(huà)
def location(sh, tmp, thd):  # 分別是原圖片(路徑),模板(路徑)摊腋,和threshold
    img = cv2.imread(sh, 0)
    template = cv2.imread(tmp, 0)
    res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
    threshold = thd
    pos = []
    loc = np.where(res >= threshold)
    for pt in zip(*loc[::-1]):
        pos.append(pt)
    return pos
# 如果我們只要識(shí)別圖像的話(huà)
def check(sh, tmp, thd):
    img = cv2.imread(sh, 0)
    template = cv2.imread(tmp, 0)
    res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
    threshold = thd
    if (res >= threshold).any():
        return 1

5. 總結(jié)

總體來(lái)說(shuō),這個(gè)腳本和上一個(gè)抽卡那個(gè)大同小異233
然后因?yàn)槿藨朽铱瑧械脤?xiě)個(gè)人寮突破的腳本(反正原理都是一樣的嘛OwO)
PS:說(shuō)實(shí)話(huà)個(gè)人突破的那個(gè)九宮格其實(shí)還是相當(dāng)麻煩的兴蒸,因?yàn)殄冀Y(jié)界突破后會(huì)直接掉到后面去,也就是說(shuō)界面上一的都是沒(méi)被突破的细办,但個(gè)人結(jié)界就不是這個(gè)情況QAQ
東西也放到Github了哦橙凳,同樣有什么問(wèn)題記得回復(fù)QWQ

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市笑撞,隨后出現(xiàn)的幾起案子岛啸,更是在濱河造成了極大的恐慌,老刑警劉巖茴肥,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坚踩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡瓤狐,警方通過(guò)查閱死者的電腦和手機(jī)瞬铸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)础锐,“玉大人嗓节,你說(shuō)我怎么就攤上這事〗跃” “怎么了拦宣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鸵隧,道長(zhǎng)绸罗,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任掰派,我火速辦了婚禮从诲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘靡羡。我一直安慰自己系洛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布略步。 她就那樣靜靜地躺著描扯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趟薄。 梳的紋絲不亂的頭發(fā)上绽诚,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音杭煎,去河邊找鬼恩够。 笑死,一個(gè)胖子當(dāng)著我的面吹牛羡铲,可吹牛的內(nèi)容都是我干的蜂桶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼也切,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扑媚!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起雷恃,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疆股,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后倒槐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體旬痹,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年导犹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了唱凯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谎痢,死狀恐怖磕昼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情节猿,我是刑警寧澤票从,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布漫雕,位于F島的核電站,受9級(jí)特大地震影響峰鄙,放射性物質(zhì)發(fā)生泄漏浸间。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一吟榴、第九天 我趴在偏房一處隱蔽的房頂上張望魁蒜。 院中可真熱鬧,春花似錦吩翻、人聲如沸兜看。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)细移。三九已至,卻和暖如春熊锭,著一層夾襖步出監(jiān)牢的瞬間弧轧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工碗殷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留精绎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓锌妻,卻偏偏與公主長(zhǎng)得像捺典,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子从祝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. 想法 突然想搞一個(gè)FGO的腳本,但還是決定先從陰陽(yáng)師開(kāi)始入手畢竟現(xiàn)在版本官方已經(jīng)有了自動(dòng)御魂引谜、覺(jué)醒和探索的腳...
    Meowcolm024閱讀 4,770評(píng)論 2 2
  • 如果可以接受自己也不那么完美牍陌,就不用忙著去粉飾了;如果可以承認(rèn)自己并不那么偉大员咽,就不用急著去證明毒涧;如果可以放棄自己...
    喻豆豆閱讀 187評(píng)論 0 1
  • 沉默是黎明的死亡 孤零揉碎寂靜草塘 我飄在,黑碾壓的云上 冥燈照亮棺楯的結(jié)角 看不見(jiàn)的便是最終方向 那里贝室,沒(méi)有曙光...
    南船北海閱讀 210評(píng)論 0 1
  • 第一家 總之不知是運(yùn)氣還是新公司缺人契讲,我已經(jīng)進(jìn)過(guò)兩家新公司了。新公司呢顧名思義就是新開(kāi)的滑频,并且傳媒行業(yè)發(fā)展得如火如...
    陳苡安閱讀 715評(píng)論 2 0