import pygame
import math

# Paramètres du jeu
LARGEUR, HAUTEUR = 1900, 1000
FPS = 60
GRAVITE = 9.81

pygame.init()
fenetre = pygame.display.set_mode((LARGEUR, HAUTEUR))
pygame.display.set_caption("Simulation de trajectoire")
clock = pygame.time.Clock()


projectile_en_vol = True

def calcul_trajectoire(angle, vitesse, gravite, temps):
    """
    Calcule la position (x,y) du projectile à l'instant 'temps'.
    Angle en degrés, vitesse en m/s, gravité en m/s², temps en s.
    Retourne un tuple (x, y).
    """

    # 1. Conversion de l'angle en radians (nécessaire pour cos et sin)
    angle_rad = math.radians(angle)

    # 2. Décomposition de la vitesse initiale en composantes horizontale (v_x) et verticale (v_y)
    v_x = vitesse * math.cos(angle_rad)
    v_y = vitesse * math.sin(angle_rad)

    # 3. Calcul de la position x (mouvement horizontal uniforme)
    x = v_x * temps

    # 4. Calcul de la position y (mouvement vertical uniformément accéléré vers le bas)
    y = v_y * temps - (1/2) * gravite * temps**2

    return x, y

# Boucle principale du jeu
def main():
    running = True
    temps = 0
    angle = 70     # Angle de lancement en degrés
    vitesse = 150   # Vitesse initiale en m/s

    trajectoire = []  # Liste des points calculés
    projectile_en_vol = True
    
    # Configuration de la police pour afficher les informations
    font = pygame.font.SysFont("Arial", 18)
    
    while running:
        clock.tick(FPS)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False

        # Calcule la trajectoire point par point toutes les 0.1 secondes
        if projectile_en_vol:
            x, y = calcul_trajectoire(angle, vitesse, GRAVITE, temps)
            
            # Conversion coordonnées réelles vers coordonnées pygame (inverse y)
            if y >= 0:
                pygame_x = int(x)
                pygame_y = int(HAUTEUR - y)
                trajectoire.append((pygame_x, pygame_y))
                temps += 0.05
            else:
                projectile_en_vol = False
        # Affichage
        fenetre.fill((255, 255, 255))  # fond blanc

        # Dessiner la trajectoire
        for point in trajectoire:
            pygame.draw.circle(fenetre, (255, 0, 0), point, 3)

        # Afficher vitesse, altitude, temps en haut à droite
        infos = [
            f"Vitesse initiale : {vitesse:.1f} m/s",
            f"Altitude : {max(0, y):.1f} m",
            f"Temps écoulé : {temps:.1f} s"
        ]

        # Affichage des infos avec un léger espacement vertical
        for i, texte in enumerate(infos):
            surface_texte = font.render(texte, True, (0, 0, 0))
            largeur_texte, hauteur_texte = surface_texte.get_size()
            fenetre.blit(surface_texte, (LARGEUR - largeur_texte - 10, 10 + i * (hauteur_texte + 5)))

        pygame.display.flip()

    pygame.quit()

if __name__ == "__main__":
    main()
