From 5dfeeb6472da99eb9077f280ec47ab7b8c4b0f36 Mon Sep 17 00:00:00 2001 From: 206530229 <1822217136@qq.com> Date: Wed, 23 Jun 2021 16:24:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20'Alien=5FInvasion.py'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Alien_Invasion.py | 60 ++++++++++++++++------------------------------- 1 file changed, 20 insertions(+), 40 deletions(-) diff --git a/Alien_Invasion.py b/Alien_Invasion.py index 9568264..657700e 100644 --- a/Alien_Invasion.py +++ b/Alien_Invasion.py @@ -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: