1. 程式人生 > >python進階之微信跳一跳外掛

python進階之微信跳一跳外掛

開發日誌:

開發流程:開始執行-->配置手機和電腦(連線,截圖等功能)-->截圖-->分析棋子棋盤的座標-->計算棋子棋盤的距離-->執行按壓手機螢幕跳躍的功能-->等待1~2秒-->返回“截圖”重複執行
外掛適應不目前市場上絕大多數的安卓手機,不適用IOS系統手機,主流支援的解析度為1280*720,1920*1280,2560*1440。
WeChatJump(v1.0)開發日誌:
(針對終端手機解析度為720*1280)
        執行除錯:
第一次整體執行:出現沒有安裝ADB的提示,但是確實已經安裝了,換用命令列之後該問題以正常執行。
第二次整體執行:接收輸入的字串有問題。

        引數除錯:
第一次引數除錯:按壓係數"press_ratio"為2.180,當前引數下圓形跳座基本基本不行,方形跳座跳出去的概率極大,主要原因一方面是跳躍引數過大,另一方面是跳躍時不是對著螢幕最上角的方向跳,導致計算時,不能很好控制跳得大小,但是理論上這種情況是不存在的,程式計算的距離是下一個跳座中心點到跳棋中心點的距離。可能是計算跳座中心點的時候出了問題吧。
第二次引數除錯:按壓係數"press_ratio"為2.0引數設定為情況依舊。
第三次引數除錯:按壓係數"press_ratio"為1.800情況逆轉,出現相反的情況。
第四次引數除錯:按壓係數"press_ratio"為1.950,往左上方跳得時候容易超出跳躍範圍,但是不盡然,也存在跳不到中心點的情況,往右上角跳得時候基本是跳不到中心店或者是正好在中心點這兩種情況,,目前設定的引數是1.950,最高分為306,但是當出現藥瓶這種情況時,跳不上的概率相當大,其他的圓形跳座跳不到中心點的概率相對小一點,但比方形要大,下一步打算設定成1.951~1.953
第五次引數除錯:設定跳躍係數為1.952,由於時間有點緊張,測試兩次,以上效果改善程度不大,最高分均未超過1.950.目前來看跳躍係數是1.950最為合適。

程式主程式部分原始碼:

def run():
    """主要函式,完成程式的主要任務"""
    open_game = input('請確保手機打開了 ADB 並連線了電腦,然後開啟跳一跳並【開始遊戲】後再用本程式,確定開始?y/n>>:')
    # if (open_game != 'y')or(open_game != 'Y'):
    #    exit('退出!')
    # 初始化:
    config = init()
    #檢查截圖方式:
    check_screenshot()
    print('通過第%s種方式獲取截圖'%SCREENSHOT_WAY)
    while True:
        #截圖autojump.png
        get_screenShot()
        #讀取擷取的圖片
        img = Image.open('autojump.png')
        piece_x,piece_y,board_x,board_y = find_piece_and_board(img,config)
        #計算棋子棋盤的距離
        ntime = time.time()
        print(piece_x,piece_y,board_x,board_y,'------->')
        distance = math.sqrt((piece_x - board_x)**2 + (piece_y - board_y)**2)
        #生成一個隨機按壓點,防止被Ban
        if DEBUG:
            debug.save_debug_screenshot(ntime,img,piece_x,piece_y,board_x,board_y)
            debug.backup_screenshot(ntime)
        press_point = (random.randint(*config['swipe']['x']),
                           random.randint(*config['swipe']['y']))
        #跳躍
        jump(distance,press_point,config['press_ratio'])
        #休息,停留(注意應該理論上是可以休息1~2秒的掙個連續區間,而不是離散區間)
        time.sleep(random.randrange(1,3))

時間倉促,暫不作分析。。。。。後續更新。。。

工具介紹:

adb的全稱為Android Debug Bridge,就是起到除錯橋的作用。通過adb我們可以在Eclipse中方便通過DDMS來除錯Android程式,說白了就是debug工具。adb的工作方式比較特殊,採用監聽Socket TCP 5554等埠的方式讓IDE和Qemu通訊,預設情況下adb會daemon相關的網路埠,所以當我們執行Eclipse時adb程序就會自動執行。adb是android sdk裡的一個工具, 用這個工具可以直接操作管理android模擬器或者真實的android裝置(如G1手機).  它的主要功能有:* 執行裝置的shell(命令列)* 管理模擬器或裝置的埠對映* 計算機和裝置之間上傳/下載檔案* 將本地apk軟體安裝至
模擬器
或android裝置ADB是一個 客戶端-伺服器端 程式, 其中客戶端是你用來操作的電腦, 伺服器端是android裝置.