13.5.4 提高子弹的速度
如果现在尝试在游戏中射杀外星人,可能会发现子弹的速度不太合适(有点快或有
点慢),游戏感不好。当前,可通过修改设置让这款游戏更有意思、更好玩。
要修改子弹的速度,可调整settings.py中bullet_speed 的值。在我的系统中,
我把bullet_speed 的值调整到1.5,让子弹的速度快些:
settings.py
# 子弹设置
self.bullet_speed = 1.5
self.bullet_width = 3
--snip--
这项设置的最佳值取决于你使用的系统的速度,请找出适合自己的值。你也可以调
整其他设置。
13.5.5 重构_update_bullets()
下面来重构_update_bullets() ,使其不再执行那么多任务。为此,将处理子弹
和外星人碰撞的代码移到一个独立的方法中:
alien_invasion.py
def _update_bullets(self):
--snip--
# 删除消失的子弹。
for bullet in self.bullets.copy():
if bullet.rect.bottom <= 0:
self.bullets.remove(bullet)
self._check_bullet_alien_collisions()
def _check_bullet_alien_collisions(self):
"""响应子弹和外星人碰撞。"""
# 删除发生碰撞的子弹和外星人。
collisions = pygame.sprite.groupcollide(
self.bullets, self.aliens, True, True)
if not self.aliens:
# 删除现有的所有子弹,并创建一群新的外星人。
self.bullets.empty()
self._create_fleet()
我们创建了一个新方法_check_bullet_alien_collisions() ,用于检测子弹
和外星人之间的碰撞,并在整群外星人被消灭干净时采取相应的措施。这能避免
_update_bullets() 过长,简化了后续开发工作。
动手试一试
练习13-5:侧面射击2 完成练习12-6之后,我们给游戏《外星人入侵》添加
了很多功能。在本练习中,请尝试让练习12-6中飞船的功能与当前《外星人入
侵》中的类似。在屏幕右侧添加一群外星人(或让外星人的位置随机),并让
其向飞船移动。另外,编写代码让被子弹击中的外星人消失。
13.6 结束游戏
如果玩家根本不会输,游戏还有什么趣味和挑战性可言?如果玩家没能在足够短的
时间内将整群外星人消灭干净,导致有外星人撞到了飞船或抵达屏幕底端,飞船将
被摧毁。与此同时,限制玩家可使用的飞船数,在玩家用光所有的飞船后,游戏将
结束