最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python實現(xiàn)跳一跳自動跳躍功能

 更新時間:2019年07月10日 10:26:33   作者:數(shù)據(jù)森麟  
這篇文章主要介紹了使用Python實現(xiàn)跳一跳自動跳躍功能,本文圖文并茂通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下

1.   OpenCV:模板匹配。    獲得小跳棋中心位置

2.   OpenCV:邊緣檢測。    獲得下一方塊中心位置

Python+ADB+OpenCv,實現(xiàn)「 跳一跳 」自動化。

/ 01 / ADB

ADB工具即Android Debug Bridge(安卓調(diào)試橋) tools。

ADB 是一個命令行窗口,用于通過電腦端與模擬器或者真實設(shè)備交互。

與之前小F接觸過的Appium有點相似。

ADB的安裝很簡單,就是將安裝包解壓后,將路徑添加到系統(tǒng)的環(huán)境變量中即可。

然后使用Python的os模塊執(zhí)行ADB命令。

def get_screenshot():
 # 截取手機(jī)的屏幕
 os.system('adb shell /system/bin/screencap -p /sdcard/screencap.png')
 # 把模擬器里面的文件或文件夾傳到電腦上
 os.system('adb pull /sdcard/screencap.png screencap.png')


def jump(distance):
 # 設(shè)置按壓時間,系數(shù)為1.35
 press_time = int(distance * 1.35)

 # 生成隨機(jī)手機(jī)屏幕模擬觸摸點,防止成績無效
 # 生成隨機(jī)整數(shù)(0-9),最終數(shù)值為(0-90)
 rand = random.randint(0, 9) * 10
 # adb長按操作,即在手機(jī)屏幕上((320-410),(410-500))坐標(biāo)處長按press_time毫秒
 cmd = ('adb shell input swipe %i %i %i %i ' + str(press_time)) % (320 + rand, 410 + rand, 320 + rand, 410 + rand)
 # 輸出adb命令
 print(cmd)
 # 執(zhí)行adb命令
 os.system(cmd)

本次涉及到的ADB命令,就只有三個,不多。

一個截屏,一個推送手機(jī)截圖到電腦上,最后模擬長按手機(jī)屏幕。

/ 02 / 跳動實現(xiàn)

先檢測游戲結(jié)束畫面。
判斷是否需要結(jié)束游戲程序。

# 游戲結(jié)束的模板圖像
temp_end = cv2.imread('end.jpg', 0)
def game_over(img):
 """ 模板匹配,檢測是否要將程序結(jié)束 """
 # 如果在游戲截圖中匹配到帶"再玩一局"字樣的模板,則循環(huán)中止
 res_end = cv2.matchTemplate(img, temp_end, cv2.TM_CCOEFF_NORMED)
 if cv2.minMaxLoc(res_end)[1] > 0.95:
 print('Game over!')
 return True

模板匹配原理圖如下。


當(dāng)返回的最大矩陣值大于0.95時,則認(rèn)為原始圖像中肯定出現(xiàn)了再玩一局字樣。

則游戲結(jié)束,程序也隨之結(jié)束。

小跳棋的模板匹配代碼如下。

主要是獲取小跳棋的位置,即「跳一跳」起點位置參數(shù)。

# 讀取小跳棋模板圖像
temple = cv2.imread('temple.png', 0)
# 獲取小跳棋模板圖像的高和寬
th, tw = temple.shape[:2]
def get_start(img):
 """ 模板匹配,獲取跳一跳起點的位置參數(shù)(小跳棋) """
 # 使用標(biāo)準(zhǔn)相關(guān)系數(shù)匹配,1表示完美匹配,-1表示糟糕的匹配,0表示沒有任何相關(guān)性
 result = cv2.matchTemplate(img, temple, cv2.TM_CCOEFF_NORMED)
 # 使用函數(shù)minMaxLoc,確定匹配結(jié)果矩陣的最大值和最小值(val),以及它們的位置(loc)
 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
 # 得到小跳棋的中心位置參數(shù)
 return max_loc[0] + 47, max_loc[1] + 208

得到結(jié)果如下。


下面通過OpenCV的邊緣檢測獲取「跳一跳」的終點位置。

def get_end(img):
 """ 邊緣檢測,獲取跳一跳終點的位置參數(shù)(方塊) """
 # 高斯模糊
 img_rgb = cv2.GaussianBlur(img, (5, 5), 0)
 # 邊緣檢測
 canny_img = cv2.Canny(img_rgb, 1, 10)
 # 獲得邊緣檢測圖像的高和寬
 H, W = canny_img.shape

 # 第一個頂點的高度
 y_top = np.nonzero([max(row) for row in canny_img[400:]])[0][0] + 400
 # 第一個頂點的寬度
 x_top = int(np.mean(np.nonzero(canny_img[y_top])))

 # 跳過小白圈,然后遍歷
 y_bottom = y_top + 80
 for row in range(y_bottom, H):
 if canny_img[row, x_top] != 0:
  y_bottom = row
  break

 # 得到方塊的中心點
 x_center, y_center = x_top, (y_top + y_bottom) // 2
 return x_center, y_center

邊緣檢測原理圖如下。


最后便是主程序啦。

