除了一台能運行的電腦,你還需要以下三樣東西:
使用 ADB 與 OpenCV ,分別完成控制手機與生成解法兩個任務,基本步驟如下:
adb shell screencap -p /sdcard/{ImgName} adb pull /sdcard/{ImgName} .
res = cv2.matchTemplate(image, template, method, result, mask) # 匹配模式圖片 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) # 尋找最匹配位置
adb shell input tap x y
為了能夠達到無人監守自動遊戲的效果,我們還需要程序可以 自動進入下一關 與關閉遊戲獎勵窗口。所以,我們設計了四種不同的狀態:Game State、Next State、Close State、Error State,分別對應著進行遊戲、進入下一關、關閉彈出窗口、等待過渡動畫四種功能。
自動進入下一關
關閉遊戲獎勵窗口
Game State
Next State
Close State
Error State
執行的過程中,使用識別 關鍵目標物 的方式,來判斷當前處於哪種狀態並執行對應任務。
關鍵目標物
最後還有一個問題需要考慮:隨著關卡變難,遊戲方塊大小會逐漸變小。由於,我們掃描地圖使用的是定點拾色的辦法,方格尺寸變小會大大影響我們的地圖掃描準確性,所以我們需要讓程序能夠智能地匹配遊戲方塊的大小。
實現方法也很簡單,設定 [0.9, 1.1] 為遊戲方塊的變化區間,當掃描的地圖出現問題(遊戲無解)或者不存在遊戲方塊的時候,我們就按照 0.01 為步長循環調整遊戲方塊的大小,直到能夠地圖掃描轉換功能正常為止。另外,每次遊戲啟動的時候,也會先自動調整遊戲方塊大小,如圖 ( 圖中的 Map Error: %f 就是程序正在調整遊戲方塊大小,出現白邊時為匹配)。
00:11自動調整方塊尺寸
SIZE
00:23測試
所有操作僅在本地測試完成(MBP + Mi 8),附上 Bilibili 視頻鏈接。
https://www.bilibili.com/video/av44383086/?www.bilibili.com 推薦閱讀: