pyautogui撰寫自動化腳本自動打怪

閱讀時間約 10 分鐘

如果對此有興趣的朋友可以跟我一起討論研究^^

工業革命以來自動化一直是人類很重視的一個領域

尤其繁忙的現代人

那種可以寫成程序的工作就交給自動化吧

那我這個遊戲是

https://nfl.lager.com.tw/event/nfl_ob/index.html

童話online

簡單來說就是一個old school的回合制戰鬥遊戲

裡面有一個角色叫做"闇術師"

有一個技能可以在非戰鬥狀態時直接招喚怪物出來

進入戰鬥狀態

進入戰鬥狀態之後一般來說我會選擇"黑洞爆發"

這個全體技能把怪物全部殺掉

所以整個邏輯大概如下

1.操作滑鼠點擊招怪技能圖案

2.進入戰鬥狀態後操作滑鼠點擊黑洞爆發圖案再點擊場上怪物

3.重複步驟2直到退出戰鬥狀態

ok邏輯釐清了再來就是程式碼

import pyautogui
from PIL import Image, ImageChops
import time
from PIL import Image

duration_n = 0.8

def 招怪():
while True:
print('正在招怪程序')
# 获取屏幕截图
screenshot = pyautogui.screenshot()

# 在屏幕截图中查找图案位置
img = Image.open('招怪.PNG')
location = pyautogui.locateOnScreen(img)

# 如果找到了图案
if location is not None:
# 计算图案中心点坐标
center_x, center_y = pyautogui.center(location)

# 点击图案中心点
pyautogui.click(center_x, center_y,duration=duration_n)

# 等待一段时间,以便观察周围像素的变化(可以根据需要调整等待时间)
time.sleep(1)

# 获取新的屏幕截图
new_screenshot = pyautogui.screenshot()

# 比较两个截图的不同之处
diff = ImageChops.difference(screenshot, new_screenshot)

# 如果有明显的不同(像素不同)
if diff.getbbox():
print("跳出招怪程序")
break

上面註解很清楚

程序會根據招怪.PNG這圖案在螢幕上搜索

搜索到了之後會計算图案中心点坐标

然後点击图案中心点

後面26行以後主要是判斷是否進入戰鬥狀態

我的作法是

# 等待一段时间,以便观察周围像素的变化(可以根据需要调整等待时间)

之後比對新的螢幕截圖跟舊的螢幕截圖是否有差異

# 如果有明显的不同(像素不同)
if diff.getbbox():
print("跳出招怪程序")
break

再來定義戰鬥函數

先宣告三種怪物的圖片

和攻擊技能黑洞爆發的圖片

避免干擾所以圖像匹配都使用模糊比對

接著進入while 迴圈

持續搜索三種怪物的圖像並找到位置

然後先點擊攻擊技能再點擊該怪物位置

這過程反覆循環直到螢幕上不再出現怪物

def 戰鬥():

# 定义怪物图像文件的路径
monster_A_path = Image.open('怪物A.PNG')
monster_B_path = Image.open('怪物B.PNG')
monster_C_path = Image.open('怪物C.PNG')
黑洞爆發_path = Image.open('黑洞爆發.PNG')

# 定義模糊比對參數
confidence_threshold = 0.8

# 循环直到屏幕上不再出现(A, B, C)怪物图像
while True:

# 搜索怪物A图像
monster_a_location = pyautogui.locateOnScreen(monster_A_path,confidence=confidence_threshold)
# 搜索怪物B图像
monster_b_location = pyautogui.locateOnScreen(monster_B_path,confidence=confidence_threshold)
# 搜索怪物C图像
monster_c_location = pyautogui.locateOnScreen(monster_C_path,confidence=confidence_threshold)

