最近,微信官方推出了demo小程序游戲《跳一跳》,這個游戲操作簡單,容易上手,卻又不容易獲得高分,受到很多人的喜愛(emm...這游戲有毒)。自己也嘗試了玩了幾次,作為一個手殘+腦殘的資深玩家,對於這種游戲的分數簡直低的可怕...既然自己這么菜,就找些工具輔助一下吧,於是,就有了做一個輔助外掛的嘗試。
本人玩這個游戲的時候比較晚,所以先去度娘上查了一下現有的方法,果然,搜索出的結果還是很多的。常見的方法有基於python和adb,adb是谷歌為android開發者提供一個開發工具,可以在命令行下操作,python中導入adb包庫即可。
開發工具
matlab,adb工具
實驗原理
跳一跳是根據棋子和目標塊之間距離的不同,需要在屏幕上按壓相應的時間來使棋子調到目標塊,同時越接近中心點,分數越高,連續調到中心點,木有越來越多的分數加成。adb工具可以通過發送指令來模擬人按壓屏幕的操作,所謂我們只需要通過adb工具向手機發送一個按壓某一段時間的指令。那么如何確定按壓時間呢?在玩過幾次之后可以發現,按壓時間和棋子到目標點之間的距離是一個線性函數,所以只需算出棋子到目標點間的距離,再乘以一個系數,就是棋子的按壓時間。為了計算距離,我們首先通過手機截圖,將截圖傳至電腦上,之后可以找出棋子下方中心點和目標點的坐標,采用歐拉距離公式即可計算出兩點間的距離。
手動版操作流程
1. 安裝adb工具並打開手機開發者模式和usb調試
https://www.52pojie.cn/forum.php?mod=viewthread&tid=682631這里提供了一個制作的簡單思路(尊重原創成果),同時里面也提供了adb工具的下載鏈接,窩把它貼在下面 https://www.52pojie.cn/thread-682011-1-1.html
至於手機的開發者模式,依次進入手機中的 設置-->關於手機,可以看到版本號,連續點擊版本號n次,就可以打開開發者選項
2. 打開cmd,在命名行下啟動jump.bat等截圖成功之后,進入步驟3
3. 選取起始點和目標點
在matlab中運行jump.m,會在畫圖工具中打開游戲截圖,此時在圖片上選取起始點和目標點,選定后獲取到兩個點的坐標,即可計算出距離及按壓時間.
4. 向手機發送按壓指令
回到命令行界面,按回車鍵啟動棋子跳躍(原理是通過adb指令將計算出的按壓時間發送到手機上 具體指令 adb shell input swipe 100 100 200 200 時間),等棋子跳完后按回車,回步驟2,進行下一輪截圖。
程序下載鏈接
說明
本人對這個測試的時候,成功率很高,接近100%命中目標中心點,之后和同學一起做了個自動版的,本人比較菜,自動版最高目前1200+,窩在南大的室友用python來寫的已經2700+,之后也會貼出自動版的程序,自動版程序用的是簡單的圖像識別方法,找出圖像中固定的兩個點,歡迎有新想法和想嘗試的同學一起交流(很好奇用機器學習方法到底會是什么效果)。