Compare commits

..

2 Commits

Author SHA1 Message Date
04c815c1f3 pos avion 2025-01-05 16:30:28 +01:00
4a2997b710 sound und kommentare 2025-01-05 16:19:36 +01:00
4 changed files with 128 additions and 191 deletions

Binary file not shown.

319
main.py
View File

@ -1,238 +1,175 @@
import pygame
import pygame
from pygame.locals import *
from random import randint
from pygame.mixer import music #musique
pygame.mixer.init() #initialiser la musique
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 pour le fond de la terre
fond.image = pygame.image.load("terre.jpg").convert() #charger l'image de la terre
fond.rect = fond.image.get_rect() #obtenir les coordonnées de l'image de la terre
fond.rect.x = 0 #position x de l'image "terre.jpg"
fond.rect.y = 0 #position y de l'image "terre.jpg"
def creer_ananas(pos_x, pos_y): #créer un ananas (adversaire)
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 de l'ananas
ananas.image = pygame.transform.scale(ananas.image,[200, 100]) #redimensionner l'image de l'ananas
ananas.rect = ananas.image.get_rect() #obtenir les coordonnées de l'image de l'ananas
ananas.rect.x = pos_x # position x de l'image de l'ananas
ananas.rect.y = pos_y # position y de l'image de l'ananas
return ananas #retourner l'ananas
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 du missile
missiles.image = pygame.transform.scale(missiles.image,[10, 100]) #redimensionner l'image du missile
missiles.rect = missiles.image.get_rect() #obtenir les coordonnées de l'image du missile
missiles.rect.x = pos_x # position x de l'image du missile
missiles.rect.y = pos_y # position y de l'image du missile
return missiles #retourner le missile
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
liste_sprites_ananas = pygame.sprite.LayeredUpdates() #créer une liste pour les ananas
liste_de_missiles = [] #créer une liste vide pour stocker les missiles
liste_sprites_missiles = pygame.sprite.Group() #créer un groupe pour stocker les 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.init() #initialiser pygame
clock = pygame.time.Clock() #créer un horloge pour contrôler la vitesse de rafraîchissement de la fenêtre
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
avion = pygame.sprite.Sprite() #créer un sprite pour l'avion
pygame.sprite.Sprite.__init__(avion) #initialiser le sprite de l'avion
avion.image = pygame.image.load("avion.png").convert_alpha() #charger l'image de l'avion
avion.image = pygame.transform.scale(avion.image,[120, 120]) #redimensionner l'image de l'avion
avion.rect = avion.image.get_rect() #obtenir les coordonnées de l'image de l'avion
avion.rect.x = 200 #position x de l'image de l'avion
avion.rect.y = 450 #position y de l'image de l'avion
liste_des_sprites = pygame.sprite.LayeredUpdates() #créer un groupe pour stocker les sprites
liste_des_sprites.add(fond) #ajouter le fond à la liste des sprites
liste_des_sprites.add(avion) #ajouter l'avion à la liste des sprites
liste_d_ananas = [] #créer une liste vide pour stocker les ananas
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 davions spatiaux! Vous vous trouvez dans lengin SU-PER12. Votre mission est déliminer le plus dennemis 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
intro = int(input("Voulez-vous sauver la Terre ? 1 pour oui, 2 pour non: ")) #demander à l'utilisateur s'il veut sauver la Terre
sauver = (intro == 1)
ananas_speed = 4 #définir la vitesse de l'ananas
if sauver == True: #si l'utilisateur veut sauver la Terre
print("ALERTE! La planète Terre est attaquée par une flotte davions spatiaux! Vous vous trouvez dans lengin SU-PER12. Votre mission est déliminer le plus dennemis possible! En éliminant les adversaires, vous gagnez 10 points. La planète sera sauvée, lorsque vous aurez atteind les 100 points! Pour ce faire, appuyez sur votre souris pour tirer et manoeuvrez-la en la pour bouger votre SU-PER12. Bonne chance!") #afficher un message
music = pygame.mixer.music.load("musique fond.mp3")
#charger la musique de fond correspondant à sauver == True
pygame.mixer.music.play(-1) #jouer la musique de fond en boucle
pygame.mixer.music.set_volume(0.3) # changer le volume de la musique de fond
delay = 10 #définir le délai
else: #si l'utilisateur ne veut pas sauver la Terre
gameover == True #définir la variable gameover
print("Dommage, la fin du Monde est proche...")
avion.kill() # enlever l'avion de la liste des sprites (et donc de la fenetre)
liste_sprites_missiles.empty() #enlever tout les missiles du groupe
music = pygame.mixer.music.load("invasion musique.mp3") #charger la musique de fond correspondant à sauver == False
pygame.mixer.music.play(1) #jouer la musique de fond qu'une seule fois
missiles_sound = pygame.mixer.Sound("bruitstirs.wav") #créer un son
police = pygame.font.Font(None, 30) #créer une police
texte= pygame.sprite.Sprite() #créer un sprite
texte.image = police.render("ALERTE, PLANETE TERRE EST SOUS ATTAQUE", 1, (10, 10, 10),(255, 90, 20)) #créer un texte pour annoncer l'invasion
texte.rect = texte.image.get_rect() #obtenir les coordonnées du texte
texte.rect.centerx = 310 #position x du texte
texte.rect.centery = 20 #position y du texte
liste_des_sprites.add(texte) #ajouter le texte à la liste des sprites
music = pygame.mixer.music.load("musique fond.mp3") #charger la musique
rapidite_ananas = 4 # mouvement de l'ananas (4 pixels par refraichissement de la fenêtre))
delay = 10 #définir le délai (10sec) des ananas pour que l'utilisateur puisse lire la consigne
missiles_sound = pygame.mixer.Sound("bruitstirs.wav") #créer un son pour les missiles
timer = 0 #initialiser le timer
score = 0 #initialiser le score
while running: #tant que running est vrai
if sauver == False: #si l'utilisateur choisit l'sauver == False
timer += 1 #incrément du timer à chaque phase d'exécution
if timer >= 30 * 60: #si le timer est plus grand ou égal à 30 sec * 60 cadres par sec
gameover = True #définir gameover comme True
music = pygame.mixer.music.load("gameover.mp3") #charger la musique du gameover
pygame.mixer.music.play(1)#jouer la musique du gameover qu'une seule fois
police = pygame.font.Font(None, 50) #créer une police pour le texte
texte = pygame.sprite.Sprite() #créer un texte pour le gameover
texte.image = police.render("GAMEOVER", 1, (10, 10, 10),(255, 90, 20)) #créer un texte pour le gameover
texte.rect = texte.image.get_rect() #obtenir les coordonnées du texte
texte.rect.centerx = 310 #position x du texte
texte.rect.centery = 200 #position y du texte
liste_des_sprites.add(texte) #ajouter le texte à la liste des sprites
texte = pygame.sprite.Sprite() #créer un second message
texte.image = police.render("INVASION ABOUTIE", 1, (10, 10, 10),(255, 90, 20)) #créer un texte pour informer le joueur de l'invasion
texte.rect = texte.image.get_rect() #obtenir les coordonnées de l'image
texte.rect.centerx = 310
texte.rect.centery = 240
liste_des_sprites.add(texte) #ajouter le texte
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) #dessiner les ananas
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]
avion.rect.x = min(event.pos[0], (LARGEUR - avion.rect.width))
if event.type == MOUSEBUTTONDOWN: #si l'événement est le clic de la souris
if gameover == False and sauver == True: #if gameover is not true
nouveau_missile = tirer_missiles(avion.rect.centerx, HAUTEUR/2) #créer un nouveau missile
pygame.mixer.Sound.play(missiles_sound) #jouer le son du tir
liste_de_missiles.append(nouveau_missile) #ajouter le nouveau missile à la liste
liste_sprites_missiles.add(nouveau_missile) #ajouter le nouveau missile au groupe
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é
if score < 100: # only spawn ananas if score is less than 100
nombre_aleatoire = randint(0, 100) #obtenir un nombre aléatoire pour contrôler la fréquence des ananas
if nombre_aleatoire == 100: #si le nombre aléatoire est 100
position_x_aleatoire = randint(0, LARGEUR - 60) #obtenir une position x aléatoire pour l'ananas
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
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'une ananas
ananas.delay_timer -= 1 #soustraire le délai d'un
else:
ananas.rect.y += rapidite_ananas #ajouter la vitesse à la position y de l'ananas
if ananas.rect.colliderect(avion) and sauver == True: #si l'ananas touche l'avion ET si sauver == True
print("COLLISION, L'OBJET A ÉTÉ ÉLIMINÉ, MALHEUREUSEMENT, VOUS AUSSI.") #message pour informer la mort de l'utilisateur
avion.kill() #enlever l'avion de la liste des sprites (et donc de la fenetre))
music = pygame.mixer.music.load("gameover.mp3") #charger la musique du gameover
pygame.mixer.music.play(1) #jouer la musique du gameover qu'une seule fois
police = pygame.font.Font(None, 50) #créer une police pour le texte
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 du texte
texte.rect.centerx = 310 #position x du texte
texte.rect.centery = 200 #position y du texte
liste_des_sprites.add(texte) #ajouter le texte à la liste des sprites
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 (de la fenetre)
gameover = True #définir la variable gameover comme vrai
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
if ananas.rect.y > HAUTEUR: #si l'ananas dépasse l'hauteur de la fenêtre
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
if sauver == False: #si l'utilisateur a choisi de ne pas sauver la Terre
gameover = False #définir la variable gameover comme faux
else:
gameover = True #définir la variable gameover comme vrai
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
police = pygame.font.Font(None, 36)
texte1 = pygame.sprite.Sprite() #créer un texte du gameover
pygame.sprite.Sprite.__init__(texte1) #initialiser le sprite
texte1.image = police.render("GAMEOVER", 1, (10,10,10),(255, 90, 20)) #créer un texte du gameover
texte1.rect = texte1.image.get_rect() #obtenir les coordonnées du texte
texte1.rect.centerx = 310 #position x du texte
texte1.rect.centery = 200 #position y du texte
liste_des_sprites.add(texte1) #ajouter le texte1 à la liste des sprites
police = pygame.font.Font(None, 36) #créer une police pour le texte
texte22 = pygame.sprite.Sprite() #créer un texte pour informer de l'invasion des adversaires
pygame.sprite.Sprite.__init__(texte22) #initialiser le sprite
texte22.image = police.render("L'ennemi est entré dans notre atmosphère!", 1, (10,10,10),(255, 90, 20)) #créer un texte pour informer de l'invasion des adversaires
texte22.rect = texte22.image.get_rect() #obtenir les coordonnées du texte
texte22.rect.centerx = 310 #position x du texte
texte22.rect.centery = 250 #position y du texte
liste_des_sprites.add(texte22) #ajouter le texte22 à la liste des sprites
police = pygame.font.Font(None, 36) #créer une police pour le texte
texte33 = pygame.sprite.Sprite() #créer un texte motivant l'utilisateur d'une (nouvelle) mission
pygame.sprite.Sprite.__init__(texte33) #initialiser le sprite
texte33.image = police.render("Réessayez de tuer tout les ennemis!", 1, (10,10,10),(255, 90, 20)) #créer un texte motivant l'utilisateur d'une (nouvelle) mission
texte33.rect = texte33.image.get_rect() #obtenir les coordonnées du texte
texte33.rect.centerx = 310 #position x du texte
texte33.rect.centery = 300 #position y du texte
liste_des_sprites.add(texte33) #ajouter le texte33 à la liste des sprites
for missiles in liste_de_missiles: #pour chaque missile dans la liste des missiles
missiles.rect.y -= 10 #soustraire 10 à la position y du missile (10 pixels, le missile monte dans l'écran)
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 (de la fenetre)
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 dans la liste des ananas
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 des ananas
ananas.kill() #supprimer l'ananas (de la fenetre)
liste_de_missiles.remove(missiles) #retirer le missile de la liste des missiles
missiles.kill() #supprimer le missile (de la fenetre)
score += 10 # augmenter le score de l'utilisateur de 10 points
print(f"Score:", score) # print le score
texte_score = police.render("Score: " + str(score), 1, (10, 10, 10), (255, 90, 20)) #actualiser le texte du score
texte_score_rect = texte_score.get_rect() #obtenir les coordonnées du texte
texte_score_rect.topleft = (10, 10) #position du texte
if score >= 100: #vérifier le jeu pour une victoire
gameover = True #définir la variable gameover comme vrai
music = pygame.mixer.music.load("victoire.mp3") #charger la musique de la victoire
pygame.mixer.music.play(1) #jouer la musique de la victoire qu'une seule fois
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
police = pygame.font.Font(None, 50) #créer une police pour le texte
texte = pygame.sprite.Sprite() #créer un texte pour informer de la victoire
texte.image = police.render("VICTOIRE!", 1, (10, 10, 10),(255, 90, 20)) #créer un texte pour informer de la victoire
texte.rect = texte.image.get_rect() #obtenir les coordonnées du texte
texte.rect.centerx = 310 #position x du texte
texte.rect.centery = 200 #position y du texte
liste_des_sprites.add(texte) #ajouter le texte à la liste des sprites
texte = pygame.sprite.Sprite() #créer un second texte pour informer de la victoire
texte.image = police.render("LA TERRE EST SAUVÉE!", 1, (10, 10, 10),(255, 90, 20)) #créer un second texte pour informer de la victoire
texte.rect = texte.image.get_rect() #obtenir les coordonnées du texte
texte.rect.centerx = 310 #position x du texte
texte.rect.centery = 235 #position y du texte
liste_des_sprites.add(texte) #ajouter le texte à la liste des sprites
pygame.display.flip() #mettre à jour la fenêtre
fenetre.fill((0,0,0)) #remplir la fenêtre avec la couleur noire (derrière la terre)
clock.tick(50) #mettre le nombre de cadres par sec
pygame.quit() #quitter pygame
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()

Binary file not shown.