#alien invasion 为什么只显示一行外星人?

问题遇到的现象和发生背景

请问为什么在项目alien invasion中我的外星人始终只显示一行呢?

用代码块功能插入代码,请勿粘贴截图

game_functions.py

import sys
import pygame
from bullet import Bullet
from alien import Alien
——snip——
def get_number_aliens_x(ai_settings, alien_width): 
    """计算每行可容纳多少个外星人"""
    available_space_x = ai_settings.screen_width - 2 * alien_width
    number_aliens_x = int(available_space_x / (2 * alien_width))
    return number_aliens_x

def get_number_rows(ai_settings,ship_height,alien_height):
    """""计算屏幕可容纳多少行外星人"""
    available_space_y = (ai_settings.screen_height - (3*alien_height) - ship_height)
    number_rows = int(available_space_y / (2*alien_height))
    return number_rows

def create_alien(ai_settings,screen,aliens,alien_number,row_number):
    """创建一个外星人并将其放到行中"""
    alien = Alien(ai_settings,screen)
    alien_width = alien.rect.width
    alien.x = alien_width+2 * alien_width * alien_number
    alien.rect.x = alien.x
    alien.y = alien.rect.height+2*alien.rect.height*row_number
    alien.rect.y = alien.y
    aliens.add(alien)

def create_fleet(ai_settings,screen,ship,aliens):
    """创建一整页外星人"""
    #创建一个外星人并计算一行中外星人的数量和行数
    alien = Alien(ai_settings, screen)
    number_aliens_x = get_number_aliens_x(ai_settings, alien.rect.width) 
    number_rows = get_number_rows(ai_settings,ship.rect.height,alien.rect.height)
    #创建一整页外星人
    for row_number in range(number_rows):
        for alien_number in range(number_aliens_x):
            create_alien(ai_settings, screen, aliens, alien_number,row_number) 

alien_invasion.py

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

def run_game():
    #初始化pygame、设置和玩家
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode(
        (ai_settings.screen_width,ai_settings.screen_height))
    pygame.display.set_caption("Alien Invasion")
    #创建一艘飞船、一个子弹编组、一个外星人编组
    ship = Ship(ai_settings,screen)
    bullets = Group()
    aliens = Group()
    #创建外星人群
    gf.create_fleet(ai_settings, screen, ship, aliens)
    #开始游戏主循环
    while True:
        gf.check_events(ai_settings,screen,ship,bullets)
        ship.update()
        gf.update_bullets(bullets)
        #每次循环时都重绘屏幕
        gf.update_screen(ai_settings,screen,ship,aliens,bullets)
run_game()
运行结果及报错内容

img

我的解答思路和尝试过的方法

我重点检查了 gf.create_fleet(ai_settings, screen, ship, aliens)部分代码,并没有发现错误;也尝试浏览csdn和谷歌上其他帖子,发现错误类型并不一样,请问我的错误出在哪里呢?

是因为每次循环都会重新绘制覆盖之前原有画面吗