Python-For-Games

2024-08-18

筆記如何使用 Python 優化遊戲進行體驗的各種 Script。

logo

偵測螢幕 RGB 是否存在

可以用於判斷畫面變化,搭配要執行特定動作,直接使用 pyautogui 進行截圖,但檢查 Pixel Color 透過 numpy 進行處理,以達到最佳效能。

每一次全畫面 (2K, 2560 x 1440) 的檢查,只需要費時約 0.1 秒。

import pyautogui
import numpy as np
import time

def check_color_in_screenshot(r, g, b):
    now = time.time()
    screenshot = pyautogui.screenshot()
    screenshot_np = np.array(screenshot)

    target_pixels = np.where((screenshot_np[:, :, 0] == r) &
                            (screenshot_np[:, :, 1] == g) &
                            (screenshot_np[:, :, 2] == b))

    if target_pixels[0].size > 0:
        print(f'found at {target_pixels[1][0]}, {target_pixels[0][0]}, time: {time.time() - now}')
        return True

    return False

將所有符合的 Pixel 以指定顏色重新繪製輪廓。

import os
import pyautogui
import numpy as np
import time
from PIL import Image

def draw_match(r, g, b, target_pixels, img_width, img_height):
    image = Image.new("RGB", (img_width, img_height), "white")
    pixels = image.load()
    for i in range(0, target_pixels[0].size):
        x = target_pixels[1][i]
        y = target_pixels[0][i]
        pixels[x, y] = (r, g, b)

    os.makedirs("img", exist_ok=True)
    image.save(f"img/{time.time()}.png")

座標偵測

pyautogui.displayMousePosition()
# 動態取得目前游標所在的座標以及 Pixel RGB