# Sikulix 簡單教學 by 少女前線 自動0-2拖屍、維修、強化、拆槍、自動後勤,一氣呵成 直接當廢人:100: # [1.1.4 版腳本 設定 在這邊](https://hackmd.io/L5AYAbQgQj2-KGFlyjDzow?view#%E6%96%B0%E7%89%88GFL-%E8%85%B3%E6%9C%AC-%E7%92%B0%E5%A2%83%E8%A8%AD%E7%BD%AE%E3%80%81%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85%E3%80%82) # 2020/6/21 目前腳本已經無效 > 目前已沒有在玩少前,如腳本不能跑的話,就**自己刻一個**吧,我的程式就當參考。我想我不會再維護那程式了(~~根本不打算維護XD~~)。 > 因為我忘記我的文件有沒有提過腳本的結構是啥,這邊再重新打一遍: > * 基本上 [girls_front_line.py](https://bitbucket.org/aniccasora/gfl/src/master/girls_front_line.sikuli/girls_front_line.py) 提供了人類清楚的邏輯,但是實際的 "實作"(程式上邏輯的實現),被包在 [step.py](https://bitbucket.org/aniccasora/gfl/src/master/girls_front_line.sikuli/step.sikuli/step.py),然而 [step.py](https://bitbucket.org/aniccasora/gfl/src/master/girls_front_line.sikuli/step.sikuli/step.py) 他有很大部分的 "實作",會透過 [util.py](https://bitbucket.org/aniccasora/gfl/src/master/girls_front_line.sikuli/util.sikuli/util.py),因為 step(遊戲步驟) 常常是用 util(固定邏輯、工具函式) 組合而成不同的 step,最後才在 girls_front_line.py 將 step 組合起來。 `*util:utility 的縮寫` > * 總結: util 提供常用 function,step 提供單步驟的遊戲邏輯(例如:按下一個按鈕),girls_front_line 將多個單步驟組合成一個可重複的腳本,就是這樣這麼簡單。這個就是我說的結構化,不熟程式怎麼呼叫時就把 girls_front_line 寫的很長就可以了~(但你維護程式碼時你就知道好玩了) * 給有心想學怎麼寫sikulix 腳本的人: 1. 新手(什麼是python? 什麼是腳本?): * 我的程式碼就別看了,因為一定看不懂,我大部分的程式碼都結構化了,沒有程式概念你追不出個所以來。 * 我不知道怎麼幫你 頂多去看我有一個基礎寫法的教學,但我想你看過了。 2. 我寫過腳本 但 python 是啥: * 那麼第一件事就是 先弄會 python (if、while、縮排結構、def),然後我的腳本嘗試著看也無訪,有問題可直接[問我](https://discord.gg/s8HtqKc),因為每行都是我寫的。 3. 你根本英文超強一外國人母語等級: * 那我想你看 sikulix api 就懂了。 4. 你會程式: * 自己學,不要我教。謝謝。 >  ## 心得 [心得](https://hackmd.io/QWC-MLtvR0CwHHXKLhKDmw) ###### 要看 sikulix說明 心得 不用看沒關係... * [DISCORD群,點我邀請至伺服器](https://discord.gg/s8HtqKc) * 我基本上懶得維護這篇文章,有問題來裡面直接問就可以了,謝謝! * 發問 時請提出 您的"需求",並簡潔扼要的描述,我會盡可以解釋,或者提供協助。 * 基本上每天都會看discord * 最新的維護資訊也會在上面報告 * 另外 注意禮貌。謝謝~😃 # 正文開始 這篇的用詞都比較直接,如有不適請右上角,MacOS左上角。 ## 自動後勤DEMO **自動後勤** 只是 其中一部分~ ![](https://i.imgur.com/QOddGpL.gif) **刷到2000場後,懷疑人生** (2000場後都不是我玩的辣HAHAHAHA) ![](https://i.imgur.com/9aja1bv.png) 快修要不夠了 好啦! 刷到 **200000場** 的 不用告訴我了 我知道了!! 我已經 20000場了↑😃 --- ## 前言 **((給我看完 醜話說前頭:smile:** **🙅🏼 此教學沒有任何營利✋🏼,而且帳號出問題我 "不負擔任何責任"🙅🏼‍** 本教學**並無修改、侵害、刪除任何伺服器的資料、或者其他玩家的資料**,也尚未侵害到任何玩家的權利(我沒在打排名的喔),少女前線能說是要網路的**單人遊戲**,所以我才這麼說,**就算指揮官900等,每支槍都滿等,也不會礙到其他人**,因為這腳本只有純 **"手"** 動練等而已,打排名還是乖乖來吧。 --- ### 1 寫作此教學目的 純粹只是希望各位玩家可以利用**有效率的方式遊玩遊戲**(~~偷懶的奧義~~),這是我一開始的發想,當然也有人認為,那你這樣玩遊戲還玩的有沒有意義。 跟推廣 sikuli 這個方便的辨識腳本。 能寫程式(腳本)解決我的麻煩,也是一種好玩的遊戲,電腦最喜歡做重複的事情了,還不叫他做爆。 **For高手、大神,或者已經會寫程式的建議,直接到👉 [Sikulix](http://sikulix.com/),自己看裡面的技術資料,可跳過我的胡說八道。** :::info 舊版 已經不會再次維護(包括這篇文章),現在以新版為準。 ---> [新版文章](https://hackmd.io/L5AYAbQgQj2-KGFlyjDzow#%E6%96%B0%E7%89%88GFL-%E8%85%B3%E6%9C%AC-%E7%92%B0%E5%A2%83%E8%A8%AD%E7%BD%AE%E3%80%81%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85%E3%80%82) ::: ### 2 Sikulix 看做腳本? 外掛? ~~倒是像塊綠豆糕。~~ 當作 **"製造一個隱形人坐在電腦前幫我玩電腦"**, **sikuli的語源----"God's Eye"**。 --- **目錄** (電腦版 右邊有 TAG點開就可以跳到你要查詢的地方,瀏覽器的範圍夠大就會顯示) [TOC] ### 3 sikulix簡介 >**引言** 在 GUI 測試中,識別個性化控件、模擬用戶行為及對校驗屏幕顯示結果常常成為自動化測試的瓶頸,此類測試場景大多數情況下仍然依賴於手工測試。本文介紹一種新興的圖形化編程技術 Sikuli,它擺脫了對控件 API 的依賴,通過當前屏幕的實時圖像檢索獲取操作對象,模擬用戶行為,匹配屏幕區域以校驗真實的視覺顯示結果。文中將通過其在 GUI 自動化測試中的實際應用分析及程序示例,闡述其帶來的應用思路。 **Sikuli 是什麼** Sikuli 是由 MIT 的研究團隊發布的新型圖形化編程技術。它以圖像檢索技術為基礎,提供了一套基於 Jython 的腳本語言以及集成開發環境。使用者可利用屏幕截圖直接引用 GUI 元素進行編程,完成交互操作。 Sikuli 一詞取自墨西哥 Huichol Indian 土著語,意為“上帝之眼”,正如其開發者張琮翔所說—— Sikuli 讓電腦能像人一樣“看”這個“真實世界”。 > 以上引用自 **朱 杉 Sikuli -- 创新的图形化编程技术** > [朱 杉 Sikuli -- 创新的图形化编程技术](https://www.ibm.com/developerworks/cn/opensource/os-cn-sikuli/index.html) --- ## 環境建置 以下教學使用 **Python(jyphon) 當作腳本 code🔧** 並且使用我目前成功多次👍🏾的安裝方式。 **我用的作業系統一律 windows 10x64**,下面 安裝過程 都是用 另外開 windows 10 虛擬機安裝的,安裝很多次了,如果設定都跟我一樣,但 還是有問題的話,去Google吧👍。 都是用 x64 系統的配置, x32 作業系統沒弄過,要試試看也可以。 ###### PS: 下面鏈結失效的話 直接到 [Google Drive](https://drive.google.com/open?id=1ObKJY1S0rIH328MhEOjMImElLs1NwiUb) 去下載。 ### 1 你要有 JAVA SE 當環境,我個人用 **"8u192" (版本要對,不對不給安裝)** 官方是說 支援 ==version 8 or later== 但是 1.1.3的,但好像只能用 java version 8。 ------>[點我下載 Java SE Development Kit 8 Downloads](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) **載點別按錯** ![](https://i.imgur.com/S1Gy1Sm.png) :::info 有裝過的 JAVA SE 的 Win+R -> cmd ->輸入 "java -version" 確認一下版本,錯的話請重裝1.8.X 應該都沒事,(不要裝到 其他版本的爸拖👏) 請依照 cmd 顯示的版本號為依據。 ![link text](https://i.imgur.com/5MX1myJ.png) 網路上有很多 教你怎麼裝 JAVA環境的,爬文的話可以找到。 ::: ### 2 去載 sikulix ------>[Sikuli 1.1.3 下載頁面](https://launchpad.net/sikuli/sikulix/1.1.3) ### 3 開始安裝 [Google Drive](https://drive.google.com/open?id=1ObKJY1S0rIH328MhEOjMImElLs1NwiUb) 的東西下載下完以後,你會看到 兩個檔案 ![](https://i.imgur.com/7ebe1dE.png) ============================================== 建議 直接丟到 你之後要裝 sikulix 的 資料夾, 等等裝 .jar 他會把他的所會執行到的東西都解壓出來。 ============================================== 1. 先裝 jdk-8u192-windows-x64.exe !!不要亂改安裝目錄,除非你會處理目錄變動的問題 !! 2. 再裝 sikulixsetup-1.1.3.jar (這邊用 cmd 解壓會比較保險,"不要直接點 .jar") 👇🏻 #### I.安裝 JAVA SE, **next** 給他按下去 就裝好了! (不要改 安裝路徑!,啥都不用勾,啥都不用點) 之後就看到 完成安裝 的畫面了 ![](https://i.imgur.com/PHC7Qqr.png) 按下 **"close"** #### 確認是否有安裝成功 * Win+R -> cmd ->輸入 "java -version" 確認一下版本,錯的話請重裝,請依照 cmd 顯示的版本號為依據。 ![link text](https://i.imgur.com/5MX1myJ.png) 他如果說 **"java 不是內部或外部命令、可執行的程式或批次檔。"** 那麼 拿著這段 字串 去 Google。 #### II.安裝 sikulix 1.1.3 這邊就是環境建置最後步驟,裝得過你後面都沒問題。 **上圖~** **Step1.** 找到剛剛 **放 .jar 的資料夾** (最好 找個 乾淨的資料夾) 在 **網址列 / 路徑** 的地方 **打上 cmd, 並 Enter** ![](https://i.imgur.com/kq5q4oF.png) **Step2.** 然後 愉快的 打上 **"java -jar sikulixsetup-1.1.3.jar"** ![](https://i.imgur.com/uGQ0kZq.png) ###### tip: 在終端機的操作中,你可以直接打個大略,用TAB幫你自動補齊當案名稱,像是 在打 "sikulixsetup-1.1.3.jar" ,你可以 打個 "si" 按下 TAB 開始選擇你要的檔案,前提是 該檔案要在資料夾裡面。(TAB鍵 : 在 英文大小寫切換鍵 的 上面)。Ctrl+C 也是可。 **Step3.** 按下 **"是"** ![](https://i.imgur.com/9IpcWW5.png) **Step4.** **1.✔️**、**2.✔️**、紅色框框 打勾勾~ 第一紅框的 選項中 選擇 **✔️1.Python (Jython)(default)** 再次愉快的按下 **"Setup Now"** ![](https://i.imgur.com/hkjTHry.png) **Step5.** **"是"** ![](https://i.imgur.com/xRq0bGE.png) **Step6.** **安裝 Jython "是"** ![](https://i.imgur.com/BrVb1zO.png) **Step7.** **等待...** ![](https://i.imgur.com/kh7f79R.png) **Step8.** **大成功** ![](https://i.imgur.com/lKKdnnL.png) **Step9.** **在剛剛的資料夾下** ~.exe 可以刪掉~ 點下 **"runsikulix.cmd"** 打開 IDE(整合開發環境),跑腳本、撰寫腳本, 都靠他了!! ![](https://i.imgur.com/hhzpk8U.png) **!! ALT+SHIFT+C 可終止 sikulix 運行 !!** **SIKULIX IDE** ![](https://i.imgur.com/oXDhXdj.png) :::info 我都叫這畫面 **"IDE"**:mega: ::: --- ## 準備 開始 ### [1 介紹存檔 !務必過目!](https://hackmd.io/ePVlUXPPTtOxC5lAlwXg5g?view#%E6%BA%96%E5%82%99-%E9%96%8B%E5%A7%8B) 寫程式Code的存檔如果不見,那麼肯定是崩潰,Sikulix更是如此, 因為他的內部的設計,你的 Code 存檔的瞬間,只要IDE的畫面裏面沒有該圖片,那麼資料夾的圖片就會跟著消失。 > (可以藉由修改設定解決這問題,但會延伸出,舊的圖片都不會被刪除的問題) 當你寫 sikulix 時,因為是螢幕辨識,他會需要許多圖片,然而你在IDE截個老半天的圖全部被刪掉,做何感想??? ~我曾經被搞過好多次,都忘記這個規則~ **注意:當你在寫腳本時,你不想跑某一行(或多行),請先利用 單行註解 "#" 把那行註解掉(不支援多行註解),按下"Ctrl + S",除非 "確定連圖片都不要了" !!。** #### [----- 1. 如果你要複製 的 那一行是有圖片 的 Code 的話,請確保你存檔了]() 過來人的經驗,不要到時候 Ctrl + Z 回不來就好笑搂! #### 以下示範 這個陷阱: ###### PS:第 66 行 就是 "註解" 過的行。這樣子打 他就不會執行了,這就是註解。(雖然註解一開始的設計是拿來當 程式碼的解釋的)。68 行是 會執行的喔。 假設你發現 這邊的CODE **全部**想要用 Ctrl + X "剪" 下來,放到別的段落去。 **"剪下後,請不要按下存檔,你會貼不上來的,因為存檔的瞬間他的圖片就在資料夾消失了"** 接下來就是愉悅的重新截圖,為什麼呢? 實際上複製,或者剪下的時候並 **不會複製到 圖片**! ![](https://i.imgur.com/HTJAf30.png) #### [-----2.sikulix 圖片下的 原碼](87940) 所以你的操作都是對這一些字串作處理(複製,貼上...),真正的圖片在移除IDE畫面並存檔時就已經消失,剩下的就只是一串沒有意義的位置。 在這個 sikulix IDE 裡面 "圖片位置(字串)" -> 實際畫面上的圖片(圖片) 這讓我們在編寫的時候很直覺。 (我這邊的圖片都有再次命名,以防萬一我找不到,他預設的命名都是時間戳記) **(利用 Ctrl + T 切換) / 檢視 -> show ThumbNails** ![](https://i.imgur.com/Pv932HP.png) --- #### [3.Sikulix的 專案名稱]() ~~不要跟我說 他只是**資料夾**後面的名稱加了 ".sikulix"XD~~ **不要把它看成資料夾**,當作**單一專案**,會比較好! (除非你知道你在做啥 不然不建議去改內部的東西) ![](https://i.imgur.com/SKN5dgx.png) #### [4.常用快捷鍵:]() 有碰過的編輯軟體的一定都知道 最基本的,快捷鍵(shortcut) 基本上 就是 1.Ctrl + S (存檔) 2.Ctrl + Z (復原上一動作) 3.剪下 X + 複製 C + 貼上 V 4.Ctrl + T 特殊情形 會需要 使用 記好啦!! ### 2 開啟 舊專案 的方法 #### 這邊就是我前面說的 sikulix 專案(資料夾) IDE左上角 檔案 -> 開啟 -> 選擇專案資料夾就好了 要開啟 舊專案 的話 選擇 **"xxxx.sikulix" 整個資料夾** -> **select** ,就可以開了,**不用點進去**。 ![](https://i.imgur.com/9LOt9p5.png) --- ## 開始撰寫 ### 1 關於少前的 0-2 常刷0-2的大家都知道,0-2關卡的敵人是不會移動的,所以可以省下判斷敵人位置的麻煩,不需用處理隨機問題。 ### 2 設計想法 基於少前這款遊戲幾乎不需用用到鍵盤,所以滑鼠的動作,我只把它分作2個part。 #### ------1.自動操作(滑鼠only) 1.滑鼠 移動 到 指定位置、有效範圍 2.點擊 不會用到"滾輪"、"拖移"、"拖拉" 我在腳本裡面 不使用 "拖移"、"拖拉" 這種動作的,因為我當初的電腦,極為LAG,滑動畫面這項操作,會有嚴重的延遲,所以我只利用這簡單 兩個操作來完成 一系列的拖屍。 #### ------2.畫面判斷 這個部分用到的邏輯 **--------------1.存在?不存在?** 這個畫面、物體、事件,究竟觸發了沒,只要畫面有改變,那麼他就可以判斷其是否存在。 **--------------2.是否需要等待?(Lag時間)** 假設,你的電腦還在轉圈圈,黑屏(有點半透明,少前的loading畫面滿多都是半透明的,明暗程度對圖像辨識造成的影響頗小)。那麼那個物件有被找到,那電腦就會以為他出現了,就繼續下一個指令,這樣會造成不可預期的錯誤。 **--------------3.流程可靠性!** 有一點狀態機的概念,你是否可以確保,某一項操作,永遠成功? 那失敗了要怎麼補救,還是直接不管跳到下一個操作? | |流程未確認 ❌ | 流程有確認✔ | |:---------:|:-----------:|:---------:| |欲執行 | A -> B -> C |A -> B -> C| | Step 1 | A 成功 | A成功 | | Step 2 | B失敗 | B失敗 | | Step 3 | C ?? | B再次執行B | |Step 4 |?? | B成功 | |Step 5 | ?? |C失敗 | |Step 6 | ?? |C再次執行 | |Step 7 | ?? |C成功 | |Step 8 |?? |ABC成功執行完畢! | --- #### python 是利用 **"四個空白"** 當作 區塊的",稱為縮排 (indent) 可以看到while 的**下一層是** if & else if ---- 的**下一層是** 去吃飯 else - 的**下一層是** 去睡覺 下方code表示 這隻程式 他會判斷 自己是不是餓了? 不是的話**去睡覺** 否則**去吃飯**,**周而復始** ```python while True: # while層 從這邊 開始 if 肚子餓了: #肚子餓了 區塊開始 去吃飯 #肚子餓了 區塊結束 else: #其他時間 區塊開始 去睡覺 #其他時間 區塊結束 # while層 完畢 ``` --- ### 3 範例影片 ##### (一) {%youtube Tb3glLDJf8g %} ##### 施工中... 應該是永不施工... --- ## Google Drive \ 各檔案下載 \ 各種連結 下載的東西看清楚 不了解的 就直接到我 GD直接下載 ### Sikulx API (就是 寫Sikulix的說明書,給有程式基礎的人翻閱) [Everything about Sikuli Script](http://doc.sikuli.org/sikuli-script-index.html) ### Google Drive [我的 Google Drive](https://drive.google.com/open?id=1ObKJY1S0rIH328MhEOjMImElLs1NwiUb) ### Sikulix home page [sikulix](http://www.sikulix.com/) ### 官方的下載頁面 [Java SE Development Kit 8 Downloads](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) [Sikuli 1.1.3 下載頁面](https://launchpad.net/sikuli/sikulix/1.1.3) ### 問題詢問 方式 #### 注意 1. 近來請 **"有禮貌地發問"** 謝謝,我可沒有欠你,要鬧的也滾。 2. 另外 我不知道這連結啥時會消失 看到會再補。 * [DISCORD 點我邀請至伺服器](https://discord.gg/s8HtqKc) * 用這個會比較快收到回覆。 * Email 最後一種聯絡方式。 * suwaerannpa86510@gmail.com ---