Compare commits

..

3 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
f12bd0b5e8 caitlin: missiles 2025-01-04 16:15:19 +01:00
4 changed files with 136 additions and 142 deletions

BIN
bruitstirs.wav Normal file

Binary file not shown.

BIN
invasion_musique.mp3 Normal file

Binary file not shown.

278
main.py
View File

@ -1,181 +1,175 @@
import pygame import pygame
from pygame.locals import * from pygame.locals import *
from random import randint from random import randint
LARGEUR = 900 from pygame.mixer import music
HAUTEUR = 700 pygame.mixer.init()
fenetre = pygame.display.set_mode((LARGEUR, HAUTEUR))
fond = pygame.sprite.Sprite() LARGEUR = 610 #largeur de la fenêtre
fond.image = pygame.image.load("terre.jpg").convert() HAUTEUR = 600 #hauteur de la fenêtre
fond.rect = fond.image.get_rect() fenetre = pygame.display.set_mode((LARGEUR, HAUTEUR)) #créer la fenêtre
fond.rect.x = 55 fond = pygame.sprite.Sprite() #créer un sprite
fond.rect.y = 0 fond.image = pygame.image.load("terre.jpg").convert() #charger l'image
def creer_ananas(pos_x, pos_y): fond.rect = fond.image.get_rect() #obtenir les coordonnées de l'image
ananas = pygame.sprite.Sprite() fond.rect.x = 0 #position x
pygame.sprite.Sprite.__init__(ananas) fond.rect.y = 0 #position y
ananas.image = pygame.image.load("ananas.png").convert_alpha() def creer_ananas(pos_x, pos_y): #créer un ananas
ananas.image = pygame.transform.scale(ananas.image,[200, 100]) ananas = pygame.sprite.Sprite() #créer un sprite
ananas.rect = ananas.image.get_rect() 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.x = pos_x
ananas.rect.y = pos_y ananas.rect.y = pos_y
return ananas return ananas #retourner l'ananas
def tirer_missiles(pos_x, pos_y): def tirer_missiles(pos_x, pos_y): #créer un missile
missiles = pygame.sprite.Sprite() missiles = pygame.sprite.Sprite() #créer un sprite
pygame.sprite.Sprite.__init__(missiles) pygame.sprite.Sprite.__init__(missiles) #initialiser le sprite
missiles.image = pygame.image.load("missiles.png").convert_alpha() missiles.image = pygame.image.load("missiles.png").convert_alpha() #charger l'image
missiles.image = pygame.transform.scale(missiles.image,[10, 100]) missiles.image = pygame.transform.scale(missiles.image,[10, 100]) #redimensionner l'image
missiles.rect = missiles.image.get_rect() missiles.rect = missiles.image.get_rect() #obtenir les coordonnées de l'image
missiles.rect.x = pos_x missiles.rect.x = pos_x
missiles.rect.y = pos_y missiles.rect.y = pos_y
return missiles return missiles
missiles = pygame.sprite.Sprite() missiles = pygame.sprite.Sprite() #créer un sprite
liste_de_missiles = [] liste_de_missiles = [] #créer une liste
liste_sprites_missiles = pygame.sprite.Group() liste_sprites_missiles = pygame.sprite.Group() #créer un groupe
pygame.sprite.LayeredUpdates() pygame.sprite.LayeredUpdates() #mettre les sprites en ordre
pygame.init() pygame.init()
clock = pygame.time.Clock() clock = pygame.time.Clock() #créer un horloge
running = True running = True #définir la variable running
avion = pygame.sprite.Sprite() avion = pygame.sprite.Sprite()
pygame.sprite.Sprite.__init__(avion) pygame.sprite.Sprite.__init__(avion) #initialiser le sprite
avion.image = pygame.image.load("avion.png").convert_alpha() avion.image = pygame.image.load("avion.png").convert_alpha() #charger l'image
avion.image = pygame.transform.scale(avion.image,[120, 120]) avion.image = pygame.transform.scale(avion.image,[120, 120]) #redimensionner l'image
avion.rect = avion.image.get_rect() avion.rect = avion.image.get_rect()
avion.rect.x = 200 avion.rect.x = 200 #position x
avion.rect.y = 400 avion.rect.y = 400 #position y
liste_des_sprites = pygame.sprite.LayeredUpdates() liste_des_sprites = pygame.sprite.LayeredUpdates() #créer un groupe
liste_des_sprites.add(fond) liste_des_sprites.add(fond) #ajouter le fond
liste_sprites_ananas = pygame.sprite.LayeredUpdates() liste_sprites_ananas = pygame.sprite.LayeredUpdates()
liste_des_sprites.add(avion) liste_des_sprites.add(avion) #ajouter l'avion
liste_d_ananas = [] liste_d_ananas = [] #créer une liste
police = pygame.font.Font(None, 25) gameover = False #définir la variable gameover
texte = pygame.sprite.Sprite() intro = int(input("Voulez-vous sauver la Terre ? 1 pour oui, 2 pour non"))
pygame.sprite.Sprite.__init__(texte) if intro == 1:
texte.image = police.render("ALERTE! La planète Terre est attaquée par une flotte davions spatiaux!", 1, (10, 10, 10),(255, 90, 20)) 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 = texte.image.get_rect()
texte.rect.centerx = 360 texte.rect.centerx = 310 #position x
texte.rect.centery = 30 texte.rect.centery = 20 #position y
liste_des_sprites.add(texte) liste_des_sprites.add(texte) #ajouter le texte
police = pygame.font.Font(None, 20) gameover = False #définir la variable gameover
texte2 = pygame.sprite.Sprite()
texte2.image = police.render("Vous vous trouvez dans lengin SU-PER12. Votre mission est déliminer le plus dennemis possible!", 1, (10, 10, 10),(255, 90, 20))
texte2.rect = texte2.image.get_rect()
texte2.rect.centerx = 360
texte2.rect.centery = 60
liste_des_sprites.add(texte2)
police = pygame.font.Font(None, 20) ananas_speed = 4 #définir la vitesse de l'ananas
texte3 = pygame.sprite.Sprite()
texte3.image = police.render("Pour ce faire, appuyez sur « espace » pour tirer et bougez la souris pour manoeuvrer votre SU-PER12!", 1, (10, 10, 10),(255, 90, 20))
texte3.rect = texte3.image.get_rect()
texte3.rect.centerx = 360
texte3.rect.centery = 80
liste_des_sprites.add(texte3)
police = pygame.font.Font(None, 20) delay = 10 #définir le délai
texte4 = pygame.sprite.Sprite()
texte4.image = police.render("Bonne chance!", 1, (10, 10, 10),(255, 90, 20))
texte4.rect = texte4.image.get_rect()
texte4.rect.centerx = 360
texte4.rect.centery = 100
liste_des_sprites.add(texte4)
police = pygame.font.Font(None, 20)
texte5 = pygame.sprite.Sprite()
texte5.image = police.render("ALERTE, PLANETE TERRE EST SOUS ATTAQUE", 1, (10, 10, 10),(255, 90, 20))
texte5.rect = texte5.image.get_rect()
texte5.rect.centerx = 360
texte5.rect.centery = 1500
liste_des_sprites.add(texte5)
gameover = False
while running: missiles_sound = pygame.mixer.Sound("bruitstirs.wav") #créer un son
keys = pygame.key.get_pressed() music = pygame.mixer.music.load("musique fond.mp3") #charger la musique
if keys[pygame.K_SPACE]:
liste_des_sprites.remove(texte)
liste_des_sprites.remove(texte1) while running: #tant que running est vrai
liste_des_sprites.remove(texte2)
liste_des_sprites.remove(texte3) keys = pygame.key.get_pressed() #obtenir les touches appuyées
liste_des_sprites.remove(texte4) if keys[pygame.K_SPACE] == True: #si la touche espace est appuyée
liste_des_sprites.remove(texte5) liste_des_sprites.remove(texte) #retirer le texte
liste_des_sprites.draw(fenetre) liste_des_sprites.draw(fenetre) #dessiner les sprites
liste_sprites_ananas.draw(fenetre) liste_sprites_ananas.draw(fenetre)
liste_sprites_missiles.draw(fenetre) liste_sprites_missiles.draw(fenetre) #dessiner les missiles
for event in pygame.event.get(): for event in pygame.event.get(): #pour chaque événement
if event.type == pygame.QUIT: if event.type == pygame.QUIT: #si l'événement est quitter
running = False running = False
if event.type == MOUSEMOTION: 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: if event.type == MOUSEBUTTONDOWN: #si l'événement est le clic de la souris
print("Vous avez tué l'ennemi! Continuez!") nouveau_missile = tirer_missiles(avion.rect.centerx, HAUTEUR/2) #créer un nouveau missile
nouveau_missile = tirer_missiles(avion.rect.centerx, HAUTEUR/2) pygame.mixer.Sound.play(missiles_sound) #jouer le son
liste_de_missiles.append(nouveau_missile) == [nouveau_missile] liste_de_missiles.append(nouveau_missile) #ajouter le nouveau missile à la liste
liste_sprites_missiles.add(nouveau_missile) == pygame.sprite.Group(nouveau_missile) liste_sprites_missiles.add(nouveau_missile) #ajouter le nouveau missile au groupe
if gameover == False: if gameover == False: #si le jeu n'est pas terminé
nombre_aleatoire = randint(0, 100) nombre_aleatoire = randint(0, 100) #obtenir un nombre aléatoire
if nombre_aleatoire == 100: if nombre_aleatoire == 100: #si le nombre aléatoire est 100
position_x_aleatoire = randint(0, LARGEUR - 60) position_x_aleatoire = randint(0, LARGEUR - 60)
nouvel_ananas = creer_ananas(position_x_aleatoire, -100) nouvel_ananas = creer_ananas(position_x_aleatoire, -100) #créer une nouvelle ananas
liste_d_ananas.append(nouvel_ananas) liste_d_ananas.append(nouvel_ananas) #l'ajouter à la liste
liste_sprites_ananas.add(nouvel_ananas) 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: for ananas in liste_d_ananas:
ananas.rect.y += 2 if ananas.delay_timer > 0: #si le délai est supérieur à 0
if ananas.rect.colliderect(avion): ananas.delay_timer -= 1 #soustraire le délai d'un
print("COLLISION, L'OBJET A ÉTÉ ÉLIMINÉ, MALHEUREUSEMENT, VOUS AUSSI") else:
liste_d_ananas.remove(ananas) ananas.rect.y += ananas_speed #ajouter la vitesse à la position y de l'ananas
ananas.kill() if ananas.rect.colliderect(avion): #si l'ananas touche l'avion
if ananas.rect.y > HAUTEUR: 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 gameover = True
police = pygame.font.Font(None, 36) police = pygame.font.Font(None, 36)
texte1 = pygame.sprite.Sprite() texte1 = pygame.sprite.Sprite() #créer un texte
pygame.sprite.Sprite.__init__(texte1) pygame.sprite.Sprite.__init__(texte1) #initialiser le sprite
texte1.image = police.render("Gameover.", 1, (10,10,10),(255, 90, 20)) texte1.image = police.render("GAMEOVER", 1, (10,10,10),(255, 90, 20))
texte1.rect = texte1.image.get_rect() texte1.rect = texte1.image.get_rect()
texte1.rect.centerx = 360 texte1.rect.centerx = 310
texte1.rect.centery = 450 texte1.rect.centery = 200
liste_des_sprites.add(texte1) liste_des_sprites.add(texte1) #ajouter le texte1
police = pygame.font.Font(None, 36) police = pygame.font.Font(None, 36)
texte22 = pygame.sprite.Sprite() texte22 = pygame.sprite.Sprite() #créer un texte
pygame.sprite.Sprite.__init__(texte22) 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.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 = texte22.image.get_rect()
texte22.rect.centerx = 360 texte22.rect.centerx = 310
texte22.rect.centery = 500 texte22.rect.centery = 250
liste_des_sprites.add(texte22) liste_des_sprites.add(texte22) #ajouter le texte22
police = pygame.font.Font(None, 36) police = pygame.font.Font(None, 36)
texte33 = pygame.sprite.Sprite() texte33 = pygame.sprite.Sprite() #créer un texte
pygame.sprite.Sprite.__init__(texte33) pygame.sprite.Sprite.__init__(texte33)
texte33.image = police.render("Réessaye de tuer tout les ennemis!", 1, (10,10,10),(255, 90, 20)) 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 = texte33.image.get_rect()
texte33.rect.centerx = 360 texte33.rect.centerx = 310
texte33.rect.centery = 450 texte33.rect.centery = 300
liste_des_sprites.add(texte33) liste_des_sprites.add(texte33) #ajouter le texte33
for missiles in liste_de_missiles: for missiles in liste_de_missiles: #pour chaque missile
missiles.rect.y -= 1 missiles.rect.y -= 10 #soustraire 10 à la position y du missile
if missiles.rect.y <= 0: if missiles.rect.y <= 0: #si la position y du missile est inférieure ou égale à 0
liste_de_missiles.remove(missiles) liste_de_missiles.remove(missiles) #retirer le missile de la liste
missiles.kill() missiles.kill() #supprimer le missile
else: else:
# Check for hitting missiles for ananas in liste_d_ananas: #pour chaque ananas
for ananas in liste_d_ananas: if ananas.rect.colliderect(missiles): #si l'ananas touche le missile
if ananas.rect.colliderect(missiles): liste_d_ananas.remove(ananas) #retirer l'ananas de la liste
liste_d_ananas.remove(ananas) ananas.kill() #supprimer l'ananas
ananas.kill() liste_de_missiles.remove(missiles) #retirer le missile de la liste
liste_de_missiles.remove(missiles) missiles.kill() #supprimer le missile
missiles.kill()
pygame.display.flip() #mettre à jour la fenêtre
pygame.display.flip() fenetre.fill((0,0,0)) #remplir la fenêtre avec la couleur noire
fenetre.fill((0,0,0)) clock.tick(50) #mettre le nombre de frames par seconde
clock.tick(60)
pygame.quit() pygame.quit()

BIN
musique fond.mp3 Normal file

Binary file not shown.