pygame入门小游戏(外星人入侵(7) )

我们来移动外星飞船,思想是飞船左右移动,碰到屏幕边缘后,然后会向下移动

在alien.py中添加方法update()

def update(self):
        #向右移动外星飞船
        self.x += 1
        self.rect.x = self.x

然后在主循环中更新外星人的位置
ck.update_aliens(aliens)
在g_fun.py末端添加update_aliens()

def update_aliens(aliens):
    aliens.update() 

运行程序,发现飞船向右移动,直至消失

下面我们让飞船碰到屏幕边缘后向下移动一段距离
alien.py

def check_edge(self):
        screen_rect = self.screen.get_rect()
        if self.rect.right >= screen_rect.right:
            return True
        elif self.rect.left <= 0:
            return True

    def update(self):
        #向右移动外星飞船
        self.x += (1 * self.my_setting.fleet_dir)
        self.rect.x = self.x

别忘记在setting.py中添加self.fleet_dir = 1

g_fun.py

def check_fleet_edge(my_setting, aliens):
    for alien in aliens.sprites():
        if alien.check_edge():
            change_fleet_dir(my_setting, aliens)
            break
def change_fleet_dir(my_setting, aliens):
    for alien in aliens.sprites():
        alien.rect.y += 10
    my_setting.fleet_dir *= -1
def update_aliens(my_setting, aliens):
    check_fleet_edge(my_setting, aliens)

    aliens.update() 

运行程序,看到外星飞船左右移动,碰到边缘后会向下移动
pygame入门小游戏(外星人入侵(7) )_第1张图片
pygame入门小游戏(外星人入侵(7) )_第2张图片

接下来,检测外星飞船与子弹的碰撞
修改update_bullets()函数如下

def update_bullets(aliens, bullets):

    bullets.update()
    #删除消失的子弹
    for bullet in bullets.copy():
        if bullet.rect.bottom <= 0:
            bullets.remove(bullet)
    collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)

sprite.groupcollide()来检测两个编组成员的碰撞,若两个成员碰撞,就删除他们,(若把第一个True改为False,子弹不会被删除,会继续击落下一个飞船)

对了,此时,主程序中的update_bulleta()还需要传递实参aliens

ck.update_bullets(aliens, bullets)

运行程序,结果如下
pygame入门小游戏(外星人入侵(7) )_第3张图片

那么,当我们把外星飞船击毁后,我们需要生成新的外星飞船,
g_fun.py

def update_bullets(my_setting, screen, ship, aliens, bullets):

.......................................
    collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)
    if len(aliens) == 0:
        bullets.empty()
        alien_fleet(my_setting, screen, aliens, ship)

main.py中

ck.update_bullets(my_setting, screen, ship, aliens, bullets)

运行程序,会发现当外星飞船被击落后,会出现新的一批

为了使程序运行流畅,我们重构下update_bullets(),把处理外星人碰撞和处理子弹的程序再创建一个新的函数,

这是目前所有代码集合链接:链接:http://pan.baidu.com/s/1nuO6lTJ 密码:srjj

你可能感兴趣的:(pygame)