路在前方QAQ 2021-08-25 18:02 采纳率: 100%
浏览 44
已结题

一直报错未定义名称头快炸了啊,少侠们帮帮忙把!

模块(火箭游戏):

def run_game():
pygame.init()
ai_settings = Shezhi()

#游戏窗口设置
screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))

#游戏名称设置
pygame.display.set_caption('火箭')

ship = Ship(screen)

#创建一艘飞船、一个子弹编组和一个外星人编组

#设置一个编组用来储存子弹
bullets = Group()

#创建一个外星人编组
aliens = Group()


#创建一个外星人
alien = Alien(ai_settings, screen)

#游戏主循环程序
while True:
    Xy.events(ship, bullets, ai_settings, screen)
    
    #飞船移动条件和速度
    ship.update(ai_settings)
    
    #创建外星人群
    ship.create_fleet(ai_settings, aliens)
    
    bullets.update()
    
    #绘制屏幕和让最近绘制的屏幕可见
    ship.update_screen(ai_settings, alien, bullets, ship)

run_game()

模块(矩形坐标位置与图片导入绘制):

coding=utf-8

ai_settings = Shezhi()

    self.up = False
    self.down = False
    self.left = False
    self.right = False
    
    self.x = float(self.rect.centerx)
    self.y = float(self.rect.centery)



def blitme(self):
        
    self.screen.blit(self.image, self.rect)
        
        
def update(self, ai_settings):        
    if self.up and self.rect.top > 0:
        self.y -= ai_settings.speed
    if self.down and self.rect.bottom < self.screen_rect.bottom:
        self.y += ai_settings.speed
    if self.left and self.rect.left > 0:
        self.x -= ai_settings.speed
    if self.right and self.rect.right < self.screen_rect.right:
        self.x += ai_settings.speed
        
        
    self.rect.centerx = self.x
    self.rect.centery = self.y
                                                

def update_screen(self, ai_settings, alien, bullets, ship):
    self.screen.fill(ai_settings.color)    
        
    for bullet in bullets.sprites():
        bullet.draw_zd()
        
        
    ship.blitme()
        
    alien.blitme()
    aliens.draw(screen)
        
    pygame.display.flip()
        
        
def get_number_aliens_x(ai_settings, alien_width):
    """计算每行可以容纳多少个外星人"""
    available_space_x = ai_settings.screen_width - 2 * alien_width
    number_alien_x = int(available_space_x / (2 * alien_width))
    return number_alien_x
        
        
        
        
def create_fleet(ai_settings, screen, aliens):
    """创建外星人群"""
    #创建一个外星人,并计算一行可容纳多少个外星人
    #外星人间距为外星人宽度
    alien = Alien(ai_settings, screen)
    alien_width = alien.rect.width
    number_aliens_x = get_number_aliens_x(ai_settings, alien_width)
    number_rows = get_number_rows(ai_settings, ship.rect.height,
        alien.rect.height)
    return alien 

    #创建第一行外星人
    for row_number in range(number_rows):
        for alien_number in range(number_alien_x):
            create_alien(ai_settings, screen, aliens, alien_number, row_number)
            #创建第一行外星人并将其加入当前行
            alien = Alien(ai_settings, screen)
            alien.x = alien_width + 2 * alien_width * alien_number
            alien.rect.x = alien.x
            aliens.add(alien)

#全是名称(get_number_aliens_x)未定义头都搞大了哪位支个招吧救救我啊.......
img

def create_alien(ai_settings, screen, aliens, alien_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
    aliens.add(alien)
  • 写回答

2条回答 默认 最新

  • Pliosauroidea 2021-08-25 18:24
    关注

    ?你是不是把函数定义写在类里面了
    你这个缩进有点乱,但是看函数并列关系我怀疑你把get_number_aliens_x定义在Ship类里了
    有帮助望采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月2日
  • 已采纳回答 8月25日
  • 创建了问题 8月25日

悬赏问题

  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography