Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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()
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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