Python 无法发射子弹,程序关闭

Python 无法发射子弹,程序关闭,python,pygame,Python,Pygame,我是Python初学者,正在开发一款太空入侵者游戏。我想让飞船发射子弹,但当我按下发射键时,没有子弹被发射。多次按下后,程序关闭 AlienGame.py import sys import pygame from pygame.sprite import Group from settings import Settings from ship import Ship import game_functions as gf def run_game(): pygame.init()

我是Python初学者,正在开发一款太空入侵者游戏。我想让飞船发射子弹,但当我按下发射键时,没有子弹被发射。多次按下后,程序关闭

AlienGame.py

import sys
import pygame
from pygame.sprite import Group
from settings import Settings
from ship import Ship
import game_functions as gf


def run_game():
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
    pygame.display.set_caption("TemplAReeb's First Game")
    ship = Ship(ai_settings, screen)
    bullets = Group()
    bg_color = (230, 230, 230)

   while True:
        gf.check_events(ship, bullets)
        ship.update()
        bullets.update()
        gf.update_screen(ai_settings, screen, ship, bullets)
        screen.fill(bg_color)
        ship.blitme()
        pygame.display.flip()
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()
        screen.fill(bg_color)
        ship.blitme()
        pygame.display.flip()
run_game()
gamefunctions.py

import sys
import pygame
from bullet import Bullet
def check_keydown_events (event, bullets):
    if event.key == pygame.K_SPACE:
        new_bullet = Bullet(ai_settings, screen, ship)
        bullets.add(new_bullet)

def check_events(ship, bullets):
    keys = pygame.key.get_pressed()
    ship.moving_right = keys[pygame.K_RIGHT]
    ship.moving_left = keys[pygame.K_LEFT]
    for event in pygame.event.get():
        if event.type ==  pygame.KEYDOWN:
         check_keydown_events(event, bullets)


def update_screen(ai_settings, screen, ship, bullets):
    bg_color = (230, 230, 230)
    screen.fill(bg_color)
    ship.blitme()
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    pygame.display.flip()
我得到一个错误,ai_设置没有定义

Traceback (most recent call last):
  File "C:/Users/Areeb Irfan/.PyCharmCE2018.3/config/scratches/AlienGame.py", line 32, in <module>
run_game()
  File "C:/Users/Areeb Irfan/.PyCharmCE2018.3/config/scratches/AlienGame.py", line 19, in run_game
gf.check_events(ship, bullets)
  File "C:\Users\Areeb Irfan\.PyCharmCE2018.3\config\scratches\game_functions.py", line 16, in check_events
check_keydown_events(event, bullets)
  File "C:\Users\Areeb Irfan\.PyCharmCE2018.3\config\scratches\game_functions.py", line 7, in check_keydown_events
new_bullet = Bullet(ai_settings, screen, ship)
NameError: name 'ai_settings' is not defined
回溯(最近一次呼叫最后一次):
文件“C:/Users/Areeb Irfan/.PyCharmCE2018.3/config/scratches/AlienGame.py”,第32行,在
运行游戏()
文件“C:/Users/Areeb Irfan/.PyCharmCE2018.3/config/scratches/AlienGame.py”,第19行,在run_游戏中
gf.检查事件(船舶、子弹)
文件“C:\Users\Areeb Irfan\.PyCharmCE2018.3\config\scratches\game\u functions.py”,第16行,在check\u事件中
检查按键事件(事件、项目符号)
文件“C:\Users\Areeb Irfan\.PyCharmCE2018.3\config\scratches\game\u functions.py”,第7行,在check\u keydown\u事件中
新建项目符号=项目符号(ai设置、屏幕、发货)
名称错误:未定义名称“ai_设置”

您的错误来自
检查按键事件中的这一行:

    new_bullet = Bullet(ai_settings, screen, ship)
您正试图将
ai\u设置
传递给
Bullet
构造函数,但它未在当前
check\u keydown\u事件
函数的命名空间中定义。与
update\u screen
不同,您没有将
ai\u设置作为参数传入

你可能需要解决这个问题。您已经知道如何操作了,因为您已经将
ai\u设置
传递到
update\u屏幕
(在当前未使用的地方,您是否将其添加到了错误的位置?)。您只需要将其扩展到
检查事件
检查按键事件

您能将问题包含到异常的完整回溯中吗?