python30行程式碼實現跳一跳輔助
阿新 • • 發佈:2018-11-12
跳一跳是一個最近出的一個比較熱然後估計馬上就要涼了的微信小遊戲,一出來就有各路大神直接實現了各種掛。今天逛了逛b站,沒想到發現了一個超簡單的版本,雖然還是要手動操作,但勝在程式碼簡單,菜雞花上10多分鐘也能輕鬆理解並寫出來練(zhuang)手(b),只要你有毅力,就能一直刷下去。
思路
和主流版本一樣,利用adb擷取遊戲圖片,然後利用matplotlib和numpy畫出一張一樣的遊戲截圖,然後用滑鼠點一下當前棋子的位置獲取當前棋子的座標,接著再點一下下一個要跳的平臺獲取平臺的座標,然後計算出之間的距離,用adb模擬按壓即可。
具體操作
安裝adb除錯工具並將其新增至環境變數, https://adb.clockworkmod.com/.然後下載python3,接著安裝PIL,matplotlib庫.開啟手機的usb除錯,開啟微信跳一跳,在命令列裡執行程式碼。
沒有程式碼我說個錘子
import time
import PIL
import numpy
import matplotlib.pyplot as plt
import os
from matplotlib.animation import FuncAnimation
# 是否需要更新截圖的開關
need_update = True
def get_screen_image():
# 獲取當前螢幕截圖
os.system('adb shell screencap -p /sdcard/wechat_jump.png')
# 將圖片傳送至程式碼所在目錄下
os.system('adb pull /sdcard/wechat_jump.png')
# 返回影象資料
return numpy.array(PIL.Image.open('wechat_jump.png'))
def jump(next_coordinate, current_coordinate):
# 分別獲取第一下點選滑鼠和第二下點選滑鼠的座標值
x1, y1 = current_coordinate
x2, y2 = next_coordinate
# 計算第一下點選滑鼠和第二下點選滑鼠之間的畫素距離
distance = ((x2 - x1)**2 + (y2 - y1)**2)**0.5
# 模擬按壓螢幕,前兩個數字是點選螢幕起始座標,三四個數字是點選螢幕的終止座標,最後一個數字是按壓時間,需要自己測試
os.system('adb shell input swipe 500 500 500 500 {}'.format(
int(distance * 2.1)))
def click(event, coor=[]):
global need_update
# 獲取滑鼠點選點的座標值,以元組形式新增至座標列表
coor.append((event.xdata, event.ydata))
# 直到點了兩下螢幕,開始呼叫滑鼠點選函式
if len(coor) == 2:
jump(coor.pop(), coor.pop())
# 開啟更新截圖開關
need_update = True
def update_screen(frame):
global need_update
if need_update:
time.sleep(1)
#更新截圖
image.set_array(get_screen_image())
#關閉更新截圖開關
need_update = False
#返回元組資料
return image,
#以指定尺寸建立一塊畫布
figure = plt.figure(figsize=(6, 8))
#用得到的影象資料在畫布上覆製出截圖
image = plt.imshow(get_screen_image(), animated=True)
#使畫布上的畫更加緊湊
plt.tight_layout()
#將滑鼠點選事件與click函式繫結
figure.canvas.mpl_connect('button_press_event', click)
#更新截圖
update = FuncAnimation(figure, update_screen, interval=50, blit=True)
#顯示圖片
plt.show()
去掉各種註釋和空白,真實程式碼也就30多行,超簡單,不得不說,這個人有丶東西…