1. 程式人生 > >手機小遊戲輔助程式的實現

手機小遊戲輔助程式的實現

這兩天玩了一個微信的小遊戲,想到以前的跳一跳可以通過模擬按鍵和擷取螢幕的方式做輔助程式,所以想針對這個小遊戲也做個機器人自動玩,雖然結果是失敗的,但是也學到了點東西。

1.做這種小遊戲機器人的關鍵點有兩個,一個是模擬按鍵,一個是擷取螢幕。模擬按鍵很簡單,直接呼叫以下命令即可在安卓手機上任意一個座標點選一次,部分手機記得在開發者選項裡開啟允許模擬點選

adb shell input tap x y

2.影象識別起初想和跳一跳一樣,用adb shell來截圖,但是發現這種方式速度太慢了,大概3秒一張圖,跳一跳沒有時間限制,而我現在玩的遊戲有時間限制,所以截圖速度要快,快速截圖有以下幾種

  • 安卓手機內用APP截圖,這種方式我覺得是最快的,因為可以直接把影象資料放在記憶體裡,減少了IO,但是這種方式我自己沒研究過
  • PC上使用安卓模擬器,模擬器內玩遊戲,然後用PC上的API截圖,這種方式和第一種速度上不相上下,缺點是部分遊戲不支援模擬器
  • 使用區域網同屏APP,然後在PC上截圖,這種方式也比較快,但是有一定的延遲,畫質越高延遲越大,所以推薦可以自定義畫質的同屏APP,我用過愛莫助手和AirDroid,前者畫質雖然沒後者好,但是延遲低且PC上不用額外安裝軟體,瀏覽器上就可以用

3.擷取屏幕後,就可以根據遊戲規則寫演算法來識別什麼時候需要點選了,簡單的遊戲可以判斷畫素。複雜點的嘛。。。我也沒研究過,所以不知道

4.至於為什麼最後失敗了,我覺得有兩點

  • adb shell input這種模擬點選方式不可靠,比如傳送三次模擬點選,間隔300毫秒,雖然百分之90的情況都是點選了3次,但是依然有機率只會點選2次
  • 對於速度要求高的遊戲,同屏截圖依然還是慢了

5.類似這種小遊戲,還可以找到上報分數的地方攔截修改掉,或者修改遊戲程式碼達到一些變態功能,因為這些小遊戲的資料校驗一般都在客戶端