2025年3月3日 星期一

用 Python 自動化 Chrome Dino 遊戲

 

用 Python 自動化 Chrome Dino 遊戲


課程名稱:用 PyAutoGUI 進行螢幕自動化與 Dino 遊戲機器人設計
課程時長:2 小時
適合對象:對 Python 有基本認識,想學習自動化與電腦視覺技術的學員
課程目標

  1. 了解 PyAutoGUI 的基本操作,包括滑鼠點擊與鍵盤模擬。
  2. 學會如何擷取螢幕像素並分析影像數據。
  3. 撰寫 Dino 小恐龍遊戲的自動化腳本,讓電腦自動幫助恐龍跳躍避開障礙物。
  4. 優化腳本,使其更穩定並能應對不同遊戲速度。

第一堂課(60 分鐘):PyAutoGUI 基礎與 Dino 遊戲偵測

目標

  • 安裝 PyAutoGUI
  • 學會基本 鍵盤與滑鼠控制
  • 學會 擷取螢幕顏色數據
  • 初步偵測 障礙物

1.1 介紹 PyAutoGUI

PyAutoGUI 是一個強大的 Python 函式庫,可以模擬鍵盤、滑鼠與螢幕操作,常用於 自動化測試 或 遊戲機器人設計

  • 安裝 PyAutoGUI:

    pip install pyautogui
    
    
  • 測試簡單的滑鼠點擊與鍵盤操作:

    import pyautogui
    import time
    
    pyautogui.click(100, 100)  # 在 (100,100) 位置點擊
    time.sleep(1)
    pyautogui.press('space')  # 按下空白鍵
    
    

1.2 擷取螢幕並取得像素顏色

我們要透過 螢幕擷取技術 來偵測遊戲中的障礙物。

  • 取得當前滑鼠座標的顏色:

    import pyautogui
    
    x, y = pyautogui.position()
    im = pyautogui.screenshot()
    r, g, b = im.getpixel((x, y))
    
    print(f"目前位置 ({x}, {y}) 的顏色是:RGB({r}, {g}, {b})")
    
    
  • 分析 Dino 遊戲的背景與障礙物顏色

    • 背景 通常是 淺色(RGB 約 (240, 240, 240))。
    • 障礙物(仙人掌、鳥)是 深色(RGB (<200, <200, <200))。

1.3 基本 Dino 自動跳躍程式

利用 PyAutoGUI 偵測特定區域的顏色來控制 Dino 跳躍:

import pyautogui
import time

pyautogui.click(100, 100)  # 開始遊戲
pyautogui.press('space')  # 讓恐龍開始跑步
time.sleep(1)

while True:
    im = pyautogui.screenshot()
    hasJump = False

    for x in range(250, 260, 3):  # 掃描 X 軸區域
        for y in range(230, 250, 3):  # 掃描 Y 軸區域
            r, g, b = im.getpixel((x, y))
            if r < 200:
                pyautogui.press('space')
                hasJump = True
                break
        if hasJump:
            break


第二堂課(60 分鐘):優化 Dino 遊戲自動化

目標

  • 讓偵測範圍更準確
  • 減少 CPU 負擔,讓遊戲更穩定
  • 應對遊戲加速(難度提升)

2.1 優化障礙物偵測

當恐龍速度加快,障礙物會來得更快,因此:

  1. 提前偵測障礙物
  2. 記錄障礙物寬度
  3. 若障礙物過寬,則 長按空白鍵

改進版程式碼

import pyautogui
import time

pyautogui.FAILSAFE = True
pyautogui.click(100, 100)
pyautogui.press('space')
time.sleep(1)

while True:
    im = pyautogui.screenshot()
    
    detected_obstacle_width = 0
    mustJump = False

    for x in range(180, 280, 2):  # 擴大偵測範圍
        for y in range(230, 250, 5):  
            r, g, b = im.getpixel((x, y))
            if r < 180 and g < 180 and b < 180:
                detected_obstacle_width += 1
                mustJump = True
                break

        if mustJump and detected_obstacle_width > 10:  # 確保障礙物夠大
            if detected_obstacle_width > 25:  # 如果障礙物太寬
                pyautogui.keyDown('space')  # 長按跳更高
                time.sleep(0.15)
                pyautogui.keyUp('space')
            else:
                pyautogui.press('space')  # 一般跳躍
            break

2.2 增加延遲避免錯誤跳躍

time.sleep(0.1) 可讓恐龍避免過度跳躍:

time.sleep(0.1)  # 限制跳躍頻率

2.3 測試與除錯

  1. 變更遊戲速度(使用開發者模式修改 Dino 遊戲速度)

  2. 印出 RGB 數據 來測試:

    print(f"({x}, {y}) 的顏色:{r}, {g}, {b}")
    
    

課程總結

章節

內容

時長

第一堂課

PyAutoGUI 基礎、擷取螢幕顏色、簡單 Dino 自動化

60 分鐘

第二堂課

優化 Dino 偵測、避免過度跳躍、適應加速

60 分鐘

學習成就: ✅ 學會 PyAutoGUI 的滑鼠、鍵盤控制
✅ 學會如何擷取螢幕顏色
✅ 撰寫 Dino 遊戲機器人並優化其效能

這堂課程結束後,學員將能夠獨立開發 Dino 遊戲自動化機器人,並學習如何運用 PyAutoGUI 進行更多自動化應用!

沒有留言:

張貼留言