def partie_perdue(hauteur_lave: int, générateur, liste_de_sprites: pygame.sprite.Group) -> None: """Vérifie si le joueur touche la lave, si oui, afficher qu'il a perdu puis le faire retourner au menu :param hauteur_lave: (int) la hauteur de la lave depuis le haut de la fenêtre de jeu :param générateur: le générateur de niveaux, l'accès est donné pour pouvoir afficher les platformes :param liste_de_sprites: une liste qui contient le joueur, permet d'afficher le joueur """ global niveau # Si le joueur touche la lave # Remet le niveau actif à 0 niveau = 0 # Dessiner tout le niveau et afficher qu'il a perdu générateur.draw() player.handle_keys() liste_de_sprites.update() liste_de_sprites.draw(screen) étiquette('Vous avez perdu!', 720, 400, 60) org_screen.blit(screen, (0, 0)) pygame.display.flip() sleep(1) # Faire attendre le joueur 3 secondes avant que le jeu ne le ramène au menu for i in range(3): screen.fill((0, 0, 0)) étiquette('Vous avez perdu!'.format(3 - i), 720, 400, 60) étiquette('Retour au menu dans {} secondes'.format(3 - i), 600, 500, 60) org_screen.blit(screen, (0, 0)) pygame.display.flip() sleep(1) # Retoune le joueur au menu principal menu_général()
def draw(screen: pygame.Surface, background: pygame.Surface, framerate: int, all_sprites: pygame.sprite.Group, clock: pygame.time.Clock, grid: Grid, current_time: int, grid_visible: bool) -> None: screen.blit(background, [0, 0]) all_sprites.update() if grid_visible: grid.draw_grid(screen, current_time) all_sprites.draw(screen) pygame.display.flip() clock.tick(framerate)
def display_game(sprites: pygame.sprite.Group, live_blocks: Shape, solid_blocks: list): sprites.empty() for i in live_blocks: sprites.add(i) for i in solid_blocks: sprites.add(i) sprites.update() screen.blit(background, (0, 0)) sprites.draw(screen) pygame.display.flip()
def update_aliens(ai_settings: Settings, stats: GameStats, screen: pygame.Surface, aliens: pygame.sprite.Group, ship: Ship, bullets: pygame.sprite.Group, sb: ScoreBoard) -> NoReturn: """更新外星人群中所有外星人的位置""" check_fleet_edges(ai_settings, aliens) aliens.update() # 检测外星人和飞船之间的碰撞 if pygame.sprite.spritecollide(ship, aliens, False): ship_hit(ai_settings, stats, screen, sb, ship, aliens, bullets) # 检查是否有外星人到达了屏幕底端 check_aliens_bottom(ai_settings, stats, screen, ship, aliens, bullets, sb)
def update_bullets(ai_settings: Settings, stats: GameStats, screen: pygame.Surface, sb: ScoreBoard, ship: Ship, aliens: pygame.sprite.Group, bullets: pygame.sprite.Group) -> NoReturn: """更新子弹的位置,并删除已消失的子弹""" # 更新子弹的位置 bullets.update() # 删除已消失的子弹 for bullet in bullets.copy(): if bullet.rect.bottom <= 0: bullets.remove(bullet) check_bullet_alien_collisions(ai_settings, stats, sb, aliens, bullets, screen, ship)
def find_angle(missiles: pygame.sprite.Group, player): missiles.update() for missile in missiles: lista = [] for num in range(2): vec = player.rect.center[num] - missile.rect.center[num] lista.append(vec) vector = pygame.math.Vector2(lista[0], lista[1]) clockwise = pygame.math.Vector2.angle_to(missile.direction, vector) if clockwise < 0: clockwise = 360 + clockwise anticlockwise = abs(360 - clockwise) if clockwise < anticlockwise: if clockwise > 10 or clockwise < -10: missile.angle_speed = 5 else: missile.angle_speed = 0 else: if anticlockwise > 10 or anticlockwise < -10: missile.angle_speed = -5 else: missile.angle_speed = 0