原“100行以內(nèi)實現(xiàn)自動玩微信跳一跳”
GITHUB: https://github.com/williamfzc/wx_jump
FIRST
- 基于Python3/PIL/numpy編寫检号,源碼邏輯友好
- 因為修bug和優(yōu)化算法葵袭,master分支上已經(jīng)200行了届氢,就改了名
- 建議以master分支上的版本為準剿骨,100行版本比較投機且不夠規(guī)范
- 100行版本請見分支‘100’(不推薦)
WHAT'S NEW
- 目前主流算法是使用opencv做圖形識別進行定位
- 該項目不使用圖像識別,也不使用opencv
- 直接通過矩陣計算來解決這個問題
RELEASE NOTE
-
2018/1/3
- 騰訊爸爸開始打擊輔助了
- 加入了防 反輔助工具 機制
-
2018/1/2
- 看了一下github上的同類項目策州,top1那個已經(jīng)開發(fā)得很成熟啦
- 不過還是希望這個項目能給各位帶來一點新的想法瘸味,共同學習~
思路
- 用adb獲取手機截圖并拉取到項目中
- 對圖片進行二值化
- 根據(jù)棋子的RGB值獲取當前位置
- 按行遍歷這張圖片,從300行后開始(避免干擾)够挂,如果檢測到兩行數(shù)據(jù)有差異旁仿,說明該位置為菱形頂端
- 獲得菱形頂端之后可以計算出目標點的橫坐標與菱形頂端的縱坐標
橫坐標有兩種判定方案:- 左右掃描:
- 目標點在左邊,則從畫面左側開始逐列掃描孽糖,第一個切點即陰影的左端
- 目標點在右邊枯冈,則從畫面右側開始逐列掃描毅贮,第一個切點即菱形的右端
- 此時根據(jù)上述條件可以計算出目標點的坐標
- 往下掃描(目前用這個):
- 繼續(xù)從上往下掃描,以右側為準(沒有影子)尘奏,如果線不再延伸說明圖形結束滩褥,此時為目標y坐標。
- 左右掃描:
- 兩點間距求出距離炫加,換算成adb點按時長瑰煎,讓手機執(zhí)行
HOW
- 目前只對android進行了適配,源碼中的數(shù)據(jù)均為1080x1920下俗孝,可能需要微調(diào)參數(shù)
- 連接手機后開啟USB調(diào)試模式丢间,電腦需要安裝adb
- 在命令行中輸入adb devices查看設備狀態(tài)以判斷設備是否連接上且為device狀態(tài)(必須)
- 打開微信-跳一跳小游戲,點擊開始游戲并跳過教學階段
- 運行wx_jump_py3.py即可
效果如圖
BUG
- 在目標點與起始點很近的情況下的判定可能有較明顯誤差
- 一些特殊圖形有誤差驹针,無法combo