这一节,我们来检测外星飞船与我方飞船的碰撞,当碰撞后,重置外星人,然后我们给己方飞船添加命数,命数用完,屏幕静止
我们先给飞船三条命,数据存储在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)
..........................
此时,运行游戏,当飞船用完时,停止不动。。。。。