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

来源:互联网 发布:淘宝店铺标志尺寸 编辑:程序博客网 时间:2024/05/02 02:28

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

在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)            breakdef change_fleet_dir(my_setting, aliens):    for alien in aliens.sprites():        alien.rect.y += 10    my_setting.fleet_dir *= -1def 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

阅读全文
0 0
原创粉丝点击