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()