试图使函数获得Pygam的最大行数

2024-04-24 13:35:15 发布

您现在位置:Python中文网/ 问答频道 /正文

所以主代码是这样工作的:

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

def run_game():
    #initialize game and create a screen object
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode(
        (ai_settings.screen_width, ai_settings.screen_height))

    pygame.display.set_caption("Alien Invasion 2000")
    #Make ship
    ship = Ship(ai_settings, screen)
    #make a group to store bullets in
    bullets = Group()
    aliens = Group()
    #create the fleet of aliens
    gf.create_fleet(ai_settings, screen, aliens)

    #start the main loop for game
    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()

此外,我有一个模块称为游戏_函数.py,但游戏功能中唯一不起作用的部分是def的最后几个部分(获取外星人号,创建外星人和舰队)。返回错误。首先,我认为我错过了一些阅读Python Crashcourse一书的内容,但是我已经阅读了很多次新添加的代码,但都没有结果。这本书提到了一个名字“外星人号码”,但我不知道该放在哪里

问题:有人知道哪里出了问题,哪里需要插入“外星号码”,或者有人知道为什么会产生错误吗?

它应该做什么:从另一个名为Alien(150x150px.png)的文件中获取一个图像,并尝试查看它可以在游戏中填充多少行:

import sys, pygame
from bullet import Bullet
from alien import Alien

def check_keydown_events(event, ai_settings, screen, ship, bullets):
    """Respond to keypresses"""
    if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                ship.moving_right = True
            elif event.key == pygame.K_LEFT:
                ship.moving_left = True
            elif event.key == pygame.K_UP:
                ship.moving_up = True
            elif event.key == pygame.K_SPACE:
                fire_bullet(ai_settings, screen, ship, bullets)
            #lyckas inte stänga av spelet
            #elif event.key == pygame.K_q:
             #   sys.exit()

def check_keyup_events(event, ai_settings, screen, ship):
    """Respond to keyreleases"""
    if event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT:
                ship.moving_right = False
            elif event.key == pygame.K_LEFT:
                ship.moving_left = False
            elif event.key == pygame.K_DOWN:
                ship.moving_left = False

def check_events(ai_settings, screen, ship, bullets):
    for event in pygame.event.get():
        #lyckas inte stänga av spelet
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            check_keydown_events(event, ai_settings, screen, ship, bullets)

        elif event.type == pygame.KEYUP:
            check_keyup_events(event, ai_settings, screen, ship)


def update_screen(ai_settings, screen, ship, aliens, bullets):
    """Update images on the screen and flip to new screen."""
    screen.fill(ai_settings.bg_color)
    #redraw all bullets behind ship and aliens
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    ship.blitme()
    aliens.draw(screen)
    #make the most recently drawn screen visible
    pygame.display.flip()

def update_bullets(bullets):
    """update position of bullets and get rid of old bullets"""
    #updates bullet position
    bullets.update()

    #get rid of bullets that have disappeared
    for bullet in bullets.copy():
        if bullet.rect.bottom <= 0:
            bullets.remove(bullet)

def fire_bullet(ai_settings, screen, ship, bullets):
    """Fire a bullet if limit not reached yet"""
    #Create a new bullet and add it to the bullet group
    if len(bullets) < ai_settings.bullets_allowed:
                    #create a new bullet and add it to the bullet group
                    new_bullet = Bullet(ai_settings, screen, ship)
                    bullets.add(new_bullet)

def get_number_aliens_x(ai_settings, alien_width):
    """Determine the number of aliens that can fit in a row"""
    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 create_alien(ai_settings, screen, aliens, aliens_number):
    """Create an alien and place it in the row"""
    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)

def create_fleet(ai_settings, screen, aliens):
    """Create a full fleet of aliens"""
    #create an alien and find ithe number of alien in a row
    alien = Alien(ai_settings, screen)
    number_aliens_x = get_number_aliens_x(ai_settings, alien.rect.width)


    #create the first row of alien
    for alien_number in range(number_aliens_x):
        create_alien(ai_settings, screen, aliens, alien_number)

---

Traceback (most recent call last):
  File "python\alien_invasion\alien_invasion.py", line 29, in <module>
    run_game()
  File "python\alien_invasion\alien_invasion.py", line 21, in run_game
    gf.create_fleet(ai_settings, screen, aliens)
  File "python\alien_invasion\game_function.py", line 94, in create_fleet
    create_alien(ai_settings, screen, aliens, alien_number)
  File "python\alien_invasion\game_function.py", line 81, in create_alien
    alien.x = alien_width + 2 * alien_width * alien_number
NameError: name 'alien_number' is not defined

路径开头已删除,无任何关系。你知道吗


Tags: ineventnumbersettingsdefcreatewidthscreen
1条回答
网友
1楼 · 发布于 2024-04-24 13:35:15

您的参数名为aliens_number(复数),但您试图将其用作alien_number(单数)。你知道吗

def create_alien(ai_settings, screen, aliens, aliens_number):
    # ... 
    alien.x = alien_width + 2 * alien_width * alien_number

相关问题 更多 >