針對「Doomsday: Last Survivors」遊戲的 槍火盛宴 自動遊玩腳本。使用圖像識別技術讀取遊戲狀態,並透過改進的 2048 演算法計算最佳移動策略,自動控制遊戲進行。
- 🎯 精確的圖像識別:使用 Tesseract OCR 和 OpenCV 進行數字識別
- 🧠 智能移動策略:整合多種評估指標(空格子、分數、單調性、平滑度等)
- 🎮 自動化控制:自動截圖、識別、計算並執行最佳移動
- 🔧 手動校準工具:提供多種校準工具,確保識別準確度
- 📊 即時狀態顯示:顯示當前網格狀態和移動決策
- Windows 10/11
- Python 3.8+
- Tesseract OCR
pip install -r requirements.txtWindows 用戶:
-
下載 Tesseract OCR:
- 官方下載:https://github.com/UB-Mannheim/tesseract/wiki
- 選擇最新版本(例如:
tesseract-ocr-w64-setup-5.x.x.exe)
-
安裝建議:
- 安裝到預設路徑:
C:\Program Files\Tesseract-OCR - 勾選「Add to PATH」選項(如果有的話)
- 安裝到預設路徑:
-
驗證安裝:
tesseract --version
-
如果無法在命令列找到 tesseract,需要在
image_recognition.py中設定路徑:pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
或根據您的安裝路徑調整(例如:
D:\Program Files\Tesseract-OCR\tesseract.exe)
由於每個人的遊戲視窗大小和位置可能不同,需要先校準格子位置:
-
截取遊戲畫面:
python capture_window.py
-
測試並調整手動位置:
- 打開
setup_manual_positions.py - 修改
MANUAL_POSITIONS字典中的座標 - 座標格式:
(row, col): (x1, y1, x2, y2),其中(x1, y1)是數字區域的左上角,(x2, y2)是右下角 - 運行以下命令生成標記圖片:
python setup_manual_positions.py
- 查看生成的
manual_grid_test.png,確認綠色框是否正確對齊每個數字
- 打開
-
使用校準工具(可選):
find_window.py- 尋找遊戲視窗calibrate_grid.py- 校準整體網格位置adjust_grid_position.py- 調整網格左上角位置adjust_grid_size.py- 調整網格大小manual_grid_positions.py- 視覺化手動位置
當格子位置校準完成後:
python auto_play.py腳本會自動:
- 截取遊戲視窗
- 識別 4x4 網格中的數字
- 計算最佳移動方向
- 發送方向鍵控制遊戲
- 等待動畫完成後繼續下一輪
參數調整:
可以在 auto_play.py 最後一行調整參數:
auto_play_loop(max_iterations=100, delay=1.0)max_iterations: 最大遊玩次數(預設 100)delay: 每次移動之間的延遲秒數(預設 1.0 秒)
auto_play.py- 主程式,整合所有功能的自動遊玩腳本image_recognition.py- 圖像識別模組,負責截圖處理和數字識別game_logic.py- 2048 遊戲邏輯,計算最佳移動策略capture_window.py- 截取遊戲視窗畫面auto_control.py/auto_control_pyautogui.py- 自動控制模組,發送方向鍵
setup_manual_positions.py- 手動設定每個格子的精確座標(重要)manual_grid_positions.py- 視覺化手動位置的工具find_window.py- 尋找遊戲視窗calibrate_grid.py- 校準整體網格位置adjust_grid_position.py- 調整網格位置adjust_grid_size.py- 調整網格大小find_grid_position.py- 尋找網格位置
auto_detect_cell_positions.py- 自動檢測格子位置(實驗性)fix_positions.py- 修復位置的工具
本腳本使用改進的 2048 演算法,綜合評估以下指標來決定最佳移動:
- 空格子數量(權重 20)- 保持更多空格子,增加遊戲靈活性
- 分數變化(權重 5)- 優先選擇能獲得更高分數的移動
- 單調性(權重 10)- 鼓勵數字按順序排列(如:2, 4, 8, 16)
- 平滑度(權重 0.1)- 減少相鄰格子的數字差異
- 最大數字位置(權重 100)- 鼓勵最大數字放在角落
- 合併機會(權重 15)- 優先選擇能產生合併的移動
這些權重可以在 game_logic.py 的 evaluate_move() 函數中調整。
- 確保遊戲正在運行且視窗標題為 "Doomsday: Last Survivors"
- 使用
find_window.py檢查視窗是否存在 - 確保遊戲視窗未被最小化
-
檢查格子位置:
- 運行
python setup_manual_positions.py生成標記圖片 - 查看
manual_grid_test.png,確認綠色框是否正確對齊 - 如果位置不對,修改
setup_manual_positions.py中的MANUAL_POSITIONS
- 運行
-
調整識別參數:
- 檢查
image_recognition.py中的圖像預處理參數 - 可能需要調整亮度閾值或 OCR 配置
- 檢查
-
檢查圖片清晰度:
- 確保遊戲視窗清晰可見
- 避免視窗被其他程式遮擋
- 確保遊戲視窗處於活動狀態(未被其他視窗遮擋)
- 檢查是否有其他程式阻擋鍵盤輸入
- 嘗試以系統管理員身分執行腳本
- 如果使用
win32api無效,腳本會自動嘗試使用pyautogui
- 可以在
game_logic.py的evaluate_move()函數中調整權重參數 - 根據實際遊戲表現,增加或減少某些指標的權重
- 首次使用前必須校準格子位置,否則識別會不準確
- 建議在遊戲視窗清晰可見時運行腳本
- 可以隨時按
Ctrl+C停止腳本 - 如果遊戲更新導致視窗大小或位置改變,需要重新校準
本專案僅供學習和研究使用。