更新 'Alien_Invasion.py'

This commit is contained in:
206530229 2021-06-23 16:24:32 +08:00
parent 22211a4a55
commit 5dfeeb6472
1 changed files with 20 additions and 40 deletions

View File

@ -11,18 +11,16 @@ from ship import Ship
from bullet import Bullet
from alien import Alien
class AlienInvasion:
"""管理游戏资源和行为的类"""
class AlienInvasion: # 管理游戏资源和行为的类
def __init__(self):
"""初始化游戏并创建游戏资源"""
def __init__(self): # 初始化游戏并创建游戏资源
pygame.init()
self.settings = Settings()
self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
self.settings.screen_width = self.screen.get_rect().width
self.settings.screen_height = self.screen.get_rect().height
pygame.display.set_caption("Alien Invasion")
pygame.display.set_caption("外星人入侵")
# 创建一个用于存储游戏统计信息的实例
# 并创建记分牌
@ -45,8 +43,7 @@ class AlienInvasion:
pygame.mixer.music.load('music/music1.mp3')
pygame.mixer.music.play(-1) # 重复循环
def _create_fleet(self):
"""创建外星人群"""
def _create_fleet(self): #创建外星人群
# 创建一个外星人并计算一行可容纳多少外星人
# 外星人的间距为外星人的宽度
alien = Alien(self)
@ -65,8 +62,7 @@ class AlienInvasion:
for alien_number in range(number_aliens_x):
self._create_alien(alien_number, row_number)
def _create_alien(self, alien_number, row_number):
"""创建一个外星人并将其放在当前行"""
def _create_alien(self, alien_number, row_number): # 创建一个外星人并将其放在当前行
alien = Alien(self)
alien_width,alien_height = alien.rect.size
alien.x = alien_width + 2 * alien_width * alien_number
@ -74,8 +70,7 @@ 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()
@ -86,11 +81,8 @@ class AlienInvasion:
self._update_screen()
def _update_aliens(self):
"""
检查是否有外星人位于屏幕边缘
并更新整群外星人的位置
"""
def _update_aliens(self): # 检查是否有外星人位于屏幕边缘并更新整群外星人的位置
self._check_fleet_edges()
self.aliens.update()
@ -101,8 +93,7 @@ class AlienInvasion:
# 检查是否有外星人到达了屏幕底端
self._check_aliens_bottom()
def _update_bullets(self):
"""更新子弹的位置并删除消失的子弹"""
def _update_bullets(self): # 更新子弹的位置并删除消失的子弹
#更新子弹的位置
self.bullets.update()
@ -113,8 +104,7 @@ class AlienInvasion:
self._check_bullet_alien_collisions()
def _check_bullet_alien_collisions(self):
"""响应子弹和外星人碰撞"""
def _check_bullet_alien_collisions(self): # 响应子弹和外星人碰撞
# 删除发生碰撞的子弹和外星人
collisions = pygame.sprite.groupcollide(
@ -134,8 +124,7 @@ class AlienInvasion:
self.stats.level += 1
self.sb.prep_level()
def _check_events(self):
"""响应按键和鼠标事件"""
def _check_events(self): #响应按键和鼠标事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
@ -147,8 +136,7 @@ class AlienInvasion:
mouse_pos = pygame.mouse.get_pos()
self._check_play_button(mouse_pos)
def _check_play_button(self,mouse_pos):
"""在玩家单机Play按钮时开始新游戏"""
def _check_play_button(self,mouse_pos): #在玩家单机Play按钮时开始新游戏
button_clicked = self.play_button.rect.collidepoint(mouse_pos)
if button_clicked and not self.stats.game_active:
# 重置游戏设置
@ -172,8 +160,7 @@ class AlienInvasion:
# 隐藏鼠标光标
pygame.mouse.set_visible(False)
def _check_keydown_events(self, event):
"""响应按键"""
def _check_keydown_events(self, event): # 响应按键
if event.key == pygame.K_RIGHT:
self.ship.moving_right = True
elif event.key == pygame.K_LEFT:
@ -183,21 +170,18 @@ class AlienInvasion:
elif event.key == pygame.K_SPACE:
self._fire_bullet()
def _check_keyup_events(self,event):
"""响应松开"""
def _check_keyup_events(self,event): # 响应松开
if event.key == pygame.K_RIGHT:
self.ship.moving_right = False
elif event.key == pygame.K_LEFT:
self.ship.moving_left = False
def _fire_bullet(self):
"""创建一颗子弹并将其加入编组bullets中"""
def _fire_bullet(self): # 创建一颗子弹并将其加入编组bullets中
if len(self.bullets) < self.settings.bullets_allowed:
new_bullet = Bullet(self)
self.bullets.add(new_bullet)
def _update_screen(self):
"""更新屏幕上的图像,并切换到新屏幕"""
def _update_screen(self): # 更新屏幕上的图像,并切换到新屏幕
self.screen.fill(self.settings.bg_color)
self.ship.blitme()
for bullet in self.bullets.sprites():
@ -213,21 +197,18 @@ class AlienInvasion:
pygame.display.flip()
def _check_fleet_edges(self):
"""有外星人到达边缘时采取相应的措施"""
def _check_fleet_edges(self): # 有外星人到达边缘时采取相应的措施
for alien in self.aliens.sprites():
if alien.check_edges():
self._change_fleet_direction()
break
def _change_fleet_direction(self):
"""将整个外星人下移,并改变它们的方向"""
def _change_fleet_direction(self): #将整个外星人下移,并改变它们的方向
for alien in self.aliens.sprites():
alien.rect.y += self.settings.fleet_drop_speed
self.settings.fleet_direction *= -1
def _ship_hit(self):
"""响应飞船被外星人撞到"""
def _ship_hit(self): #响应飞船被外星人撞到
if self.stats.ships_left > 0:
# 将ships_left减一并更新记分牌
self.stats.ships_left -= 1
@ -247,8 +228,7 @@ class AlienInvasion:
self.stats.game_active = False
pygame.mouse.set_visible(True)
def _check_aliens_bottom(self):
"""检查是否有外星人到达了屏幕底端"""
def _check_aliens_bottom(self): #检查是否有外星人到达了屏幕底端
screen_rect = self.screen.get_rect()
for alien in self.aliens.sprites():
if alien.rect.bottom >= screen_rect.bottom: