更新 'Alien_Invasion.py'
This commit is contained in:
parent
15055a03ce
commit
f59929ef91
|
@ -74,13 +74,68 @@ class AlienInvasion:
|
|||
alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
|
||||
self.aliens.add(alien)
|
||||
|
||||
def run_game(self): # 开始游戏主循环
|
||||
def run_game(self):
|
||||
"""开始游戏的主循环"""
|
||||
while True:
|
||||
self._check_events()
|
||||
self.ship.update()
|
||||
|
||||
if self.stats.game_active:
|
||||
self.ship.update()
|
||||
self._update_bullets()
|
||||
self._update_aliens()
|
||||
|
||||
self._update_screen()
|
||||
# 监视键盘和鼠标事件
|
||||
|
||||
def _update_aliens(self):
|
||||
"""
|
||||
检查是否有外星人位于屏幕边缘
|
||||
并更新整群外星人的位置
|
||||
"""
|
||||
self._check_fleet_edges()
|
||||
self.aliens.update()
|
||||
|
||||
# 检测外星人和飞船之间的碰撞
|
||||
if pygame.sprite.spritecollideany(self.ship, self.aliens):
|
||||
self._ship_hit()
|
||||
|
||||
# 检查是否有外星人到达了屏幕底端
|
||||
self._check_aliens_bottom()
|
||||
|
||||
def _update_bullets(self):
|
||||
"""更新子弹的位置并删除消失的子弹"""
|
||||
#更新子弹的位置
|
||||
self.bullets.update()
|
||||
|
||||
# 删除消失的子弹
|
||||
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 collisions:
|
||||
for aliens in collisions.values():
|
||||
self.stats.score += self.settings.alien_points * len(aliens)
|
||||
self.sb.prep_score()
|
||||
|
||||
if not self.aliens:
|
||||
# 删除现有的子弹并新建一群外星人
|
||||
self.bullets.empty()
|
||||
self._create_fleet()
|
||||
self.settings.increase_speed()
|
||||
|
||||
# 提高等级
|
||||
self.stats.level += 1
|
||||
self.sb.prep_level()
|
||||
|
||||
def _check_events(self):
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
|
|
Loading…
Reference in New Issue