更新 'alien_invasion.py'

This commit is contained in:
206530228 2021-06-24 08:40:12 +08:00
parent 8d4cf98c50
commit d6d1badabb
1 changed files with 24 additions and 1 deletions

View File

@ -5,6 +5,7 @@ import pygame
from settings import Settings from settings import Settings
from game_stats import GameStats from game_stats import GameStats
from scoreboard import Scoreboard
from button import Button from button import Button
from ship import Ship from ship import Ship
from bullet import Bullet from bullet import Bullet
@ -24,7 +25,9 @@ class AlienInvasion:
pygame.display.set_caption("Alien Invasion") pygame.display.set_caption("Alien Invasion")
# 创建一个用于存储游戏统计信息的实例 # 创建一个用于存储游戏统计信息的实例
# 并创建记分牌
self.stats = GameStats(self) self.stats = GameStats(self)
self.sb = Scoreboard(self)
self.ship = Ship(self) self.ship = Ship(self)
self.bullets = pygame.sprite.Group() self.bullets = pygame.sprite.Group()
@ -112,11 +115,21 @@ class AlienInvasion:
collisions = pygame.sprite.groupcollide( collisions = pygame.sprite.groupcollide(
self.bullets, self.aliens, True, True) 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()
self.sb.check_high_score()
if not self.aliens: if not self.aliens:
# 删除现有的子弹并新建一群外星人 # 删除现有的子弹并新建一群外星人
self.bullets.empty() self.bullets.empty()
self._create_fleet() self._create_fleet()
self.settings.increase_speed()
# 提高等级
self.stats.level += 1
self.sb.prep_level()
def _check_events(self): def _check_events(self):
"""响应按键和鼠标事件""" """响应按键和鼠标事件"""
@ -135,9 +148,15 @@ class AlienInvasion:
"""在玩家单机Play按钮时开始新游戏""" """在玩家单机Play按钮时开始新游戏"""
button_clicked = self.play_button.rect.collidepoint(mouse_pos) button_clicked = self.play_button.rect.collidepoint(mouse_pos)
if button_clicked and not self.stats.game_active: if button_clicked and not self.stats.game_active:
# 重置游戏设置
self.settings.initialize_dynamic_settings()
# 重置游戏统计信息 # 重置游戏统计信息
self.stats.reset_stats() self.stats.reset_stats()
self.stats.game_active = True self.stats.game_active = True
self.sb.prep_score()
self.sb.prep_level()
self.sb.prep_ships()
# 清空余下的外星人和子弹 # 清空余下的外星人和子弹
self.aliens.empty() self.aliens.empty()
@ -182,6 +201,9 @@ class AlienInvasion:
bullet.draw_bullet() bullet.draw_bullet()
self.aliens.draw(self.screen) self.aliens.draw(self.screen)
# 显示得分
self.sb.show_score()
# 如果游戏处于非活动状态就绘制Play按钮 # 如果游戏处于非活动状态就绘制Play按钮
if not self.stats.game_active: if not self.stats.game_active:
self.play_button.draw_button() self.play_button.draw_button()
@ -204,8 +226,9 @@ class AlienInvasion:
def _ship_hit(self): def _ship_hit(self):
"""响应飞船被外星人撞到""" """响应飞船被外星人撞到"""
if self.stats.ships_left > 0: if self.stats.ships_left > 0:
# 将ships_left减一 # 将ships_left减一并更新记分牌
self.stats.ships_left -= 1 self.stats.ships_left -= 1
self.sb.prep_ships()
# 清空余下的外星人和子弹 # 清空余下的外星人和子弹
self.aliens.empty() self.aliens.empty()