# 如果找到怪物A图像
if monster_a_location is not None:
# 点击D图像
d_location = pyautogui.locateOnScreen(黑洞爆發_path,confidence=confidence_threshold)
if d_location is not None:
d_x, d_y = pyautogui.center(d_location)
pyautogui.click(d_x, d_y,duration=duration_n)
time.sleep(0.5) # 等待一段时间,避免连续点击造成问题
# 点击怪物A图像
a_x, a_y = pyautogui.center(monster_a_location)
pyautogui.click(a_x, a_y,duration=duration_n)
time.sleep(0.5) # 等待一段时间,避免连续点击造成问题

# 如果找到怪物B图像
elif monster_b_location is not None:
# 点击D图像
d_x, d_y = pyautogui.center(pyautogui.locateOnScreen(黑洞爆發_path,confidence=confidence_threshold))
pyautogui.click(d_x, d_y,duration=duration_n)
time.sleep(0.5) # 等待一段时间,避免连续点击造成问题
# 点击怪物B图像
b_x, b_y = pyautogui.center(monster_b_location)
pyautogui.click(b_x, b_y,duration=duration_n)
time.sleep(0.5) # 等待一段时间,避免连续点击造成问题

# 如果找到怪物C图像
elif monster_c_location is not None:
# 点击D图像
d_x, d_y = pyautogui.center(pyautogui.locateOnScreen(黑洞爆發_path,confidence=confidence_threshold))
pyautogui.click(d_x, d_y,duration=duration_n)
time.sleep(0.5) # 等待一段时间,避免连续点击造成问题
# 点击怪物C图像
c_x, c_y = pyautogui.center(monster_c_location)
pyautogui.click(c_x, c_y,duration=duration_n)
time.sleep(0.5) # 等待一段时间,避免连续点击造成问题

else:
# 如果屏幕上不再出现(A, B, C)怪物图像,退出循环
break

後續發現沒辦法正常練功

主要問題出現於滑鼠點擊跟鍵盤操作的時候沒有反應

後來跟朋友討論發現

06:30 rickyyu press都改成 keydown +keyup
06:30 rickyyu click說錯
06:30 rickyyu pyautogui 的click 功能在我那個遊戲根本不適用
06:31 rickyyu https://github.com/skywalker0803r/autohitmonster/blob/main/play2.py
06:32 rickyyu 說錯鍵盤都改用keydown keyup 
06:32 rickyyu 滑鼠改用mousedown mouseup

以下是完整的可執行無bug的新程式碼:

https://github.com/skywalker0803r/autohitmonster/blob/main/play2.py


28會員
48Content count
人工智能工作經驗跟研究
留言0
查看全部
發表第一個留言支持創作者!
根據泰勒定理,f(x)可以寫成右邊一長串的導數的組合 為了更好理解這個東西我們可以用python實作 首先定義f(x)和定義factorial怎麼算 然後寫泰勒定理 f(x) = f(a) + f'(a)(x-a) ....後面還有一串 注意公式往後面看其實是有規律的 例如從
一個罐頭其中高度為h,底部半徑為r,且 h/r=2 已知 容量V = 1(公升) 找到一組: h(高度) , r(底部半徑) 使得表面積最小 目的: 因表面積最小因此可以讓製造成本降低幫助企業省錢 算式如上 答案我也使用python驗證一下求出數值解 接下來換個角度跟工具
嗜賭與社會剝奪感 轉載自medium,原作者:蕭瑟寡人 華人民族性嗜賭。 這點從小時候開始,就不斷見證台灣人家庭中,不管是富有還是貧窮,親戚朋友中都人有賭癮,家裡比較沒錢的被搞到傾家蕩產需要子女還債,而家裡有錢的則是可以把祖業賭掉一大半。 而離開台灣一段時間後,才發現這種社會風氣其實是華人獨
有機會跟世界各地的人交流以後會發現: 1)天下真的只有華人還有其他被儒家士大夫文化毒害的東亞民族會覺得讀書(不是看書或求學喔)跟吃補品一樣,越吃越補,而且可以代替實作。 2)其實世界上很多地方的人不認為中國真的是強大的文明。我們現在享受到的是日本崛起後世界對東亞的一點好奇和尊重,事實上亞洲許多地
先前寫一篇:對台灣的使命感,稍微聊到台灣年輕人、海歸派、僑民和自我認同問題。 在文中我稍微有提到台灣的現狀是很難改變的,在這篇我覺得可以稍微討論一下。 過去我有幾次提到: 台灣的憲政體制和產業環境,並非以其他歐美先進國家為文化和思想基礎,反而是承襲了華人一慣的法家政府的法治和經濟管理觀念。
根據泰勒定理,f(x)可以寫成右邊一長串的導數的組合 為了更好理解這個東西我們可以用python實作 首先定義f(x)和定義factorial怎麼算 然後寫泰勒定理 f(x) = f(a) + f'(a)(x-a) ....後面還有一串 注意公式往後面看其實是有規律的 例如從
一個罐頭其中高度為h,底部半徑為r,且 h/r=2 已知 容量V = 1(公升) 找到一組: h(高度) , r(底部半徑) 使得表面積最小 目的: 因表面積最小因此可以讓製造成本降低幫助企業省錢 算式如上 答案我也使用python驗證一下求出數值解 接下來換個角度跟工具
嗜賭與社會剝奪感 轉載自medium,原作者:蕭瑟寡人 華人民族性嗜賭。 這點從小時候開始,就不斷見證台灣人家庭中,不管是富有還是貧窮,親戚朋友中都人有賭癮,家裡比較沒錢的被搞到傾家蕩產需要子女還債,而家裡有錢的則是可以把祖業賭掉一大半。 而離開台灣一段時間後,才發現這種社會風氣其實是華人獨
有機會跟世界各地的人交流以後會發現: 1)天下真的只有華人還有其他被儒家士大夫文化毒害的東亞民族會覺得讀書(不是看書或求學喔)跟吃補品一樣,越吃越補,而且可以代替實作。 2)其實世界上很多地方的人不認為中國真的是強大的文明。我們現在享受到的是日本崛起後世界對東亞的一點好奇和尊重,事實上亞洲許多地
先前寫一篇:對台灣的使命感,稍微聊到台灣年輕人、海歸派、僑民和自我認同問題。 在文中我稍微有提到台灣的現狀是很難改變的,在這篇我覺得可以稍微討論一下。 過去我有幾次提到: 台灣的憲政體制和產業環境,並非以其他歐美先進國家為文化和思想基礎,反而是承襲了華人一慣的法家政府的法治和經濟管理觀念。
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
在軟體開發領域,乾淨程式碼是一個極為重要的概念。乾淨程式碼不僅僅是讓代碼運作正確,更是確保代碼易於閱讀、理解和維護的關鍵。本文將深入探討如何撰寫乾淨程式碼,並介紹一些提升代碼可讀性與維護性的最佳實踐方法。
安裝 pyautogui 在開始之前,我們需要先安裝 pyautogui 模塊。
安裝 pyautogui 在開始之前,我們需要先安裝 pyautogui 模塊。你可以在終端或命令提示字元中輸入以下命令來安裝它: 1.移動滑鼠 2.模擬滑鼠點擊 3.模擬滑鼠拖曳 4.捲動滑鼠
使用 pyautogui 套件來取得所有正在視窗 (windows)。
Thumbnail
調試(Debugging): 開始調試:F5 逐步執行:F10, F11 設置/刪除斷點:F9 停止調試:Shift + F5 調試視窗:Ctrl + Alt + P 調試選項:Alt + F7 編輯(Editing): 自動排版程式碼:Ctrl + K, Ctrl + D 快速註解/取消註解:Ct
Thumbnail
接案這條路很孤單,大部分的時候只有自己與電腦,如果身邊又沒有其他前輩可請教的話,那麼書會是你最好導師。今天介紹一本書,作者集結自己當初如何從一片血海中殺出一條可以賺錢的路等經驗,對推薦想要接觸文字創作的朋友,不管是對想要成為正職或斜槓來說,這是一本很好的工具書。 創作人人都能做,想突出必須大量創造
Thumbnail
我好不容易學會程式設計了,我想趕快來實作了!等等,先別急著將你內心的想法實現出來。你應該先問問使用者,並做一系列的思考規劃,也就是從最基本的需求訪談開始做起。這樣才能降低整個功能砍掉重練的可能性喔!
Thumbnail
Solidity:用來撰寫智能合約的程式語言之一,也是最多人用的 Vyper:用來撰寫智能合約的程式語言之二,Vyper 是一種面向合約的Pythonic編程語言
Thumbnail
去嘗試自己不熟悉、不擅長、或是曾經喜歡但已經遺忘的一些事情,或許會感覺到挫折或是技不如人,可能會有點好笑有點丟臉;但在那個你一邊懷疑為什麼我要這樣自取其辱的同時,其實也一邊注入了新的感受,然後又更了解自己一點,甚至之後回想起來覺得那時候真的很白癡,但也會慶幸自己有做那樣的嘗試。
Thumbnail
不論你選擇以什麼樣的方式,作為一種傳播的可能(展現自己的方式),最後都會回到自己身上,你不用非得「持續一些什麼?」但你可以替自己累積各種生命經驗,最重要的還是「起身去做」。所有的累積或持續,都是從嘗試、開始去執行!
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
在軟體開發領域,乾淨程式碼是一個極為重要的概念。乾淨程式碼不僅僅是讓代碼運作正確,更是確保代碼易於閱讀、理解和維護的關鍵。本文將深入探討如何撰寫乾淨程式碼,並介紹一些提升代碼可讀性與維護性的最佳實踐方法。
安裝 pyautogui 在開始之前,我們需要先安裝 pyautogui 模塊。
安裝 pyautogui 在開始之前,我們需要先安裝 pyautogui 模塊。你可以在終端或命令提示字元中輸入以下命令來安裝它: 1.移動滑鼠 2.模擬滑鼠點擊 3.模擬滑鼠拖曳 4.捲動滑鼠
使用 pyautogui 套件來取得所有正在視窗 (windows)。
Thumbnail
調試(Debugging): 開始調試:F5 逐步執行:F10, F11 設置/刪除斷點:F9 停止調試:Shift + F5 調試視窗:Ctrl + Alt + P 調試選項:Alt + F7 編輯(Editing): 自動排版程式碼:Ctrl + K, Ctrl + D 快速註解/取消註解:Ct
Thumbnail
接案這條路很孤單,大部分的時候只有自己與電腦,如果身邊又沒有其他前輩可請教的話,那麼書會是你最好導師。今天介紹一本書,作者集結自己當初如何從一片血海中殺出一條可以賺錢的路等經驗,對推薦想要接觸文字創作的朋友,不管是對想要成為正職或斜槓來說,這是一本很好的工具書。 創作人人都能做,想突出必須大量創造
Thumbnail
我好不容易學會程式設計了,我想趕快來實作了!等等,先別急著將你內心的想法實現出來。你應該先問問使用者,並做一系列的思考規劃,也就是從最基本的需求訪談開始做起。這樣才能降低整個功能砍掉重練的可能性喔!
Thumbnail
Solidity:用來撰寫智能合約的程式語言之一,也是最多人用的 Vyper:用來撰寫智能合約的程式語言之二,Vyper 是一種面向合約的Pythonic編程語言
Thumbnail
去嘗試自己不熟悉、不擅長、或是曾經喜歡但已經遺忘的一些事情,或許會感覺到挫折或是技不如人,可能會有點好笑有點丟臉;但在那個你一邊懷疑為什麼我要這樣自取其辱的同時,其實也一邊注入了新的感受,然後又更了解自己一點,甚至之後回想起來覺得那時候真的很白癡,但也會慶幸自己有做那樣的嘗試。
Thumbnail
不論你選擇以什麼樣的方式,作為一種傳播的可能(展現自己的方式),最後都會回到自己身上,你不用非得「持續一些什麼?」但你可以替自己累積各種生命經驗,最重要的還是「起身去做」。所有的累積或持續,都是從嘗試、開始去執行!