Alan_laye 2022-11-17 03:51 采纳率: 50%
浏览 9

#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和谷歌上其他帖子,发现错误类型并不一样,请问我的错误出在哪里呢?

  • 写回答

1条回答 默认 最新

  • 一二三四! 2022-11-17 09:27
    关注

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

    评论

报告相同问题?

问题事件

  • 创建了问题 11月17日

悬赏问题

  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 如何提取csv文件中需要的列,将其整合为一篇完整文档,并进行jieba分词(语言-python)
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置