更新 'Alien_Invasion.py'

This commit is contained in:
206530225 2021-06-23 14:26:50 +08:00
parent 15055a03ce
commit f59929ef91
1 changed files with 56 additions and 1 deletions

View File

@ -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: