我在太空入侵者游戏中成功地创造了一排外星人。但是,在编写了这些行的几列来填充我的屏幕并运行代码之后,我仍然没有正确地理解它。
game_function.py
import pygame
import sys
from bullet import Bullet
from alien import Alien
def update_screen(ai_settings, screen, ship, aliens, bullets):
# redraw the screen during each pass through the loop
screen.fill(ai_settings.bg_color)
ship.blitme()
aliens.draw(screen)
# make the most recently drawn screen visible
"""Update images on the screen and flip to the new screen."""
# redraw all bullets behind ship and aliens
for bullet in bullets.sprites():
bullet.draw_bullet()
pygame.display.flip()
def get_number_rows(ai_settings, ship_height, alien_height):
"""Determine the number of rows of aliens that fit into the screen"""
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):
"""create an alien and place it in a 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
alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
aliens.add(alien)
def get_number_aliens_x(ai_settings, alien_width):
"""Determine the number of aliens that 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_fleet(ai_settings, screen, ship, aliens):
"""Create a full fleet of aliens"""
# create an alien and find the number of aliens in a row
# spacing between each alien is equal to one alien width
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)
# create the first row of aliens
for row_number in range(number_rows):
for alien_number in range(number_aliens_x):
# create an alien and place it in a row
create_alien(ai_settings, screen, aliens, alien_number, row_number)main.py
import pygame
import sys
from settings import Settings
from ship import Ship
import game_functions as gf
from pygame.sprite import Group
from alien import Alien
def run_game():
# initialize
# pygame, settings
# and 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")
# make a ship
ship = Ship(screen, ai_settings)
# group to store bullets
bullets = pygame.sprite.Group()
# make an alien
alien = Alien(ai_settings, screen)
# a group to store aliens
aliens = pygame.sprite.Group()
# create a fleet of aliens
gf.create_fleet(ai_settings, screen, ship, aliens)
# main loop for the game
while True:
# watch
# for keyboard and mouse events
gf.check_events(ship, ai_settings, screen, bullets)
ship.update()
gf.update_bullets(bullets)
gf.update_screen(ai_settings, screen, ship, aliens, bullets)
run_game()所以,本质上,我的问题是,我如何才能把这一行外星人变成一列外星人来填充我的屏幕。根据我的代码,它应该会生成一支外星人舰队,但它不是。
发布于 2022-08-01 16:36:32
我无法运行这段代码,因为有些文件丢失了。修复它的方法是首先查看像get_number_aliens_x和get_number_rows这样的函数是否返回正确的值。如果这些是正确的,下一步将是核实外星人确实是在正确的地方创造的,并留在正确的地方。我看不出create_alien中有什么特别的错误,但是在外星类中是否有代码在创建之后会扰乱他们的位置呢?
https://stackoverflow.com/questions/73194934
复制相似问题