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
相关产品推荐
相关产品推荐

