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

Chrome恐龙游戏Python脚本调试异常求助:输出函数引用而非结果

修复Chrome恐龙游戏自动脚本的问题

我明白你跟着教程写脚本却没达到预期的郁闷,咱们来一步步梳理需要修改的关键地方,先看你的核心问题:调试时print(imageGrab)输出的是函数对象,而不是你想要的数值,这是因为你没有调用函数,同时脚本还有其他几个小问题需要调整。

首先,先拆解你的代码问题,再逐个修复:

1. 修复导入语句的语法错误

你把两个模块的导入写在同一行,会触发语法错误,拆分正确的导入格式:

from PIL import ImageGrab, ImageOps
import pyautogui
import time
from numpy import *

2. 避免函数名与模块名冲突

你自定义的imageGrab函数和PIL的ImageGrab模块同名了,这很容易造成代码混淆,建议把自定义函数重命名,比如改成check_obstacle_area,让代码逻辑更清晰。

3. 修正截图区域的坐标顺序

ImageGrab.grab()的参数格式是**(左, 上, 右, 下)**,你原来的box参数完全搞混了坐标规则:

  • 第三个参数用了恐龙的y坐标+335(垂直方向的值不能作为水平右边界)
  • 最后一个参数是10,比上边界的25还小,导致截图区域无效(下边界必须大于上边界)

假设你要检测恐龙前方的障碍物区域,调整后的box应该是这样的(可以根据实际游戏窗口微调宽度和高度):

def check_obstacle_area():
    dino_x, dino_y = Cordinates.dinosaur
    # 左:恐龙x坐标+偏移量,上:恐龙y坐标+偏移量,右:左+检测宽度,下:上+检测高度
    box = (dino_x + 435, dino_y + 25, dino_x + 435 + 200, dino_y + 25 + 50)
    image = ImageGrab.grab(box)
    grayImage = ImageOps.grayscale(image)
    a = array(grayImage.getcolors())
    return a.sum()

4. 修复print语句的函数调用问题

你写的print(imageGrab)是在打印函数本身的对象,而不是调用函数后的返回值,必须加上括号调用函数:

# 重命名函数后,写成print(check_obstacle_area())
print(check_obstacle_area())

5. 启用跳跃功能

你把pressSpace()注释掉了,所以即使检测到障碍物,脚本也不会触发跳跃,需要去掉注释:

if check_obstacle_area() != 1447:
    pressSpace()
    print(check_obstacle_area())

6. 调整初始化逻辑

把time.sleep(2)放在while循环之前,确保游戏完全加载后再开始检测,同时给主函数加上入口判断,让代码更规范。

修改后的完整代码示例

from PIL import ImageGrab, ImageOps
import pyautogui
import time
from numpy import *

class Cordinates():
    replayBtn = (960, 355)
    dinosaur = (784, 375)  # 可以用pyautogui.position()获取你屏幕上恐龙的实际坐标

def restartGame():
    pyautogui.click(Cordinates.replayBtn)

def pressSpace():
    pyautogui.keyDown('space')
    time.sleep(0.05)
    print("Jump")
    pyautogui.keyUp('space')

def check_obstacle_area():
    dino_x, dino_y = Cordinates.dinosaur
    # 可根据你的游戏窗口微调检测区域的数值
    box = (dino_x + 435, dino_y + 25, dino_x + 435 + 200, dino_y + 25 + 50)
    image = ImageGrab.grab(box)
    grayImage = ImageOps.grayscale(image)
    a = array(grayImage.getcolors())
    return a.sum()

def main():
    restartGame()
    time.sleep(2)  # 等待游戏加载完成
    while True:
        if check_obstacle_area() != 1447:
            pressSpace()
            print(check_obstacle_area())
        time.sleep(0.1)

if __name__ == "__main__":
    main()

额外提醒:

  • 恐龙的坐标(784, 375)需要和你屏幕上的实际位置匹配,你可以打开游戏后,用pyautogui.position()获取鼠标指向恐龙时的坐标。
  • 检测区域的数值(435、25、200、50)可能需要根据你的游戏窗口大小微调,确保能准确捕捉到前方的障碍物。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:55:52