外星人入侵--外星人群整体移动


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()


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值