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()
         # Создание нового флота и размещение корабля в центре.
         self._create_fleet()
         self.ship.center_ship()
         # Указатель мыши скрывается.
         pygame.mouse.set_visible(False)
         # Запускаем музыку сражения
         fighting_music = Sounds('sounds/fighting.mp3')
         fighting_music.playing_music()
    def __init__(self):
        """Инициализирует игру и создает игровые ресурсы."""
        self.settings = Settings()
        # Функция pri_init должна вызываться до pygame.init
        pygame.mixer.pre_init(44100, -16, 1, 512)
        pygame.init()
        # Инициируем методы трансляции звуков в игре
        # pygame.mixer.init()
        self.screen = pygame.display.set_mode(
            (self.settings.screen_width, self.settings.screen_height))
        pygame.display.set_caption("Alien Invasion")
        #pygame.display.set_icon(pygame.image.load("app.bmp"))

        # Загрузим фоновое изображение
        self.bg = pygame.image.load('images/StarFon1280x905.jpg')
        # Масштабируем изображение по величине игровой поверхности
        self.bg = pygame.transform.scale(
            self.bg, (self.settings.screen_width, self.settings.screen_height))
        # Задаём что левый верхний угол изображения должен совпадать с углом экрана игры
        self.bg_rect = self.bg.get_rect(topleft=(0, 0))
        self.volume = 1.0
        #Загружаем музыку и звуки
        bg_music = Sounds('sounds/alarm.mp3')
        bg_music.playing_music()
        # Созданим несколько звёзд, которые случайным образом будут располагаться на небе.
        self.star_image = 'images/Star40x40.png'
        self._create_Stars(self.star_image)
        # Создаём группу для отрисовки взрывов
        self.explosions = pygame.sprite.Group()
        # Создаём экземпляр класса Animation.
        self.explosion = Animation((100, 100), 'images/explosions/explosion',
                                   30)
        # Создаём группу спрайтов для отрисовки снарядов, это своего рода список с расширенной функциональностью
        self.bullets = pygame.sprite.Group()
        # Создаём группу пришельцев. Их отображение будет реализовано методами группы Pygame
        self.aliens = pygame.sprite.Group()
        # Создание экземпляра для хранения игровой статистики и панели результатов
        self.stats = GameStats(self)
        self.sb = Scoreboard(self)
        # Создаём объект ship, передав конструктору класса указатель на экземпляр класса AlienInvasion
        self.ship = Ship(self)
        self._create_fleet()
        # Создаём объект времени в игре
        self.clock = pygame.time.Clock()
        # Создание кнопки Play.
        self.play_button = Button(self, "Play")
 def _ship_hit(self):
     """Обрабатывает столкновение корабля с пришельцем."""
     if self.stats.ships_left > 0:
         # Уменьшение ships_left.
         self.stats.ships_left -= 1
         self.sb.prep_ships()
         # Пауза.
         sleep(0.5)
     else:
         self.stats.game_active = False
         # Делаем мышь снова активной
         pygame.mouse.set_visible(True)
         # Загружаем финальную музыку
         game_over_music = Sounds('sounds/badinerie.mp3')
         game_over_music.playing_music()
     # Очистка списков пришельцев и снарядов.
     self.aliens.empty()
     self.bullets.empty()
     # Создание нового флота и размещение корабля в центре.
     self._create_fleet()
     self.ship.center_ship()
     # Пауза.
     sleep(0.5)