2017年12月28日下午俩功,微信發(fā)布了 6.6.1 版本,同時加入“小游戲”的功能碰声,并且推出一款“跳一跳”的小游戲诡蜓,一時間風(fēng)靡朋友圈。
這篇文章不會告訴你如何去贏得高分胰挑,只是通過技術(shù)的角度來說明一下如何代碼來讓游戲自動運行蔓罚。
我是偶然的機(jī)會在公眾號里面看到關(guān)于這個游戲腳本的文章的,通過python實現(xiàn)瞻颂,膜拜大神豺谈!我感覺很有趣,所以研究了一下代碼贡这,收獲頗豐茬末。我是搞Android開發(fā)的,這里就主要說一下Android版本的微信跳一跳游戲腳本實現(xiàn)并運行的過程吧盖矫。
本文用到工具:Mac或者windows電腦团南,python2/3,adb工具炼彪,Android手機(jī)(我的手機(jī)是MI NOTE LTE),數(shù)據(jù)線
關(guān)于游戲腳本正歼,作者已經(jīng)在github公布辐马,地址:wechat_jump_game
首先,我們來講一下原理
腳本原理
-
用 ADB 工具獲取當(dāng)前手機(jī)頁面截圖局义,并用adb將截圖上傳
打開微信跳一跳游戲頁面喜爷,通過命令獲取截圖并上傳:
adb shell screencap -p /sdcard/autojump.png adb pull /sdcard/autojump.png
-
識別棋子,目標(biāo)點和背景的位置萄唇,計算目標(biāo)的距離檩帐,并且計算按下的時間
識別棋子:靠棋子的顏色來識別位置,通過截圖發(fā)現(xiàn)最下面一行大概是一條直線另萤,就從上往下一行一行遍歷湃密,比較顏色(顏色用了一個區(qū)間來比較)找到最下面的那一行的所有點诅挑,然后求個中點,求好之后再讓 Y 軸坐標(biāo)減小棋子底盤的一半高度從而得到中心點的坐標(biāo)
識別棋盤:靠底色和方塊的色差來做泛源,從分?jǐn)?shù)之下的位置開始拔妥,一行一行掃描,由于圓形的塊最頂上是一條線达箍,方形的上面大概是一個點没龙,所以就用類似識別棋子的做法多識別了幾個點求中點,這時候得到了塊中點的 X 軸坐標(biāo)缎玫,這時候假設(shè)現(xiàn)在棋子在當(dāng)前塊的中心硬纤,根據(jù)一個通過截圖獲取的固定的角度來推出中點的 Y 坐標(biāo)
-
用adb工具模擬屏幕點擊事件
'adb shell input swipe {x1} {y1} {x2} {y2} {duration}'
如何使用
安裝python,安裝adb工具赃磨,做android開發(fā)的Android SDK中都帶有adb筝家,只需要配好環(huán)境變量即可。
Android手機(jī)打開USB調(diào)試煞躬,設(shè)置>開發(fā)者選項>USB 調(diào)試肛鹏,同時有些手機(jī)需要同時打開“允許模擬點擊”,通過
adb devices
可以查看當(dāng)前設(shè)備恩沛,判斷是否連接成功-
安裝pillow在扰,執(zhí)行如下命令即可:
sudo pip install Pillow
- 界面轉(zhuǎn)至微信跳一跳游戲,點擊開始游戲
- 運行python wechat_jump_auto.py雷客,如果手機(jī)界面顯示 USB 授權(quán)芒珠,請點擊確認(rèn)
- 請按照你的手機(jī)分辨率從./config/文件夾找到相應(yīng)的配置,拷貝到 *.py 同級目錄./config.json(如果屏幕分辨率能成功探測搅裙,會直接調(diào)用 config 目錄的配置皱卓,不需要復(fù)制)
最后說一下
這只是游戲,何必認(rèn)真呢部逮!通過技術(shù)看到本質(zhì)才是軟件工程師應(yīng)該做的娜汁。