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

这一节,我们来检测外星飞船与我方飞船的碰撞,当碰撞后,重置外星人,然后我们给己方飞船添加命数,命数用完,屏幕静止

我们先给飞船三条命,数据存储在settings.py中
settings.py

class Settings():
    ...........

    self.fleet_dir = 1
    self.ship_limit = 3

然后,新建一个用来统计信息的类
g_start.py

#跟踪游戏的统计信息
class GameStart():

    #初始化
    def __init__(self, my_setting):

        self.my_setting = my_setting
        self.reset_start()

        self.game_active = True
    #当命数变化时,更新数据  
    def reset_start(self):

        self.ships_left = self.my_setting.ship_limit

接下里,检测外星飞船与我方飞船的碰撞
g_fun.py

def ship_hit(my_setting, start, screen, bullets, ship, aliens):
    #当发生碰撞,我方飞船数量减一
    start.ships_left -= 1
    #清空外星飞船和子弹
    aliens.empty()
    bullets.empty()
def update_aliens(my_setting, start, screen, bullets, ship, aliens):
    ...............
    #检测外星飞船与我方飞船的碰撞
    if pygame.sprite.spritecollideany(ship, aliens):
        ship_hit(my_setting, start, screen, bullets, ship, aliens)

主程序需要做些改动
main.py(只写出添加部分和改动部分)

def run_game():
    .........
    pygame.display.set_caption('外星人入侵')
    #创建存储统计信息的类
    start = GameStart(my_setting)
...............................................
while  True:
    .............................
    ck.update_aliens(my_setting, start, screen, bullets, ship, aliens)

但是,此时运行程序,游戏并不会结束,我方飞船的命数只会变为负数
我们添加些代码,使飞船用完后游戏结束
g_start.py

class GameStart():
    def __init__(self, my_setting):
    ...................................

    #游戏刚启动时处于活跃状态
    self.game_active = True
    def reset_start(self):
    ..............

然后更新ship_hit(),当飞船用完,将game_active设置为False

def ship_hit(my_setting, start, screen, bullets, ship, aliens):
    if start.ships_left > 0:
        start.ships_left -= 1
        aliens.empty()
        bullets.empty() 
    else:
        start.game_active = False

主程序也需要改
““““


...........................
while True:

        ck.check_events(my_setting, screen, ship, bullets)
        if start.game_active:

            ship.update()
            ck.update_bullets(my_setting, screen, ship, aliens, bullets)
            ck.update_aliens(my_setting, start, screen, bullets, ship, aliens)

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

此时,运行游戏,当飞船用完时,停止不动。。。。。
这里写图片描述
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值