飞机大战项目拆分辅助方法失败

飞机大战项目 按照从入门到实践这本书上的代码敲的,结果到拆分辅助方法这一步出错了


import sys
import pygame
from settings import Settings
from ship import Ship


class AlienInvasion:
    """管理游戏资源和行为的类"""

    def __init__(self):
        """初始化游戏并创建游戏资源"""
        pygame.init()  # 初始化背景设置
        self.settings = Settings()  # 创建Setting类实例并赋值給self.settings
        self.screen = pygame.display.set_mode(self.settings.window_size)  # 创建一个显示窗口
        pygame.display.set_caption("飞机大战")  # 设置名称
        # 设置背景颜色
        self.bg_color = self.settings.bg_color
        self.ship = Ship(self)  # 创建实例 self表示当前项目实例

    def run_game(self):  # 控制游戏方法
        """开始游戏主循环"""
        while True:
            self._check_events()
            self._update_screen()

        def _check_events(self):
            # 监视键盘鼠标的输入 事件循环, 响应输入操作
            for event in pygame.event.get():  # 返回一个它在上一次被调用后所有键鼠操作事件的列表
                if event.type == pygame.QUIT:  # 若点击关闭按钮
                    sys.exit()  # 退出游戏

        def _update_screen(self):
            # 让背景色填充屏幕 并在每次循环后重绘
            self.screen.fill(self.bg_color)  # fill 只接受一个实参:一种颜色
            self.ship.blitme()  # 绘制飞船 是飞船出现在背景图层上
            # 让最近绘制的屏幕可见 擦去旧屏幕 绘制新屏幕
            pygame.display.flip()


if __name__ == '__main__':
    # 创建游戏实例并运行游戏
    ai = AlienInvasion()
    ai.run_game()

img

我的解答思路和尝试过的方法
我想要达到的结果

根据代码的编译逻辑和你的代码来说,你的这个checkevent 必须在调用之前就得定义。就是说,你把while放在updatescreen后面应该就行了

是缩进的问题!
两个辅助方法不应该在 run_game 方法之下,而是和 run_game 并列