diff --git a/Alien_Invasion.py b/Alien_Invasion.py index a92dd84..0d9d034 100644 --- a/Alien_Invasion.py +++ b/Alien_Invasion.py @@ -137,9 +137,71 @@ class AlienInvasion: self.sb.prep_level() def _check_events(self): + """响应按键和鼠标事件""" for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() + elif event.type == pygame.KEYDOWN: + self._check_keydown_events(event) + elif event.type == pygame.KEYUP: + self._check_keyup_events(event) + elif event.type == pygame.MOUSEBUTTONDOWN: + mouse_pos = pygame.mouse.get_pos() + self._check_play_button(mouse_pos) + + 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: + # 重置游戏设置 + self.settings.initialize_dynamic_settings() + + # 重置游戏统计信息 + self.stats.reset_stats() + self.stats.game_active = True + self.sb.prep_score() + self.sb.prep_level() + self.sb.prep_ships() + + # 清空余下的外星人和子弹 + self.aliens.empty() + self.bullets.empty() + + elif event.type == pygame.KEYDOWN: + # 创建一群新的外星人并让飞船居中 + self._create_fleet() + self.ship.center_ship() + + # 隐藏鼠标光标 + pygame.mouse.set_visible(False) + + def _check_keydown_events(self, event): + """响应按键""" + if event.key == pygame.K_RIGHT: + self.ship.moving_right = True + elif event.key == pygame.K_LEFT: + elif event.key == pygame.K_LEFT: + self.ship.moving_left = True + elif event.key == pygame.K_q: + sys.exit() + elif event.key == pygame.K_SPACE: + self._fire_bullet() + + elif event.type == pygame.KEYUP: + def _check_keyup_events(self,event): + """响应松开""" + if event.key == pygame.K_RIGHT: + self.ship.moving_right = False + self.ship.moving_right = False + elif event.key == pygame.K_LEFT: + self.ship.moving_left = False + self.ship.moving_left = False + + def _fire_bullet(self): + """创建一颗子弹,并将其加入编组bullets中""" + if len(self.bullets) < self.settings.bullets_allowed: + new_bullet = Bullet(self) + self.bullets.add(new_bullet) elif event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT: