import pygame,sys
from pygame.sprite import Group
from settings import Settings
class Alien(pygame.sprite.Sprite):
def __init__(self,screen,ai_settings):
super(Alien, self).__init__()
self.screen = screen
self.ai_settings=ai_settings
self.screen_rect = self.screen.get_rect()
self.image = pygame.image.load('imgage/alien.bmp')
self.rect = self.image.get_rect()
self.x = float(self.rect.x)
def update(self):
"""向左或向右移动外星人"""
self.x += (self.ai_settings.alien_speed_factor * self.ai_settings.fleet_direction)
self.rect.x = self.x
def check_edges(self):
"""如果外星人位于屏幕边缘,就返回True"""
screen_rect = self.screen.get_rect()
if self.rect.right >= screen_rect.right:
return True
elif self.rect.left <= screen_rect.left:
return True
def update_aliens(ai_settings, aliens):
"""更新外星人群中所有外星人的位置"""
check_fleet_edges(ai_settings, aliens)
aliens.update()
def check_fleet_edges(ai_settings, aliens):
"""有外星人到达边缘时采取相应的措施"""
for alien in aliens.sprites():
if alien.check_edges():
change_fleet_direction(ai_settings, aliens)
break
def change_fleet_direction(ai_settings, aliens):
"""将整群外星人下移,并改变它们的方向"""
for alien in aliens.sprites():
alien.rect.y += ai_settings.fleet_drop_speed
ai_settings.fleet_direction *= -1
def create_alien(screen,aliens,i,j,ai_settings):
alien = Alien(screen,ai_settings)
screen_rect = screen.get_rect()
alien_width = alien.rect.width
alien.x = alien_width + 2 * alien_width * i
alien.rect.x = alien.x
alien.rect.y = alien.rect.height + 2 * alien.rect.height * j
aliens.add(alien)
def run():
pygame.init()
fleet_direction = 1
bg_color = 230, 230, 230
ai_settings = Settings()
screen = pygame.display.set_mode((1200, 800))
aliens = Group()
for i in range(4):
for j in range(9):
create_alien(screen,aliens,j,i,ai_settings)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
screen.fill(bg_color)
aliens.draw(screen)
update_aliens(ai_settings,aliens)
aliens.update()
pygame.display.flip()
run()
外星人入侵--外星人群整体移动
最新推荐文章于 2022-04-20 22:12:30 发布