日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Python键鼠模拟,DNF自动刷图

發(fā)布時間:2024/8/1 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python键鼠模拟,DNF自动刷图 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

聲明:

這篇文章本來是和上一遍關(guān)于DNF掃拍的文章在一起的,但是隨著后續(xù)代碼的增加刷圖功能涉及的東西太多,都擠在一篇文章中太長也太亂,最后還是單獨出來,不定期更新新的功能和原先的功能的迭代版本。
有這方面興趣的可以一起交流學(xué)習(xí),每個人的不同思路都是進步的源泉。
再次聲明,本文章僅作學(xué)習(xí)交流使用,對產(chǎn)生的任何影響,本人概不負責(zé).
轉(zhuǎn)載請注明出處:https://editor.csdn.net/md?articleId=103674748

基于、依賴

1.語言
本文使用Python語言來實現(xiàn)。
2.鍵鼠模擬
鍵鼠模擬可以使用win32api,最好使用硬件模擬。
自己封裝為適合本腳本調(diào)用的函數(shù):
1,鍵盤:模擬按鍵,按下,抬起,組合按鍵
2. 鼠標(biāo):按下,抬起,單擊,雙擊,拖動
3.圖色識別、深度學(xué)習(xí)
python有很多個圖片處理庫,這也正是python腳本的優(yōu)勢之處本文主要使用以下兩種
1.PIL
2.CV2
3.numpy
4.pytorch
這些庫功能強大,本人了解深點的也僅限于使用到的這些方向,當(dāng)然也可以使用其他圖片處理庫,看個人喜好了,比如調(diào)用大漠等等。PIL、openCV用來處理圖片
主要功能函數(shù):
1.找圖,找色
2.找字
3.圖片識別
3.圖片內(nèi)容提取
4.深度學(xué)習(xí)識別
以上條件具備后我們就可以正式開發(fā)腳本了。

依賴的模塊

一.圖片獲取及識別處理模塊

二.鍵鼠模擬模塊

三.運行與停止控制模塊

四.尋路模塊

五:業(yè)務(wù)邏輯處理模塊
由于這里的代碼共九百多行就簡單展示下,后續(xù)調(diào)用這些封裝實現(xiàn)腳本功能。
以下為代碼展示。因本人業(yè)余時間有限,人力也有限,需完善的細節(jié)處理還有很多未完成。

1.導(dǎo)入各模塊并創(chuàng)建保存數(shù)據(jù)的類
每個識別后的物體基本信息采用類保存。

from random import randint import utils.set_canshu as CS from time import sleep, time from yaml import safe_load from core import shibie, model_run, Block, KeyBord, set_window, HotKey, get_ski from math import sqrtbo = KeyBord() # 鍵鼠模擬工具類 no_off = HotKey() # 熱鍵 VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT = 'a_u', 'a_d', 'a_l', 'a_r'# 讀取配置 with open('../data/fb.shi', errors='ignore') as f:f = safe_load(f)names = f['names']BUFF = f["buff"]ski_boss = f['s_boss']zhiye = f['zhiye']ski1 = f['q_ski']ski2 = f['f_x_ski']ONE_KEY_UP = f['ONE_KEY_UP'] # 一鍵撿物按鍵REV = f['REV'] hit_off = f['GIT_OFF'] class Block:# 一個物品的信息類def __init__(self, name, x, y, w, h,x_s):self.name = nameself.x = xself.y = yself.w = wself.h = hself.x_s = x_s # 相似度def __str__(self):return f"{self.name}xy:{self.x, self.y},wh:{self.w,self.h},s_x{self.x_s}"def __eq__(self, other):# 平面坐標(biāo)系中相等比較 return self.x == other.x and self.y == other.y

2.房間找門
判斷門是否開啟,找到這個門返回終點坐標(biāo)

class Search:def __init__(self):self.DATA = Noneself.f_x = None # 方向self.tuijian_f_x = None # 推薦方向self.start = None # 起點self.is_door = None # 是否找到門self.prev_men = None self.prev_min_me = None self.last_att = None self.ski = None self.g_center = None self.guai = None # 是否找到怪self.is_boss = False # 是否在boss房self.min_boss = Noneself.min_door = Noneself.boss_prev = False self.pl = 0def men(self): # 獲得唯一相似度最高的門self.is_door = Nonefor k, v in self.dt.items():if k.endswith('門'):for s in v:if s.conf < 60:print(65, '相似度', s, s.conf)continueif self.__f_x == VK_DOWN:if s.y < 490 or k == '時空門':returns.y += 40 if s.y > 600:s.y = 600s.x += s.w * 0.5if self.__f_x == VK_UP:if k == '時空門' or s.y > 450:returns.y -= 70 s.x += s.w * 0.5 if self.__f_x == VK_LEFT:if s.x > 400:returns.y -= 35if self.__f_x == VK_RIGHT:if s.x <= 400:returns.x += s.wif s.x > 800:s.x = 800s.y -= 35if not self.is_door:self.is_door = scontinueif s.conf > self.is_door.conf:self.is_door = sreturn self.is_door

