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

运行程序,看到外星飞船左右移动,碰到边缘后会向下移动
这里写图片描述
这里写图片描述

接下来,检测外星飞船与子弹的碰撞
修改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)

运行程序,结果如下
这里写图片描述

那么,当我们把外星飞船击毁后,我们需要生成新的外星飞船,
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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值