主要問題有三個:
1.如何獲取遊戲資訊
2.如果對遊戲內容進行解析,提取關鍵資訊
3.如何對遊戲進行操作
下面給出演算法流程,隨後進行細節上的闡述。
step1縮小影象尺寸,提取roi區域
step2根據顏色特徵檢測棋子,計算其形心。根據棋子形態固定的特徵,把形心向下移動一定的距離獲取底部中心p1(x0,y0)。
step3以棋子頂部區域附近的顏色為背景色,去除背景區域。在此基礎上尋找待跳平台的兩個關鍵交點,計算出待跳平台中心p2(x1,y1)。
step4計算p1和p2的幾何距離,乘上壓力係數獲得長按操作的時間量。
具體細節:
step1:現在手機基本上是1080p,在這個問題上並不需要這麼高的解析度。所以先對截圖影象進行了尺度為4的下取樣。此外如圖1所示,我們需要尋找的目標只在紅框範圍內,所以按照影象高度的比例剪裁處這塊roi區域。本文擷取的是高度的1/4到1/2處。
!( 圖1
step2:棋子有比較明顯的結構特徵,不過根據玩這個遊戲的經驗,只有棋子是紫色的。所以相對於結構匹配用顏色篩選速度更快,畢竟只需要點運算。如果模板匹配的話,那速度就慢很多了。但是棋子的右側有兩個高亮區域,不容易被判定為紫色,在計算形心的時候會導致向左邊偏2個畫素,補上這個偏移量即可。隨後對形心進行下移,移動量取底部y座標和形心y座標的差乘上乙個係數,本文中這個係數為6/7。最後結果如圖2所示,棋子底部的黑點為計算出的底部中心。
,若目標在棋子右側則類似處理。現在的目標就是要找到點pa和pb座標,利用它們的座標計算出目標中心點。pb較為簡單,以y方向為主序,x方向為次序掃瞄,掃瞄到的第一非背景點即為定點pb。不過實踐中發現若目標為圓形,其頂部在下取樣後變為平的。所以需要取miny上所有的點,計算其x方向上的均值作為頂點pb的x值。
pa則是以x方向為主序,y方向為次序掃瞄遇到的第乙個非背景點。當目標在右側時類似。在實際實現中並沒有進行多次掃瞄,而是記錄了目標點,通過排序計算點pa和pb。
step4 知乎上有人分析了長按時間和距離的關係,結果為線性關係。所以理論上我們這裡取乙個係數即可:
**按住時間(ms)=兩點距離(畫素)*係數(ms/畫素)**
但在實踐中發現似乎並不完全是線性關係,本文採用的是分段線性函式。若距離大於100畫素取5.8,小於100畫素取6。 圖4是結果圖,可以看出找到的關鍵點還是較為準確的。
。
字母跳一跳
題目 有一無限長的迴圈字母表,任意輸入乙個字母,按照規定時刻進行跳轉,每個時刻跳轉規定的步數,最後顯示跳轉後得到的字母 include using namespace std int main char i word 輸入字母 int i k,i t,n 跳轉步數k,時間t,組數n cin n ch...
微信跳一跳python 微信跳一跳Python
1 安裝python,我用的是python2.7 5.安裝pillow,放在scripts資料夾中,通過 pip install pillow安裝 6.安裝adb工具包,可以直接放在專案 的資料夾裡面,或者放在c盤目錄不過要配置一下環境變數,我這裡是直接放在專案 資料夾中。內建了cmd 命令 7.把...
python實現跳一跳
今天我們使用python來做一件有意思的事,使用python來完成跳一跳這個遊戲。在這裡先感謝一位大牛文章的啟迪,相關的程式和安裝包也由此位大牛提供。python輔助作者github賬號為 wangshub。作者的知乎專欄為 首先我們需要做好準備工作 windows10,乙個安卓真機,python3...