1.1 「看」與「點」的藝術:影像辨識自動化原理
一般來說,寫遊戲外掛或自動化腳本有幾種常見的流派,例如「讀取遊戲記憶體」或「攔截網路封包」。但 auto_bot 採用的是最適合新手、也最直覺的流派:「影像辨識(找圖點擊)」。
- 程式的視角: 程式其實「看不懂」遊戲內容。它的運作邏輯非常單純——你給它一張小圖片(例如一個「戰鬥」按鈕的截圖),然後程式會快速掃描你目前的整個螢幕畫面,尋找有沒有哪個區塊的像素排列跟這張小圖片一模一樣。
- 找到座標: 一旦找到了,程式會計算出這個按鈕在螢幕上的
(X, Y)座標。 - 執行動作: 接著,程式會命令電腦的滑鼠游標瞬間移動到那個
(X, Y)座標,並執行「左鍵點擊」。 - 為什麼選這個流派?
- 直覺: 你平常怎麼玩遊戲,程式就怎麼玩。「看到按鈕 ➡️ 點下去」。
- 安全: 它不修改遊戲檔案,也不入侵遊戲記憶體,所以被遊戲官方判定為「作弊程式」而封鎖帳號的機率相對低很多(它就像是一個虛擬的機器手臂在幫你按滑鼠)。
1.2 核心工具箱:你的兩大神兵利器
在 auto_bot 專案中,所有的魔法幾乎都建立在兩個最核心的 Python 語法工具上:
1. PyAutoGUI (滑鼠鍵盤的替身) 這是一個第三方的 Python 模組,專門用來控制滑鼠和鍵盤。未來在專案裡,你會常看到這兩個核心動作:
- 找圖:
pyautogui.locateCenterOnScreen('戰鬥按鈕.png')(告訴程式:去螢幕上找這張圖,並回傳它中心的座標)。 - 點擊:
pyautogui.click()(告訴程式:按下滑鼠左鍵)。
💡 小知識: 遊戲畫面有時候會有特效(例如按鈕微微發光),導致截圖跟實際畫面有微小差異。這時候通常會搭配另一個隱藏神兵
OpenCV,它可以設定「相似度(Confidence)」。例如設定相似度0.9,代表只要有 90% 像,程式就當作找到了!
2. time.sleep() (掌控節奏的煞車皮) 新手寫自動化腳本最常犯的錯,就是讓程式跑得太快了。
- 人類的痛點: 你點擊了「進入遊戲」,畫面可能要載入 3 秒鐘,下一個按鈕才會出現。
- 程式的問題: Python 執行程式碼的速度是毫秒級的。它點完「進入遊戲」後,會在 0.001 秒內立刻去找下一個按鈕,當然找不到,然後程式就會崩潰報錯。
- 解法: 使用
time.sleep(3)。這句語法的意思是「程式暫停執行 3 秒鐘」。在寫自動化腳本時,讓程式學會「等待動畫跑完」,比什麼都重要。
1.3 新手常見的地雷:為什麼在我電腦能跑,換台電腦就爛掉?
很多人開心地寫完腳本,傳給朋友用,結果朋友一跑就瘋狂報錯「找不到圖片」。這通常是因為遇到了「影像辨識」的兩大天敵:
- 螢幕解析度不同: 你的螢幕是
1920x1080,朋友的是2560x1440(2K)。同一個遊戲按鈕在不同解析度下,佔用的像素大小會不一樣,對程式來說,那就是「完全不同的兩張圖」。 - 解法: 確保開發時的遊戲視窗大小,與執行時的遊戲視窗大小完全一致。
- Windows 螢幕縮放比例 (Display Scaling): 這是最容易被忽略的!很多筆記型電腦預設會把螢幕畫面放大到
125%或150%以方便閱讀文字。這會導致截下來的圖片被拉伸,程式絕對找不到。 - 解法: 在使用或開發影像辨識腳本時,強烈建議到 Windows 的顯示設定,將**「變更文字、應用程式與其他項目的大小」設定為 100%**。
# 1. 拿工具箱(載入我們需要的模組)
import pyautogui
import time
# 2. 緩衝時間(煞車皮)
print("腳本啟動!請在 3 秒內將畫面切換到遊戲視窗...")
time.sleep(3) # 讓程式暫停 3 秒,給你時間切換視窗
print("開始尋找『戰鬥』按鈕...")
# 3. 核心雷達:在畫面上找圖
# 假設你的資料夾裡有一張叫做 'battle_btn.png' 的圖片
# confidence=0.9 代表「相似度 90% 就當作找到」(這需要安裝 opencv-python 模組)
button_location = pyautogui.locateCenterOnScreen('battle_btn.png', confidence=0.9)
# 4. 決策邏輯(大腦判斷)
if button_location != None:
# 如果 button_location 不是空的 (None),代表找到了!
# 它會印出類似 (X=500, Y=300) 這樣的座標
print(f"太棒了!找到按鈕了,座標在:{button_location}")
# 5. 執行動作:命令滑鼠去點擊那個座標
pyautogui.click(button_location)
print("點擊完成!")
else:
# 如果找不到圖,button_location 就會是 None
print("糟糕,畫面上找不到符合的按鈕。")
print("請檢查:1. 遊戲畫面是否被遮住? 2. 截圖是否和現在畫面一樣?")
📝 第一階段小結
你可以把 auto_bot 想像成一個非常聽話但完全沒有常識的機器人。 你必須給它精準的照片(截圖圖庫),告訴它要找什麼(PyAutoGUI);而且因為它動作太快,你還必須牽著它,告訴它什麼時候該停下來等一下(time.sleep)。



















