通過python玩微信“跳一跳”

2017年12月28日下午,微信發佈了 6.6.1 版本,同時加入“小遊戲”的功能,並且推出一款“跳一跳”的小遊戲,一時間風靡朋友圈。

這篇文章不會告訴你如何去贏得高分,只是通過技術的角度來說明一下如何代碼來讓遊戲自動運行。

我是偶然的機會在公衆號裏面看到關於這個遊戲腳本的文章的,通過python實現,膜拜大神!我感覺很有趣,所以研究了一下代碼,收穫頗豐。我是搞Android開發的,這裏就主要說一下Android版本的微信跳一跳遊戲腳本實現並運行的過程吧。

本文用到工具:Mac或者windows電腦,python2/3,adb工具,Android手機(我的手機是MI NOTE LTE),數據線

關於遊戲腳本,作者已經在github公佈,地址:wechat_jump_game

首先,我們來講一下原理

腳本原理

  1. 用 ADB 工具獲取當前手機頁面截圖,並用adb將截圖上傳

    打開微信跳一跳遊戲頁面,通過命令獲取截圖並上傳:

    adb shell screencap -p /sdcard/autojump.png
    adb pull /sdcard/autojump.png
  2. 識別棋子,目標點和背景的位置,計算目標的距離,並且計算按下的時間

    識別棋子:靠棋子的顏色來識別位置,通過截圖發現最下面一行大概是一條直線,就從上往下一行一行遍歷,比較顏色(顏色用了一個區間來比較)找到最下面的那一行的所有點,然後求箇中點,求好之後再讓 Y 軸座標減小棋子底盤的一半高度從而得到中心點的座標

    識別棋盤:靠底色和方塊的色差來做,從分數之下的位置開始,一行一行掃描,由於圓形的塊最頂上是一條線,方形的上面大概是一個點,所以就用類似識別棋子的做法多識別了幾個點求中點,這時候得到了塊中點的 X 軸座標,這時候假設現在棋子在當前塊的中心,根據一個通過截圖獲取的固定的角度來推出中點的 Y 座標

    原理

  3. 用adb工具模擬屏幕點擊事件

    'adb shell input swipe {x1} {y1} {x2} {y2} {duration}'

如何使用

  1. 安裝python,安裝adb工具,做android開發的Android SDK中都帶有adb,只需要配好環境變量即可。

  2. Android手機打開USB調試,設置>開發者選項>USB 調試,同時有些手機需要同時打開“允許模擬點擊”,通過adb devices可以查看當前設備,判斷是否連接成功

  3. 安裝pillow,執行如下命令即可:

    sudo pip install Pillow
  4. 界面轉至微信跳一跳遊戲,點擊開始遊戲

  5. 運行python wechat_jump_auto.py,如果手機界面顯示 USB 授權,請點擊確認
  6. 請按照你的手機分辨率從./config/文件夾找到相應的配置,拷貝到 *.py 同級目錄./config.json(如果屏幕分辨率能成功探測,會直接調用 config 目錄的配置,不需要複製)

最後說一下

這只是遊戲,何必認真呢!通過技術看到本質纔是軟件工程師應該做的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章