# 循環(huán)直到游戲失敗結(jié)束
for i in range(10000):
 # 將安卓手機(jī)上的截圖移到電腦當(dāng)前文件夾下
 get_screenshot()
 # 讀取截圖圖像
 img = cv2.imread('screencap.png', 0)

 # 游戲結(jié)束
 if game_over(img):
 break

 # 得到起點位置參數(shù)
 x_start, y_start = get_start(img)
 # 獲取終點位置參數(shù)
 x_end, y_end = get_end(img)

 # 將起點位置繪制出來,一個圓
 cv2.circle(img, (x_start, y_start), 10, 255, -1)
 # 將終點位置繪制出來,一個圓
 img_end = cv2.circle(img, (x_end, y_end), 10, 255, -1)
 # 保存圖片
 cv2.imwrite('end.png', img_end)

 # 計算起點和終點的直線距離,勾三股四弦五
 distance = (x_start - x_end) ** 2 + (y_start - y_end) ** 2
 distance = distance ** 0.5

 # 根據(jù)獲得的距離來設(shè)置按壓時長
 jump(distance)
 time.sleep(1.3)

下面就來看一下「跳一跳」自動跳躍的視頻。

輕輕松松得分,毫無問題。

/ 03 / 總結(jié)

相關(guān)工具及代碼已上傳網(wǎng)盤,公眾號回復(fù) 「跳一跳」 即可獲取。

安裝好ADB工具,然后通過數(shù)據(jù)線將安卓手機(jī)和電腦連接。

最后運(yùn)行代碼, 親測有效。

當(dāng)然代碼還是有待優(yōu)化的,如下圖~


一方面是得分不高,另一方面就是會被檢測到作弊...

總結(jié)

以上所述是小編給大家介紹的使用Python實現(xiàn)跳一跳自動跳躍功能 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Python如何使用qrcode生成指定內(nèi)容的二維碼并在GUI界面顯示

    Python如何使用qrcode生成指定內(nèi)容的二維碼并在GUI界面顯示

    現(xiàn)在二維碼很流行,大街小巷大小商品廣告上的二維碼標(biāo)簽都隨處可見,下面這篇文章主要給大家介紹了關(guān)于如何使用qrcode生成指定內(nèi)容的二維碼并在GUI界面顯示的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 用pickle存儲Python的原生對象方法

    用pickle存儲Python的原生對象方法

    下面小編就為大家?guī)硪黄胮ickle存儲Python的原生對象方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Python模板的使用詳細(xì)講解

    Python模板的使用詳細(xì)講解

    Django 模板是使用 Django 模板語言標(biāo)記的一個文本文檔或Python字符串。模板引擎可以識別和解釋一些構(gòu)造。主要是變量和標(biāo)簽。模板是通過上下文來渲染的。渲染用變量的值替換變量,變量的值在上下文中查找,并執(zhí)行標(biāo)簽。其他的一切都按原樣輸出
    2022-10-10
  • 通過底層源碼理解YOLOv5的Backbone

    通過底層源碼理解YOLOv5的Backbone

    yolov5的特征提取網(wǎng)絡(luò)兼顧速度與精度,將PAN與PFN深度融合,對不同尺度魯棒性強(qiáng),可以即插即用,后接不同的檢測器,下面這篇文章主要給大家介紹了關(guān)于如何通過底層源碼理解YOLOv5的Backbone的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • 用來將對象持久化的python pickle模塊

    用來將對象持久化的python pickle模塊

    這篇文章主要為大家介紹了用來將對象持久化的python pickle模塊的用例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • pandas DataFrame 警告(SettingWithCopyWarning)的解決

    pandas DataFrame 警告(SettingWithCopyWarning)的解決

    這篇文章主要介紹了pandas DataFrame 警告(SettingWithCopyWarning)的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 一文詳解python pickle中的反序列化漏洞

    一文詳解python pickle中的反序列化漏洞

    在Python里,常用的模塊之一就是Pickle,它可以幫我們很方便地進(jìn)行序列化和反序列化操作,,今天我們來聊聊Python里的反序列化攻擊,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • Python+selenium實現(xiàn)自動循環(huán)扔QQ郵箱漂流瓶

    Python+selenium實現(xiàn)自動循環(huán)扔QQ郵箱漂流瓶

    這篇文章主要為大家詳細(xì)介紹了Python+selenium實現(xiàn)自動循環(huán)扔QQ郵箱漂流瓶,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Python列出一個文件夾及其子目錄的所有文件

    Python列出一個文件夾及其子目錄的所有文件

    這篇文章主要介紹了Python列出一個文件夾及其子目錄的所有文件的方法,和python列出文件夾下的所有文件的四種方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • 利用Python的Twisted框架實現(xiàn)webshell密碼掃描器的教程

    利用Python的Twisted框架實現(xiàn)webshell密碼掃描器的教程

    這篇文章主要介紹了利用Python的Twisted框架實現(xiàn)webshell密碼掃描器的教程,用到了Twisted框架的異步通信機(jī)制,需要的朋友可以參考下
    2015-04-04

最新評論

峨边| 宝兴县| 措美县| 乳源| 玉山县| 桐柏县| 桑日县| 杨浦区| 饶河县| 城固县| 永昌县| 胶南市| 梓潼县| 保定市| 乳源| 西峡县| 泉州市| 筠连县| 黄梅县| 江津市| 英吉沙县| 峡江县| 特克斯县| 临城县| 丹棱县| 新巴尔虎左旗| 栾城县| 攀枝花市| 琼海市| 巫溪县| 长汀县| 尚志市| 高雄市| 汕尾市| 五大连池市| 桐柏县| 巴塘县| 顺平县| 柳州市| 卓资县| 寿阳县|