import pygame

# Paramètres initiaux
LARGEUR, HAUTEUR = 600, 600
FPS = 60

# Paramètres physiques
GRAVITE = 1.62  # Change cette valeur : 9.81 (Terre), 1.62 (Lune), 3.72 (Mars)
HAUTEUR_INITIALE = 500  # mètres

pygame.init()
fenetre = pygame.display.set_mode((LARGEUR, HAUTEUR))
pygame.display.set_caption("Simulation de la chute libre")
clock = pygame.time.Clock()
font = pygame.font.SysFont("Arial", 18)

def calcul_chute(gravite, hauteur_initiale, temps):
    # Formules :
    # vitesse = g * t
    # altitude = h0 - (1/2) * g * t²
    vitesse = gravite * temps
    altitude = hauteur_initiale - 0.5 * gravite * temps**2

    return altitude, vitesse


def main():
    running = True
    temps = 0
    objet_en_chute = True

    # Position graphique initiale de l'objet
    x_objet = LARGEUR // 2
    rayon_objet = 15

    while running:
        clock.tick(FPS)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False

        if objet_en_chute:
            altitude, vitesse = calcul_chute(GRAVITE, HAUTEUR_INITIALE, temps)

            # Si l'objet touche le sol, on arrête la chute
            if altitude <= 0:
                altitude = 0
                objet_en_chute = False
            else:
                temps += 1 / FPS

        # Conversion mètres vers pixels pour afficher à l'écran
        pixels_par_metre = HAUTEUR / (HAUTEUR_INITIALE + 50)
        y_objet = HAUTEUR - int(altitude * pixels_par_metre) - rayon_objet

        # Affichage graphique
        fenetre.fill((255, 255, 255))  # fond blanc

        # Sol
        pygame.draw.rect(fenetre, (100, 200, 100), (0, HAUTEUR - 10, LARGEUR, 10))

        # Objet
        pygame.draw.circle(fenetre, (255, 0, 0), (x_objet, y_objet), rayon_objet)

        # Affichage des infos en haut à droite
        infos = [
            f"Altitude : {altitude:.2f} m",
            f"Vitesse : {vitesse:.2f} m/s",
            f"Gravité : {GRAVITE:.2f} m/s²"
        ]

        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()
