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)