小屋創作

日誌2021-07-17 17:30

【ウマ娘】馬肉工廠(2021/9/7更新版)

作者:提督—哞咖可利斯特

[版本更新]

因應遊戲版本更新增加的育成選擇頁面及新技能圖示,修正相關問題,同時針對程式運行效率進行改良。


目前不打算製作新育成的腳本,一是因為我懶,二是新育成的訓練選擇須考量的要素過多,讓機器僅根据幾個條件判斷恐怕效果不佳。

更新檔

更新方法:

update2021-09-07.zip解壓縮,把update資料夾丟入uma_factory資料夾,進入update資料夾,執行update.bat,等待出現「更新結束」訊息後便可關閉命令題是字元,並將update資料夾刪除,更新結束。

※此文章包含遊戲自動化腳本,不喜慎入























[Uma Factory]


[動機]

在介紹此程式的功能前,先來分享為什麼我要做這個程式好了。

其實在之前某次卡池100抽0SSR我就產生退坑馬娘的想法了,可能有人會覺得才非一次就要退坑也太玻璃心,但要知道這遊戲在沒課金的情況下能得到的水晶蘿蔔()是極少的。

如果你還是個剛入坑的新手可能還沒有感覺,但只要你把主要任務都解完,把馬娘的故事都看完,就會發現沒礦可挖了,你剩下的蘿蔔來源只有每日任務(+30)、競技場(+25~250)、公會(+150~3000)。

就算你足夠優秀,能夠一直保持在C6競技場,也有幸待在一個成員都不用睡覺、24小時拼命刷粉的公會,在一個月能夠獲得最大限度的蘿蔔也只有30*30+250*4+3000=4900個。

那麼請問4900是這遊戲的幾抽呢?4900/150≒32.67,也就是100抽的三分之一,這個遊戲的保底是幾抽呢?是200抽,也就是說,在無課金的狀態下,你想在馬池或卡池穩定獲取至少一張你的目標,至少得維持頂尖玩家的狀態半年,剩下全憑遊戲舉辦的競賽活動及Cy零碎的施捨。

就因資源取得是如此的困難,在單一卡池投入大量資源卻毫無長進的結果對無課玩家肯定是重傷,甚至把帳號刪掉重新刷首抽的結果還可能優於現在的情況。

你可能會想說玩個遊戲幹嘛這樣?就休閒玩就好了R,抽不到好卡還是能享受這個遊戲吧?

這個遊戲叫做「賽」馬娘,遊戲的目標就是把自己養的馬放上競技場和別人養的比賽,這便是整個遊戲的核心,是育成的目的。

如果你是因為單純想享受育成的過程和馬娘的故事,那就應該把縮短劇情功能給關閉,我不能理解一個重複按按鈕看畫面閃來閃去還有數值增降的遊戲有什麼好玩的。

正如上面所述,把整個遊戲的劇情給去除剩下的就只是個「看哪個按鈕能讓數字一次提升最多就按哪個按鈕」的遊戲而已,再來就是看你的馬屌虐電腦,或是被電腦屌虐。

這個遊戲對我來說就是如此的單調,當然也不是說毫無變化性,像是賽前心情三連降、1番人氣出走18着、死不出的金技、治了5次還治不好的偏頭痛等驚喜。一隻馬還沒養完,我可能都要從低血壓變成高血壓了。

就這樣,玩馬娘對我來說從娛樂變成了折磨,如果真要休閒玩這遊戲,我唯一能做的大概只有切回主頁面看著我的馬傻笑+流口水而已了。

(小劇場↓)

原本我是打算直接退坑的,不過想想如果我真的把一個能自動養馬的程式給做出來,看電腦代替我受苦的樣子其實也挺有趣的,再加上這個學期學到一些影像處理的基本技術,讓我覺得這個計畫是可行的,暑假的時間也夠充裕讓我研究該怎麼做,於是「馬肉工廠」就誕生了。

[功能介紹]

根據使用者輸入想要育成的馬娘、種馬資訊、目標能力值、技能、賽程表等資訊(客製化養馬),讓電腦自動育成,並盡可能達成目標。

單次育成時長約為1小時


↑選擇想育成的馬娘



↑選擇想育成的次數&TP不足的方案



↑輸入種馬資訊,以便電腦選擇



↑輸入想達到的能力值(不一定會達到,視使用者的卡片搭配),電腦會以此判斷使用的育成設施


↑選擇想參加的比賽


↑選擇想獲取的技能(未選擇的技能一定不會獲取)


※此程式僅適用於DMM版賽馬娘

完成這些設定後,只要按下網頁左上角的啟動鍵,便會開始自動養馬。若想中途停止程式運行,只要按下Esc鍵即可。
如果覺得每次都要輸入這些資訊太麻煩,可以按下啟動鍵右方的下載設定鍵來下載目前設定,並在下次按下載入設定來讀取存檔。

[下載&使用]

首先,因為此程式調用了pywin32套件,所以它會用到一些只有windows系統才做得到的功能,所以其它系統可以先說ByeBye了,至於支援到windows幾,老實說我也不知道,我使用的是win10,在此附上我的電腦資訊:
說來心虛,其實我從沒在其他電腦上測試過著個程式,所以也不清楚在其他電腦上跑到底會不會有問題,這可能要等有興趣使用的人發現並來告知我才會知道了。
另外,此程式還使用了multiprocessing套件,也就是python用以實現多線程的套件之一,所以單核心處理器的電腦也out了。

在此程式執行時會固定賽馬娘程式於程式最上方並固定其視窗大小進行截圖,在啟動前請將螢幕解析度設定在1360×768以上

程式下載連結

[python安裝]

如上面提到的,這個程式是用你會我會大家會的python寫出來的,所以在運行時也需要用到python。如果你的電腦還沒有python或python版本太舊,請去python官方網站下載並安裝python(若不會安裝請參考我上一篇創作的教學),建議使用3.8以上的版本,我個人使用的版本為3.9.5。

[套件安裝]

把下載的壓縮檔解壓縮到一個資料夾之後,請先把資料夾移到一個順眼的地方,並確保資料夾以後都待在此位置,因為接下來的操作會需要以系統管理員身分執行批次檔,而這樣的操作會將提示命令字元的根目錄切換到主磁碟WINDOWS\system32,為了切回原目錄,需要使用者自行輸入位址。

首先要做的是對install.bat的編輯
我們要更改的是第一行,舉例來說,如果我將uma_factory資料夾放在D槽,那麼更改後的路徑應該會是
請注意,務必要儲存變更
更改完後,我們就可以開始套件的安裝了
看到「請按任意鍵繼續」後就可以關閉提示命令字元,並將install.bat、requirements.txt刪除了
接下來是對run.bat的編輯,跟剛才一樣將第一行的(目前路徑)改為資料夾路徑儲存即可。
run.bat是此程式的運行檔案,也同樣需要以系統管理員身分執行,如果你覺得每次都要右鍵太麻煩的話,也可以對run.bat右鍵->建立捷徑,並對建立出的捷徑右鍵->內容
點擊上方的捷徑->進階
勾選以系統管理員身分執行,如此一來以後只要執行此捷徑就行了

在執行程式之前,還有最後一項需要更改的檔案
進入assets資料夾,編輯dbpath.txt
更改位址為DMM賽馬娘的資料庫路徑,通常此路徑會是
主磁碟:Users\(使用者名稱)\AppData\LocalLow\Cygames\umamusume\master\master.mdb
如果你懶得找,也可以直接win+R開啟執行,
輸入%USERPROFILE%\AppData\LocalLow\Cygames\umamusume\master
就能看到master.mdb了
儲存之後,我們就可以開始自動化馬肉罐頭製造了

使用方式應該不需我多加說明,就是把資料輸一輸(比賽及技能圖片以點擊來選取或取消選取),把種馬選擇介面的表示設定改為「因子」以外的任何種類填好卡片編成自己的5個欄位,按下啟動就開始執行了。
↑建議再用蘿蔔篩選種馬,不然程式找種馬會找很久

另外要提醒一點,這個程式叫做「馬肉工廠」,也就是說,它可以幫你製造很多馬肉罐頭,是以刷粉、刷因子為目的設計的程式,而不是養什麼頂級好馬,賽馬娘雖說是一款運氣成分相當重的遊戲,但也是需要一點思考才可能玩得好的遊戲,若你的目的不是刷粉、刷因子,請善用自己的大腦手動養馬,人類的變通能力遠比電腦來得好。

最後要提醒的是,雖然此程式僅為自動化腳本,不涉及數據修改(這遊戲也不可能可以改),但還是以非正常手段進行遊戲,如果你因此程式受到任何形式的損失,本作者一律不承擔任何賠償責任,在你下載使用此程式後,便代表承認以上免責宣言。

[運作原理]


網頁的部分我就不多做解釋了,用了bootstrap 5讓介面看起來沒這麼醜,在使用者按下啟動後將輸入的資料包裝回傳給http伺服器,並在接收到資料後開始自動養馬。

[場景偵測]

這是整個程式運作的核心,在知道現在處於什麼畫面之後,電腦才能決定應該執行什麼樣的行動。
場景辨識的原理很簡單,就是讓電腦找到只有在特定場景才會出現的「標誌」,便能判斷現在處於什麼場景
那麼什麼才是好的標誌呢?
以主頁面為例

你看到了什麼標誌,使你能100%認定這是主頁面?
我看到了右方的信封按鈕,這個按鈕不管主頁面換了哪隻馬娘、遊戲舉辦了什麼活動、公會需求的鞋子是否被捐滿,它都一直保持著一樣的顏色、形狀及位置,且此標誌恆久不變,正因如此,它便具備了成為代表標誌的要素。

只要我們能在每個頁面辨別出特定的標誌,那麼程式就可以不需顧慮前一個場景為何,只針對目前的場景做出對應這個場景的行動即可,正因如此,這個程式能在育成的任何時間點開始,甚至能應對連線問題、日期更變等錯誤訊息。

那麼簡單來說到底是怎麼辨識的呢?
首先,將這個畫面從彩色(RGB)轉為灰階(Gray)圖片,便進行二值化(thresholding)。
在影像處理中的二值化指的是對圖片中每一像素與門檻值做比對,藉此極大極小化像素值。
簡而言之,就是讓灰色圖片變得「非黑即白」。


至於為什麼要這樣做,一來是能使模板匹配的計算量大幅下降,二來是能透過特定門檻值產生的結果,更方便的辨認出畫面中某一元件的狀態。
在產生黑白圖片後,將圖片切割為數個區塊

所有的紅框都代表在那個區塊「可能存在」一個頁面的代表標誌,接下來以每個模板對相同尺寸的區塊進行比對


因為畫面中的信封與事先準備好的模板匹配成功,電腦便知道現在的畫面是主頁面,可以採取「按下育成按鈕」的行動了。

[物件偵測]

介紹完場景偵測的原理後,來介紹一下物件偵測。當一個場景中出現了許多相同或相似的圖案時,該怎麼讓電腦找出它們的位置?
以選擇育成馬娘頁面為例

在每個馬娘頭像的下方都有1~5顆金色星星圖案,我們可以藉此定位每隻馬娘頭像的位置。
首先把圖片放大並轉成黑白

由於使用了特別設定的門檻值,讓金色星星與灰色星星都轉變成了白色星星,我們便可方便的使用作為模板進行比對了。

讓模板對整張圖片的每個位置進行相似度檢測,並在相似度超過一定值時紀錄其位置,由此一來便能找到所有頭像。
在選擇種馬、好友卡片、出賽、點技能、看每個設施有幾個人頭等動作都使用了這項技術。

[文字辨識]

老實說,字體辨識技術對我而言還是「魔法」,必定含有十分複雜的技術。我直接使用了Tesseract OCR作為字體辨識的工具,我的使用心得就是如果辨識不出來就是你的字不夠大,所以在程式運行時才會看到視窗一直放大縮小。

當然,就算我把整個視窗放大到都超出螢幕邊界了,還是會有辨識錯誤的狀況,所以才會要求馬娘資料庫的位址,讓程式能在資料庫找到相似字串來修正。雖然這種方法不夠可靠,但也足夠應對9成以上的狀況了。

[色相過濾]

有人可能會好奇背景的圖片一直變是怎麼讓電腦辨識出日期的,這其實也不困難,在這麼遊戲出現的字幾乎都是褐色的,我們只要把一張圖片中的褐色改成黑色、褐色以外的顏色改成白色,便完成了二值化。

將圖片裁切、放大

轉為HSV色彩後進行取值、過濾


如此一來,我們就能清楚的辨識日期了。
除非有一天馬娘出了一個屎色的背景,不然此方法應該都不會失效。

[設施數字辨識]

這是我在製作整個程式遇到最大的難題,首先是數字的顏色可能會因數值大小改變,再來就是背景會一直變,每隻馬娘的膚色、髮色也都不一樣,數字的色相有極大機率是和背景相似的,所以單純的色相過濾必然行不通

如圖所示,經過色相過濾後的背景依然有殘留痕跡

二值化後的結果,這樣的圖片丟給字體辨識肯定是行不通的

於是我百般嘗試,得出的結論就是放棄使用字體辨識,改用物件偵測的方式
首先,將圖片經過一次色相過濾後,將圖片中類似白色的像素改為白色,其餘改為黑色

诶?你覺得看起來沒有比較好,但情況其實已經不一樣了,我們不需要的痕跡明顯的變小塊了。
接下來只要把每個黑色的區塊框起來,計算其面積,便可以用面積大小來淘汰面積太大或太小的痕跡了。

痕跡已經很完美的被清除了,接下來只要用準備好的數字模板進行物件偵測,紀錄每個數字的相對位置,就能辨識出我們要的「+15」了。
你可能會質疑,數字是橘色的,如果背景或馬娘的色相也很接近不就辨識不了了嗎?
沒關係,我們請一個頭髮橘一點的孩子來測試看看

其實影響並不大,因為這些數字的外層其實被一層白色細框包住了,在這樣的情況下能有效的把數字和痕跡區隔開來,由此一來,這種過濾方式的成功率就十分高了。

辨識出每個設施的能力加成後,便進入選擇設施的環節了。
我設定的選擇機制是先看每個設施的人頭,如果全部設施加起來未達橘條的人頭未滿4個,那便選擇未達橘條人頭數最多的設施,這也是我平常的育成方式。

如果達橘條的人頭已經達4個以上,那便由接下來的公式判斷:
若某設施的某加成數值已達目標數值,便對加成數值進行打折,超過目標數值0以上打5折、超過100打4折、超過200打3折...以此類推。
若未達目標數值,且加成數值類型與設施名稱相同,則讓加成數值乘以2。

這樣的機制是為了避免電腦濫用速度和力量訓練設施,然後都不去點耐力訓練設施,對於我這種覺得根性是垃圾不用點的人來說,速度和力量訓練設施對整體的數值加成優勢遠大於耐力訓練設施,因為耐力訓練設施的加成有一些被分去了根性。

對每個設施進行評分後便會選擇評分最高的設施,這樣的選擇機制不會讓某項數值太過突出,除非你本來輸入的目標數值就是如此突出。

[感想]

有人可能會覺得我玩個遊戲還要做這種東西到底在衝三小,得不到快樂還浪費電,根本是毫無意義的行為,其實沒錯,我們應該要玩遊戲而不是被遊戲玩,果斷退坑絕對是面對得不到快樂遊戲的最佳解。

這麼想想,如果把人生看作一款遊戲,我們可能在遊戲的一開始得到了很大的快樂,讓我們對遊戲的未來抱有希望。但在遊戲的中途,我們可能遭遇了失敗、可能不如其他人如此強運,才意識到這款遊戲就是狗屎,那麼我們會果斷退出遊戲嗎?會繼續等待版本更新的出現嗎?

也許這些事情都不重要

僅僅因為知道還有同伴陪伴著我進行著這場遊戲,這遊戲便從糞堆中飄出的一點香味。
我會繼續玩這個遊戲,看著它之後的發展。

41

182

LINE 分享

相關創作

2024委託價目表

核心運動

白貓hololive活動3期生全部湊齊了跟諾艾爾與芙蕾雅的歌回真好聽w

留言

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】