python 谷歌小恐龙自动跳跃
生活随笔
收集整理的這篇文章主要介紹了
python 谷歌小恐龙自动跳跃
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
針對Cent Browser斷網(wǎng)谷歌小恐龍,屏幕1920*1080。 關(guān)閉慢速模式。
第一版
僅僅是簡單的檢測像素點,像素點不一樣就會跳躍
大約能到700分左右,因為700分左右會變色,變色過程中由于色差問題,小恐龍可能會不停跳躍或者無視仙人掌。
你可以嘗試更改andx()中的睡眠時間,set_out中的跳躍時間,或者x1,y1的初始值來優(yōu)化。
from ctypes import * import pyautogui as ui from threading import Thread import keyboard import time# 當(dāng)進程啟動時如果兩個點不同,就會按下空格 def set_out():global x1, x2, y1, y2, a gdi32 = windll.gdi32user32 = windll.user32# 獲取句柄hdc = user32.GetDC(None)# 獲取指定像素的顏色while a:c1 = gdi32.GetPixel(hdc, x1, y1)c2 = gdi32.GetPixel(hdc, x2, y2)if not c1 == c2:keyboard.press(' ')time.sleep(0.8)keyboard.release(' ')# 該進程每隔一段時間使得監(jiān)測點右移,適應(yīng)速度 def andx():global a, x2while (a):time.sleep(1.35)x2 = x2 + 1# 開始按下*號,獲得兩個檢測點, # 鼠標(biāo)指向小恐龍眼睛按*號 global x1, x2, y1, y2, a keyboard.wait('*') x1, y1 = ui.position() x2 = x1 y2 = y1 - 50 x1 = x1 + 85 y1 = y1 + 30 print(x1, y1, x2, y2) t = Thread(target=set_out) # 進程綁定 t1 = Thread(target=andx) # 進程綁定 a = 1 keyboard.wait('+') t.start() t1.start() keyboard.wait('-') a = 0 t.join() t1.join()第二版
調(diào)整判定,使用兩個檢測區(qū)域,測定危險移動速度,再算出危險到小恐龍時間,提前跳躍
from PIL import ImageGrab # 截屏用 import pyautogui as ui # 獲取鼠標(biāo)位置 from threading import Thread # 進程 import keyboard # 鍵盤監(jiān)聽 import numpy as np import timedef jump_(wait):# 執(zhí)行線程,睡眠后按空格time.sleep(wait)keyboard.press(' ')time.sleep(0.2)keyboard.release(' ')def set_out():global x, y, end_l, end_r, atime_r = [] # 經(jīng)過右端的時間隊列while a:# 獲得一排像素點,二值化,并且轉(zhuǎn)數(shù)組img = ImageGrab.grab(bbox=(end_l, y - 1, end_r, y)).convert('1')img = list(np.array(img)[0])# 開始處理數(shù)組,使得危險‘連續(xù)’lenimg = len(img)setting = img[0] # 背景顏色t = True # 背景標(biāo)記避免重復(fù)膨脹i = 200 # 循環(huán)變量# '膨脹'while i < lenimg:if not img[i] == setting: # 若與背景不同色if t: # 之前是背景j = 1t = False # 遇到不是背景while j < 10: # 將之前10個像素‘膨脹’if not img[i - j] == setting: # 遇到不是背景的break # 結(jié)束img[i - j] = img[i]j += 1else: # 遇到背景t = Truei += 1t = True # 背景標(biāo)記i = 200 # 循環(huán)變量# '腐蝕'while i < lenimg: # 針對后2/3像素點if not img[i] == setting: # 若與背景不同色if t: # 之前是背景j = 0t = Falsewhile j < 12 and i < lenimg: # 將其與之后共12個像素‘腐蝕’img[i] = settingj += 1i += 1else: # 遇到背景t = Truei += 1# 數(shù)組已經(jīng)處理,對于中點和最右點區(qū)域檢測# 讓危險距離恐龍0.24s時起跳i = lenimg - 70 # 檢測最末尾20個while i < lenimg - 50:if not img[i] == setting: # 如果是危險time_r=time.time() # 獲得經(jīng)過右監(jiān)測點的時間breaki += 1i = lenimg - 470 # 檢測中間20個while i < lenimg - 450:if not img[i] == setting: # 如果是危險time_c = time.time() # 獲得經(jīng)過中間監(jiān)測點的時間tt = time_c - time_r # 經(jīng)過兩個監(jiān)測點的時間差# v=400/tt# t=s/v=250*tt/400=tt * 0.625 到小恐龍的時間# 設(shè)定一個線程,睡眠t-0.24s后按空格wait = tt * 0.625 - 0.24if 0.15 < wait < 1.2:jump = Thread(target=lambda st=wait: jump_(st)) # 跳躍線程jump.start()breaki += 1np.set_printoptions(threshold=np.inf) # 輸出不省略 # 開始按下*號,獲得三個檢測點, # 鼠標(biāo)指向小恐龍眼睛按*號 keyboard.wait('*') x, y = ui.position() print(x, y) end_l = x - 80 centre = x + 400 end_r = centre + 300 y = y + 20 # 小恐龍距離最右邊700像素 t = Thread(target=set_out) # 進程綁定 a = 1 keyboard.wait('+') t.start() print('自動跳越開啟') keyboard.wait('-') a = 0 t.join() print('自動跳越關(guān)閉')寫時意識到,根本不需要膨脹腐蝕,仙人掌十分稀疏,用不著隊列,可能改版了,沒有翼龍,兩個監(jiān)測點不如直接測速度
第三版
from PIL import ImageGrab # 截屏用 import pyautogui as ui # 獲取鼠標(biāo)位置 from threading import Thread # 進程 import keyboard # 鍵盤監(jiān)聽 import numpy as np import timedef jump_(wait):# 執(zhí)行線程,睡眠后按空格# print(wait)time.sleep(wait)keyboard.press(' ')time.sleep(0.2)keyboard.release(' ')def set_out():global x, y, end_l, end_r, aperil = [] # 危險組 [[位置],[時間],]risk = 0j = 0while a:# time.sleep(0.1)# 獲得一排像素點,二值化,并且轉(zhuǎn)數(shù)組img = ImageGrab.grab(bbox=(end_l, y - 1, end_r, y)).convert('1')img = list(np.array(img)[0])# 開始處理數(shù)組,尋找危險位置lenimg = len(img)setting = img[0] # 背景顏色i = 250 # 循環(huán)變量# 尋找危險位置while i < lenimg - 50: # 找危險開始點if not img[i] == setting: # 若與背景不同色risk = i # 記錄危險breaki += 1if i == lenimg - 50: # 這一輪沒找到continuei = lenimg - 50 # 循環(huán)變量j = 0while i > risk: # 找危險結(jié)束點,求出危險近似中點if not img[i] == setting: # 若與背景不同色if i - risk > 120: # 距離差距太大j = 1else:risk = (risk + i) // 2breaki -= 1if j or risk < 300 or risk > lenimg-100:continue# 數(shù)組已經(jīng)處理# 讓危險距離恐龍0.25s時起跳time_1 = time.time() # 得到時間if not len(peril) == 0: # 有上一次的位置# 找到了,且在上一次出現(xiàn)位置的左邊if peril[-1][0] > risk:tt = time_1 - peril[-1][1] # 和上一次的時間差# v = s/tt 速度# t = s'/v = s'*tt/s 到小恐龍的時間# 設(shè)定一個線程,睡眠 t-0.25s 后按空格wait = (risk - 80) * tt / (peril[-1][0] - risk) - 0.25if 0 < wait < 1:jump = Thread(target=lambda st=wait: jump_(st)) # 跳躍線程jump.start()elif risk - peril[-1][0] < 50: # 太近continueperil = [[risk, time_1]]np.set_printoptions(threshold=np.inf) # 輸出不省略 # 開始按下*號,獲得三個檢測點, # 鼠標(biāo)指向小恐龍眼睛按*號 keyboard.wait('*') x, y = ui.position() print(x, y) end_l = x - 80 centre = x + 400 end_r = centre + 300 y = y + 20 # 小恐龍距離最右邊700像素 t = Thread(target=set_out) # 進程綁定 a = 1 keyboard.wait('+') t.start() print('自動跳越開啟') keyboard.wait('-') a = 0 t.join() print('自動跳越關(guān)閉')總之比我手殘分?jǐn)?shù)高(這里小恐龍到最右端像素長約700)屏幕分辨率1920*1080,瀏覽器占右半邊屏幕。屏幕不同可能無法正常躲避。(懶到不想做比例)就測試了1次,5003分。
總結(jié)
以上是生活随笔為你收集整理的python 谷歌小恐龙自动跳跃的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cad怎么绘制大样图_CAD如何绘制完整
- 下一篇: jsp管理系统页面模板_基于ssm的人事