import pygame
from pygame.locals import *
from random import randint
from pygame.mixer import music
pygame.mixer.init()

LARGEUR = 610 #largeur de la fenêtre
HAUTEUR = 600 #hauteur de la fenêtre
fenetre = pygame.display.set_mode((LARGEUR, HAUTEUR)) #créer la fenêtre
fond = pygame.sprite.Sprite() #créer un sprite
fond.image = pygame.image.load("terre.jpg").convert() #charger l'image
fond.rect = fond.image.get_rect() #obtenir les coordonnées de l'image
fond.rect.x = 0 #position x
fond.rect.y = 0 #position y
def creer_ananas(pos_x, pos_y): #créer un ananas
    ananas = pygame.sprite.Sprite() #créer un sprite
    pygame.sprite.Sprite.__init__(ananas) #initialiser le sprite
    ananas.image = pygame.image.load("ananas.png").convert_alpha() #charger l'image
    ananas.image = pygame.transform.scale(ananas.image,[200, 100]) #redimensionner l'image
    ananas.rect = ananas.image.get_rect() #obtenir les coordonnées de l'image
    ananas.rect.x = pos_x
    ananas.rect.y = pos_y
    return ananas #retourner l'ananas

def tirer_missiles(pos_x, pos_y): #créer un missile
    missiles = pygame.sprite.Sprite() #créer un sprite
    pygame.sprite.Sprite.__init__(missiles) #initialiser le sprite
    missiles.image = pygame.image.load("missiles.png").convert_alpha() #charger l'image
    missiles.image = pygame.transform.scale(missiles.image,[10, 100]) #redimensionner l'image
    missiles.rect = missiles.image.get_rect() #obtenir les coordonnées de l'image
    missiles.rect.x = pos_x
    missiles.rect.y = pos_y
    return missiles 

missiles = pygame.sprite.Sprite() #créer un sprite
liste_de_missiles = [] #créer une liste
liste_sprites_missiles = pygame.sprite.Group() #créer un groupe

pygame.sprite.LayeredUpdates() #mettre les sprites en ordre
pygame.init() 
clock = pygame.time.Clock() #créer un horloge
running = True #définir la variable running
avion = pygame.sprite.Sprite() 
pygame.sprite.Sprite.__init__(avion) #initialiser le sprite
avion.image = pygame.image.load("avion.png").convert_alpha() #charger l'image
avion.image = pygame.transform.scale(avion.image,[120, 120]) #redimensionner l'image
avion.rect = avion.image.get_rect()
avion.rect.x = 200 #position x
avion.rect.y = 400 #position y
liste_des_sprites = pygame.sprite.LayeredUpdates() #créer un groupe
liste_des_sprites.add(fond) #ajouter le fond
liste_sprites_ananas = pygame.sprite.LayeredUpdates()
liste_des_sprites.add(avion) #ajouter l'avion
liste_d_ananas = [] #créer une liste

gameover = False #définir la variable gameover
intro = int(input("Voulez-vous sauver la Terre ? 1 pour oui, 2 pour non"))
if intro == 1:
    print("ALERTE! La planète Terre est attaquée par une flotte d’avions spatiaux! Vous vous trouvez dans l’engin SU-PER12. Votre mission est d’éliminer le plus d’ennemis possible! Pour ce faire, appuyez sur votre souris pour tirer et manoeuvrez-la en la pour bouger votre SU-PER12! Bonne chance!") #afficher un message

else:
    gameover == True #définir la variable gameover
    print("Dommage, la fin du Monde est proche...")
    avion.remove(liste_des_sprites) #enlever l'avion

police = pygame.font.Font(None, 30) #créer une police
texte= pygame.sprite.Sprite()
texte.image = police.render("ALERTE, PLANETE TERRE EST SOUS ATTAQUE", 1, (10, 10, 10),(255, 90, 20)) #créer un texte
texte.rect = texte.image.get_rect()
texte.rect.centerx = 310 #position x
texte.rect.centery = 20 #position y
liste_des_sprites.add(texte) #ajouter le texte

gameover = False #définir la variable gameover

ananas_speed = 4 #définir la vitesse de l'ananas

delay = 10 #définir le délai

missiles_sound = pygame.mixer.Sound("bruitstirs.wav") #créer un son

music = pygame.mixer.music.load("musique fond.mp3") #charger la musique


