Python 玩微信跳一跳

教你用 Python 來玩微信跳一跳

寫在前頭

如果你看完文章,說我沒有mac電腦,只有windows和iphone,怎麼辦?
好辦,使用windows和安卓模擬器也可以實現自動跳一跳。如需幫助請評論留言。

https://wangshub.github.io

GitHub 項目地址

相關問題

請先查閱一下 issue 區

遊戲模式

2017 年 12 月 28 日下午,微信發佈了 6.6.1 版本,加入了「小遊戲」功能,並提供了官方 DEMO「跳一跳」。

這是一個 2.5D 插畫風格的益智遊戲,玩家可以通過按壓屏幕時間的長短來控制這個「小人」跳躍的距離。可能剛開始上手的時候,因爲時間距離之間的關係把握不恰當,只能跳出幾個就掉到了臺子下面。
玩法類似於《Flappy Bird》

Python 玩微信跳一跳

如果能精確測量出起始和目標點之間測距離,就可以估計按壓的時間來精確跳躍?所以花 2 個小時寫了一個 Python 腳本進行驗證

希望不要把分數刷太高,容易沒朋友的。。。

操作規範

考慮到生產環境的規範性,實驗與項目之間不受干擾,請儘量用新的虛擬環境來完成實驗

MacOS/Win,請使用如下操作開闢新的虛擬環境(不強調錶示MacOS/Win相同操作)

  • 下載Anaconda. MacOS:默認安裝/Win:注意安裝時候勾選配置路徑或者之後手動配置,直至cmd後conda關鍵字有效
  • 查看所有的虛擬環境conda info --envs
  • 使用命令:conda create -n wechat_env python=3,創建名爲wechat_env的虛擬環境,且配置python版本爲python3
  • 激活虛擬環境:MacOS: source activate wechat_env/Win:activate wechat_env
  • 安裝所需要的包,比如matplotlib等,建議使用conda install package_name來避免虛擬環境包的路徑問題

接下來的操作非必須,僅當實驗完成後可操作,試驗階段全程在虛擬環境中操作,進入虛擬環境會有前置符號表示如:

(wechat_env) ~/Desktop/wechat_jump_game-master>
  • 退出虛擬環境:MacOS: source deactivate wechat_env / Win: deactivate wecha_env
  • 刪除虛擬環境: conda remove -n wechat_env --all

工具介紹

  • Python
  • 手機或模擬器
  • ADB 驅動,可以到這裏下載
  • 相關依賴

如果你是iOS + MacOS,請參考下面的配置:

如果你是 Android + MacOS,請參考下面的配置:

  • Python 3
  • 使用brew進行安裝 brew cask install android-platform-tools
  • 安裝完後插入安卓設備且安卓已打開usb調試模式(部分新機型可能需要再另外勾上 允許模擬點擊 權限),終端輸入 adb devices ,顯示如下表明設備已連接
    List of devices attached
    6934dc33    device

如果你是 Android + Windows,請參考下面的配置:

  • Python 3
  • 安裝 ADB 後,請在 環境變量 裏將 adb 的安裝路徑保存到 PATH 變量裏,確保 adb 命令可以被識別到。
  • Android + MacOS 測試連接

依賴安裝

    pip install -r requirements.txt

原理說明

  1. 將手機點擊到《跳一跳》小程序界面;
  2. 用 ADB 工具獲取當前手機截圖,並用 ADB 將截圖 pull 上來
    adb shell screencap -p /sdcard/autojump.png
    adb pull /sdcard/autojump.png .
  1. 計算按壓時間

    • 手動版:用 Matplotlib 顯示截圖,用鼠標點擊起始點和目標位置,計算像素距離;
    • 自動版:靠棋子的顏色來識別棋子,靠底色和方塊的色差來識別棋盤;
  2. 用 ADB 工具點擊屏幕蓄力一跳;
    adb shell input swipe x y x y time(ms)

安卓手機操作步驟

  • 安卓手機打開 USB 調試,設置》開發者選項》USB 調試
  • 電腦與手機 USB 線連接,確保執行adb devices可以找到設備 ID
  • 界面轉至微信跳一跳遊戲,點擊開始遊戲
  • 運行python wechat_jump_auto.py,如果手機界面顯示 USB 授權,請點擊確認
  • 請按照你的手機分辨率從./config/文件夾找到相應的配置,拷貝到 *.py 同級目錄./config.json(如果屏幕分辨率能成功探測,會直接調用 config 目錄的配置,不需要複製)

iOS 手機操作步驟

  1. 運行安裝好的 WebDriverAgentRunner
  2. 將手機點擊到《跳一跳》小程序界面
  3. 運行腳本。有兩種模式可供選擇:手動輔助跳 和 自動連續跳
    • 手動輔助跳
      • 命令行運行python3 wechat_jump_iOS_py3.py
      • 依次點擊彈出的窗口中的起始位置和目標位置,會自動計算距離後起跳
      • 根據起跳的精準情況更改python3 wechat_jump_iOS_py3.py中的time_coefficient參數,直到獲得最佳取值
    • 自動連續跳
      • 拷貝./config/iPhone目錄下對應的設備配置文件,重命名並替換到./config.json
      • 命令行運行python3 wechat_jump_auto_iOS.py
      • 會自動計算座標並連續起跳,根據起跳的精準情況更改./config.json 中的press_coefficient參數,直到獲得最佳取值

實驗結果

Python 玩微信跳一跳

TODO

  • [x] 可以對拉上來的圖片進行顏色分割,識別小人和目標中心,這樣就不需要手動點擊自動彈跳。

事實證明,機器人比人更會玩兒遊戲。

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