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

Python Crash Course第12章233页:ai_game未定义报错求助

问题解决步骤

核心错误分析与修复

你的代码存在几处关键错误,直接导致ai_game is not defined及其他潜在问题,逐一修复如下:

1. 修正构造函数的定义与参数

  • 类的初始化构造函数必须是双下划线的__init__,你写成了单下划线_init_,Python无法识别这是类的初始化方法
  • 你传入的参数是ai_setting,但代码里调用的是ai_game,参数名要统一,把参数改成ai_game

2. 移除无效导入

import self完全没必要,self是类方法的默认第一个参数,不需要单独导入,直接删除这行代码

3. 补全图片矩形属性初始化

加载图片后必须先获取图片的rect对象,否则self.rect会未定义,添加self.rect = self.image.get_rect()

4. 修正属性名拼写错误

self. Image里多了空格,改成self.image

5. 类名规范(可选但推荐)

Python类名一般采用大驼峰命名法,把ship改成Ship


修复后的完整代码

import pygame

class Ship:
    """管理飞船的类"""
    
    def __init__(self, ai_game):
        self.screen = ai_game.screen
        self.screen_rect = ai_game.screen.get_rect()
        
        # 加载飞船图片并获取其矩形属性
        self.image = pygame.image.load('image/dhip.bmp')
        self.rect = self.image.get_rect()
        
        # 将飞船放在屏幕底部中央
        self.rect.midbottom = self.screen_rect.midbottom
        
    def blitme(self):
        """在当前位置绘制飞船"""
        self.screen.blit(self.image, self.rect)

额外说明

  • ai_game是你主程序中创建的游戏实例(比如教材里的AlienInvasion类对象),后续在主程序中需要把这个实例传入Ship的构造函数,示例如下:
    # 主程序示例(对应教材主文件)
    class AlienInvasion:
        def __init__(self):
            pygame.init()
            self.screen = pygame.display.set_mode((1200, 800))
            self.ship = Ship(self)  # 将当前游戏实例self传入Ship
    
  • 确保image/dhip.bmp路径正确,图片文件需放在项目根目录下的image文件夹中,也可使用绝对路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:50:27