while running: #tant que running est vrai

    keys = pygame.key.get_pressed() #obtenir les touches appuyées
    if keys[pygame.K_SPACE] == True: #si la touche espace est appuyée
        liste_des_sprites.remove(texte) #retirer le texte

    liste_des_sprites.draw(fenetre) #dessiner les sprites
    liste_sprites_ananas.draw(fenetre)
    liste_sprites_missiles.draw(fenetre) #dessiner les missiles
    for event in pygame.event.get(): #pour chaque événement
        if event.type == pygame.QUIT: #si l'événement est quitter
            running = False
        if event.type == MOUSEMOTION: #si l'événement est la position de la souris
            avion.rect.x = event.pos[0]
        if event.type == MOUSEBUTTONDOWN: #si l'événement est le clic de la souris
            nouveau_missile = tirer_missiles(avion.rect.centerx, HAUTEUR/2) #créer un nouveau missile
            pygame.mixer.Sound.play(missiles_sound) #jouer le son
            liste_de_missiles.append(nouveau_missile) #ajouter le nouveau missile à la liste
            liste_sprites_missiles.add(nouveau_missile) #ajouter le nouveau missile au groupe

    if gameover == False: #si le jeu n'est pas terminé
        nombre_aleatoire = randint(0, 100) #obtenir un nombre aléatoire
        if nombre_aleatoire == 100: #si le nombre aléatoire est 100
            position_x_aleatoire = randint(0, LARGEUR - 60)
            nouvel_ananas = creer_ananas(position_x_aleatoire, -100) #créer une nouvelle ananas
            liste_d_ananas.append(nouvel_ananas) #l'ajouter à la liste
            liste_sprites_ananas.add(nouvel_ananas) #l'ajouter au groupe
            nouvel_ananas.delay_timer = delay * 60 #définir le délai
        for ananas in liste_d_ananas:
            if ananas.delay_timer > 0: #si le délai est supérieur à 0
                ananas.delay_timer -= 1 #soustraire le délai d'un
            else:
                ananas.rect.y += ananas_speed #ajouter la vitesse à la position y de l'ananas
            if ananas.rect.colliderect(avion): #si l'ananas touche l'avion
                print("COLLISION, L'OBJET A ÉTÉ ÉLIMINÉ, MALHEUREUSEMENT, VOUS AUSSI.")
                police = pygame.font.Font(None, 50) #créer une police
                texte = pygame.sprite.Sprite() #créer un texte
                texte.image = police.render("GAMEOVER", 1, (10, 10, 10),(255, 90, 20))
                texte.rect = texte.image.get_rect() #obtenir les coordonnées de l'image
                texte.rect.centerx = 310
                texte.rect.centery = 200
                liste_des_sprites.add(texte) #ajouter le texte
                liste_d_ananas.remove(ananas) #retirer l'ananas de la liste
                ananas.kill() #supprimer l'ananas
                gameover = True #définir la variable gameover à vrai
            if ananas.rect.y > HAUTEUR: #si l'ananas dépasse la hauteur de la fenêtre
                gameover = True
                police = pygame.font.Font(None, 36)
                texte1 = pygame.sprite.Sprite() #créer un texte
                pygame.sprite.Sprite.__init__(texte1) #initialiser le sprite
                texte1.image = police.render("GAMEOVER", 1, (10,10,10),(255, 90, 20))
                texte1.rect = texte1.image.get_rect()
                texte1.rect.centerx = 310
                texte1.rect.centery = 200
                liste_des_sprites.add(texte1) #ajouter le texte1

                police = pygame.font.Font(None, 36)
                texte22 = pygame.sprite.Sprite() #créer un texte
                pygame.sprite.Sprite.__init__(texte22)
                texte22.image = police.render("L'ennemi est entré dans notre atmosphère!", 1, (10,10,10),(255, 90, 20))
                texte22.rect = texte22.image.get_rect()
                texte22.rect.centerx = 310 
                texte22.rect.centery = 250
                liste_des_sprites.add(texte22) #ajouter le texte22

                police = pygame.font.Font(None, 36)
                texte33 = pygame.sprite.Sprite() #créer un texte
                pygame.sprite.Sprite.__init__(texte33)
                texte33.image = police.render("Réessayez de tuer tout les ennemis!", 1, (10,10,10),(255, 90, 20))
                texte33.rect = texte33.image.get_rect()
                texte33.rect.centerx = 310 
                texte33.rect.centery = 300
                liste_des_sprites.add(texte33) #ajouter le texte33

    for missiles in liste_de_missiles: #pour chaque missile
        missiles.rect.y -= 10 #soustraire 10 à la position y du missile
        if missiles.rect.y <= 0: #si la position y du missile est inférieure ou égale à 0
            liste_de_missiles.remove(missiles) #retirer le missile de la liste
            missiles.kill() #supprimer le missile
        else: 
            for ananas in liste_d_ananas: #pour chaque ananas
                if ananas.rect.colliderect(missiles): #si l'ananas touche le missile
                    liste_d_ananas.remove(ananas) #retirer l'ananas de la liste
                    ananas.kill() #supprimer l'ananas
                    liste_de_missiles.remove(missiles) #retirer le missile de la liste
                    missiles.kill() #supprimer le missile

    pygame.display.flip() #mettre à jour la fenêtre
    fenetre.fill((0,0,0)) #remplir la fenêtre avec la couleur noire
    clock.tick(50) #mettre le nombre de frames par seconde
pygame.quit()
