You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python游戏生命值监测:如何在生命值下降时触发代码执行

游戏生命值下降触发指定功能的实现方案

核心逻辑

  • 新增变量存储上一轮识别到的生命值,初始值可设置为游戏满血数值(比如100)
  • 每轮OCR识别完成后先提取有效生命值,和上一轮存储的数值做对比
  • 若当前生命值小于上一轮数值,立即执行你自定义的目标代码
  • 每轮比对完成后更新存储的生命值数值,供下一轮比对使用

优化后代码

import numpy as np
import pytesseract
import cv2
from PIL import ImageGrab

conf = r'--oem 3 --psm 6 outputbase digits'
pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
# 存储上一轮生命值,初始设为满血值100
last_health = 100

def screenToData():
    global last_health
    while (True):
        screen = np.array(ImageGrab.grab(bbox=(350, 150, 550, 300)))
        cv2.imshow("window", cv2.cvtColor(screen, cv2.COLOR_BGR2RGB))
        data = pytesseract.image_to_data(cv2.cvtColor(screen, cv2.COLOR_BGR2GRAY), lang='eng', config=conf)
        if cv2.waitKey(25) & 0xFF == ord('q'):
            cv2.destroyAllWindows()
            break
        
        current_health = None
        for x, box in enumerate(data.splitlines()):
            if x != 0:
                box = box.split()
                if len(box) == 12:
                    # 提取识别到的数值,赋值给当前生命值
                    current_health = int(box[11])
                    # 数值范围校验,避免OCR识别错误出现异常值
                    if current_health <0 or current_health >100:
                        current_health = None
        
        # 只有拿到有效生命值才做比对
        if current_health is not None:
            if current_health < last_health:
                # 这里替换成你要执行的自定义代码即可
                print(f"生命值从{last_health}下降到{current_health},触发指定操作")
            # 更新上一轮生命值
            last_health = current_health

screenToData()

额外优化建议

  • 可以调整ImageGrab.grab的bbox参数,只截取生命值显示的小范围区域,大幅提升识别速度和准确率
  • 如果OCR识别经常出现错误数值,可以加连续多轮校验,连续2-3轮识别到数值下降再触发操作,避免误触发

内容的提问来源于stack exchange,提问作者Benji Papi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:24:05