3.房間找怪
找到怪物返回終點坐標(biāo)

# 尋找x軸距離最近攻擊對象,需要人物坐標(biāo)def monsters(self, is_off=hit_off):self.guai = Noneself.g_center = Nonefor k, v in self.dt.items():if k.startswith('g'):for s in v:if s.y > 550: s.y = 510if not self.guai:self.guai = scontinueif abs(sqrt((self.hero.x - s.x) ** 2 + (self.hero.y - s.y) ** 2)) < abs(sqrt((self.hero.x - self.guai.x) ** 2 + (self.hero.y - self.guai.y) ** 2)):self.guai = selse:self.g_center = sif not self.guai:returnif self.guai.name.endswith('浮空'):self.guai.y += 50if self.g_center:# 取最遠與最近的中點釋放范圍技能self.g_center.x = (self.guai.x + self.g_center.x) / 2self.g_center.y = (self.guai.y + self.g_center.y) / 2if self.hero.x <= self.guai.x: self.last_att = VK_RIGHTself.guai.x -= is_offreturn self.guaiif self.hero.x > self.guai.x + self.guai.w or self.hero.x >= self.guai.x: self.last_att = VK_LEFTself.guai.x += is_offreturn self.guai# 獲得終點def get_end(self, data):self.DATA = dataself.s_fenjie()self.new_room() # 記錄PL消耗# 找怪# 找門if self.men():self.prev_men = self.is_doorself.men_quyu = self.is_door.nameself.tuijian_f_x = Nonereturn self.is_doorif self.monsters():if self.g_center:self.guai = self.g_centerself.tuijian_f_x = Nonereturn self.guaireturn self.__tuijian_end

4.圖內(nèi)判斷邏輯
對數(shù)據(jù)進行處理,判定各種情況。
注意此時人物位置為起點,其他位置為終點

# 自動刷圖 class Auto:def __init__(self):set_window() #窗口設(shè)置self.DATA = {} # 識別后總數(shù)據(jù)self.img0 = Noneself.tong = Noneself.buff = Noneself.dev, self.model = model_run()def _move(self):self.end = se.get_end(self.DATA) # 獲得終點if se.tuijian_f_x:se.f_x = se.tuijian_f_xif move.move(se.start, self.end, se.f_x) == 2: # 圖內(nèi)尋路處理部分# 到達終點se.prev_men = Noneif se.guai:se.guai = Nonese.ski = get_ski(self.img0, ski1, ski2)se.put_skills(se.is_boss)returnif se.is_door:# se.is_door = Noneif not se.new_room():move.update_self() # 檢查進門卡點def hei_ping(self):# 1.黑屏檢測if self.DATA.get("黑屏"):move.r, move.d, move.l, move.u = False, False, False, Falsebo.down_up(0)sleep(0.5)return Truedef _tongguan(self):res = boss.is_tongguan(self.DATA)if self.tong and self.DATA.get('小地圖boss'):boss.xiu = Noneself.tong = Nonereturnif res == 2:self.tong = Truemove.r, move.d, move.l, move.u = False, False, False, Falsese.is_boss = Falseself.buff = Falsereturn res

5.主函數(shù)

# 主函數(shù)def main(self):while True:off = no_off.on_off()if not off:move.r, move.d, move.l, move.u = False, False, False, Falseif off is False:bo.down_up(0)returnbo.down_up(0)sleep(1)continueself.DATA, self.img0 = shibie(self.dev, self.model)if self.hei_ping(): # 1.黑屏檢測continueif self._tongguan(): # 通關(guān)后處理sleep(1)continueself._move() # 自動過圖# self._info() # debug數(shù)據(jù)打印

6.效果展示

9c1d5bf1

9月更新不再使用圖色識別,改用深度學(xué)習(xí)識別,可使用yolov5模型,更改為適用游戲內(nèi)的識別如上視頻展示

不定期持續(xù)更新中…

總結(jié)

以上是生活随笔為你收集整理的Python键鼠模拟,DNF自动刷图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。