From 1b4bf033038fd55f2512977099998f6e8fc79d16 Mon Sep 17 00:00:00 2001 From: "laneury.a" <> Date: Wed, 9 Apr 2025 14:51:03 +0200 Subject: [PATCH] nouvelle classe --- classes.py | 136 ++++++++++++----------------- constantes.py | 60 ++++++------- main.py | 232 ++++++++++++++++++++++++++------------------------ 3 files changed, 204 insertions(+), 224 deletions(-) diff --git a/classes.py b/classes.py index c4ff8e4..35a40e4 100644 --- a/classes.py +++ b/classes.py @@ -1,81 +1,55 @@ -import pygame -from pygame.locals import * -from random import randint - -class Image(): - def __init__ (self, fenetre, chm_acces, pos_x, pos_y): - self.fenetre = fenetre - self.chm_acces = chm_acces - self.pos_x = pos_x - self.pos_y = pos_y - - self.image = pygame.image.load(self.chm_acces).convert_alpha() - self.fenetre.blit(self.image, (self.pos_x, self.pos_y)) - - def translater (self,axe, sens, vitesse): - self.axe = axe - self.sens = sens - self.vitesse = vitesse - - if self.axe == "x": - if sens == "gauche": - self.pos_x = self.pos_x - self.vitesse - else: - self.pos_x = self.pos_x + self.vitesse - - else: - if sens == "haut": - self.pos_y = self.pos_y - self.vitesse - else: - self.pos_y = self.pos_y + self.vitesse - - self.fenetre.blit(self.image, (self.pos_x, self.pos_y)) - - def maj(self): - self.fenetre.blit(self.image, (self.pos_x,self.pos_y)) - - def verifier(self, long, nbr): - print("ici") - if self.pos_x <= -long : - self.pos_x = self.pos_x + long * nbr - -class Calques(): - def __init__ (self, fenetre): - self.fenetre = fenetre - self.lst_calques = [] - - def ajouter_calque(self,pos_calque): - #pos_calque vas permettre de choisir la position du calque parmis les autres calques - pas encore fncelle - #pr le moment le calque se rajoute a la fin - self.calque = [] - self.lst_calques.append(self.calque) - - def ajouter_element(self, nom, i_calque, chm_acces, pos_x, pos_y): - self.nom = nom - self.chm_acces = chm_acces - self.pos_x = pos_x - self.pos_y = pos_y - - self.nom = Image(self.fenetre, self.chm_acces, self.pos_x, self.pos_y) - self.lst_calques[i_calque].append(self.nom) - - print(self.lst_calques) - - def deplacer_calque(self, i_calque, axe, sens, vitesse, size, nbr): - self.axe = axe - self.sens = sens - self.vitesse = vitesse - - for element in self.lst_calques[i_calque]: - self.nom.verifier(size,nbr) - element.translater(self.axe, self.sens, self.vitesse) - print(self.nom.pos_x) - - def maj_calque(self, i_calque): - - for element in self.lst_calques[i_calque]: - element.maj() - - - - \ No newline at end of file +import pygame +from pygame.locals import * +from random import randint + +class Image(): + def __init__ (self, fenetre, chm_acces, pos_x, pos_y, long, larg): + self.fenetre = fenetre + self.chm_acces = chm_acces + self.pos_x = pos_x + self.pos_y = pos_y + + self.image = pygame.image.load(self.chm_acces).convert_alpha() + self.long = long + self.larg = larg + self.maj(3) + + def translater (self,axe, sens, vitesse): + if axe == "x": + if sens == "gauche": + self.pos_x = self.pos_x - vitesse + else: + self.pos_x = self.pos_x + vitesse + + else: + if sens == "haut": + self.pos_y = self.pos_y - vitesse + else: + self.pos_y = self.pos_y + vitesse + + self.maj(3) + + def maj(self, nbr): + if self.pos_x <= -self.long : + self.pos_x = self.pos_x + self.long * nbr + self.fenetre.blit(self.image, (self.pos_x,self.pos_y)) + + +class GroupeImage(): + def __init__ (self, fenetre): + self.fenetre = fenetre + self.lst = [] + + def creer_Image(self, chm_acces, pos_x, pos_y, long, larg): + self.lst.append(Image(self.fenetre, chm_acces, pos_x, pos_y, long, larg)) + + def avancer(self, vitesse): + for image in self.lst: + image.translater("x", "gauche", vitesse) + + def affiche(self): + for image in self.lst: + image.maj(len(self.lst)) + + + \ No newline at end of file diff --git a/constantes.py b/constantes.py index d165134..0d07178 100644 --- a/constantes.py +++ b/constantes.py @@ -1,31 +1,31 @@ -""" -programme avec les constantes -""" -largeur_fenetre = 1280 -hauteur_fenetre = 720 - -image_icone = "image/icone.png" -titre_fenetre = "Cars and Run 2D" -image_acceuil = "image/paysages/acc.png" - - -img_bg = "image/paysages/bg.jpg" -img_bg_nuit = "image/paysages/bg_nuit.jpg" - -img_goudron = "image/paysages/goudron.png" -img_barriere = "image/paysages/barriere.png" -img_lgn_continu = "image/paysages/lgn_continu.png" -img_lgn_discontinu = "image/paysages/lgn_discontinu.png" - -img_n1 = "image/paysages/nuages/n1.png" -img_n2 = "image/paysages/nuages/n2.png" -img_n3 = "image/paysages/nuages/n3.png" -img_n4 = "image/paysages/nuages/n4.png" -img_n5 = "image/paysages/nuages/n5.png" -img_n6 = "image/paysages/nuages/n6.png" -img_n7 = "image/paysages/nuages/n7.png" - -img_e30 = "image/voitures/e30_bg.png" -img_civic = "image/voitures/civic_bg.png" -img_golf = "image/voitures/golf_bg.png" +""" +programme avec les constantes +""" +largeur_fenetre = 1280 +hauteur_fenetre = 720 + +image_icone = "image/icone.png" +titre_fenetre = "Cars and Run 2D" +image_acceuil = "image/paysages/acc.png" + + +img_bg = "image/paysages/bg.jpg" +img_bg_nuit = "image/paysages/bg_nuit.jpg" + +img_goudron = "image/paysages/goudron.png" +img_barriere = "image/paysages/barriere.png" +img_lgn_continu = "image/paysages/lgn_continu.png" +img_lgn_discontinu = "image/paysages/lgn_discontinu.png" + +img_n1 = "image/paysages/nuages/n1.png" +img_n2 = "image/paysages/nuages/n2.png" +img_n3 = "image/paysages/nuages/n3.png" +img_n4 = "image/paysages/nuages/n4.png" +img_n5 = "image/paysages/nuages/n5.png" +img_n6 = "image/paysages/nuages/n6.png" +img_n7 = "image/paysages/nuages/n7.png" + +img_e30 = "image/voitures/e30_bg.png" +img_civic = "image/voitures/civic_bg.png" +img_golf = "image/voitures/golf_bg.png" img_hyundai = "image/voitures/hyundai_bg.png" \ No newline at end of file diff --git a/main.py b/main.py index 3e39564..6ec9822 100644 --- a/main.py +++ b/main.py @@ -1,114 +1,120 @@ -""" -Jeu cars and run 2D -lien du tuto http://sdz.tdct.org/sdz/interface-graphique-pygame-pour-python.html -lien pour faire des images pixeliser : pixilart.com -Script python:main, classes, constantes -""" -import pygame -from pygame.locals import * -from constantes import * -from classes import * -from random import randint - -pygame.init() - -#ouverture de la fenetre -fenetre = pygame.display.set_mode((largeur_fenetre, hauteur_fenetre)) -fenetre.fill((0,0,0)) - -#Icone -icone = pygame.image.load(image_icone) -pygame.display.set_icon(icone) - -#Titre -pygame.display.set_caption(titre_fenetre) - -lst_elements = [] - -#BOUCLE PRINCIPALE -continuer = 1 -while continuer: - - accueil = Image(fenetre, image_acceuil, 0, 0) - #lst_elements.append(accueil)#il me semble quepas besoin de ca - - #Rafraichissement - pygame.display.flip() - - continuer_jeu, continuer_accueil = 1, 1 #On remet ces variables à 1 à chaque tour de boucle - - #BOUCLE D'ACCUEIL - while continuer_accueil: - pygame.time.Clock().tick(30) #Limitation de vitesse de la boucle - - for event in pygame.event.get(): - - if event.type == QUIT or event.type == KEYDOWN and event.key == K_ESCAPE: - continuer_accueil,continuer_jeu,continuer = 0,0,0#Si l'utilisateur quitte, on met les variables de boucle à 0 pour n'en parcourir aucune et fermer - - choix = 0 #Variable de choix du niveau - - elif event.type == KEYDOWN: - - if event.key == K_F1: #Lancement du niveau 1 - continuer_accueil = 0#On quitte l'accueil - choix = 'n1'#On définit le niveau à charger - - elif event.key == K_F2: #Lancement du niveau 2 - continuer_accueil = 0 - choix = 'n2' - - - if choix == 'n1': #on vérifie que le joueur a bien fait un choix de niveau pour ne pas charger s'il quitte - - monde = Calques(fenetre) - - monde.ajouter_calque("c_fond")#0 - monde.ajouter_element("fond", 0, img_bg, 0, 0) - monde.ajouter_element("route", 0, img_goudron, 0, 360) - - monde.ajouter_calque("c_paysage")#2 - monde.ajouter_element("nuage", 1, img_n1, 1280, 0) - - monde.ajouter_calque("c_elem_route") - monde.ajouter_element("barriere", 2, img_barriere, 0, 360) - monde.ajouter_element("barriere", 2, img_barriere, 844, 360) - monde.ajouter_element("barriere", 2, img_barriere, 1688, 360) - - pygame.display.flip() - - if choix == 'n2': - - monde = Paysage(fenetre, img_bg_nuit, img_n2, img_goudron, img_barriere) - monde.creer_monde() - pygame.display.flip() - - #BOUCLE DE JEU - while continuer_jeu: - - #pygame.time.Clock().tick(30) #Limitation de vitesse de la boucl - - monde.deplacer_calque(1,"x", "gauche", 3, 20,1) - monde.deplacer_calque(2,"x", "gauche", 3, 844, 3) - monde.maj_calque(0) - monde.maj_calque(1) - monde.maj_calque(2) - - for event in pygame.event.get(): - - if event.type == QUIT: - continuer_jeu = 0 #Si l'utilisateur quitte, on met la variable qui continue le jeu - continuer = 0 #ET la variable générale à 0 pour fermer la fenêtre - - elif event.type == KEYDOWN: - if event.key == K_ESCAPE: - continuer_jeu = 0 #Si l'utilisateur presse Echap ici, on revient seulement au menu - elif event.key == K_UP: #Touches de déplacement de voiture - lst_elements[2].translater('y',"haut",10)#deplace pas la voiture - elif event.key == K_DOWN: - lst_elements[2].translater('y',"bas",10) - - pygame.display.flip() - - pygame.display.flip() +""" +Jeu cars and run 2D +lien du tuto http://sdz.tdct.org/sdz/interface-graphique-pygame-pour-python.html +lien pour faire des images pixeliser : pixilart.com +Script python:main, classes, constantes +""" +import pygame +from pygame.locals import * +from constantes import * +from classes import * +from random import randint + +pygame.init() + +#ouverture de la fenetre +fenetre = pygame.display.set_mode((largeur_fenetre, hauteur_fenetre)) +fenetre.fill((0,0,0)) + +#Icone +icone = pygame.image.load(image_icone) +pygame.display.set_icon(icone) + +#Titre +pygame.display.set_caption(titre_fenetre) + +lst_elements = [] + +#BOUCLE PRINCIPALE +continuer = 1 +while continuer: + + accueil = Image(fenetre, image_acceuil, 0, 0, 205, 205) + #lst_elements.append(accueil)#il me semble quepas besoin de ca + + #Rafraichissement + pygame.display.flip() + + continuer_jeu, continuer_accueil = 1, 1 #On remet ces variables à 1 à chaque tour de boucle + + #BOUCLE D'ACCUEIL + while continuer_accueil: + pygame.time.Clock().tick(30) #Limitation de vitesse de la boucle + + for event in pygame.event.get(): + + if event.type == QUIT or event.type == KEYDOWN and event.key == K_ESCAPE: + continuer_accueil,continuer_jeu,continuer = 0,0,0#Si l'utilisateur quitte, on met les variables de boucle à 0 pour n'en parcourir aucune et fermer + + choix = 0 #Variable de choix du niveau + + elif event.type == KEYDOWN: + + if event.key == K_F1: #Lancement du niveau 1 + continuer_accueil = 0#On quitte l'accueil + choix = 'n1'#On définit le niveau à charger + + elif event.key == K_F2: #Lancement du niveau 2 + continuer_accueil = 0 + choix = 'n2' + + + if choix == 'n1': #on vérifie que le joueur a bien fait un choix de niveau pour ne pas charger s'il quitte + + fonds = GroupeImage(fenetre) + fonds.creer_Image(img_bg, 0, 0, 290, 57) + fonds.creer_Image(img_goudron, 0, 360, 205, 205) + + nuages = GroupeImage(fenetre) + nuages.creer_Image(img_n1, 1280, 0, 290, 57) + nuages.creer_Image(img_n2, 1280, 59, 248, 58) + + barrieres = GroupeImage(fenetre) + barrieres.creer_Image(img_barriere, 0, 360, 844, 40) + barrieres.creer_Image(img_barriere, 844, 360, 844, 40) + barrieres.creer_Image(img_barriere, 844+844, 360, 844, 40) + + + + voitures = GroupeImage(fenetre) + voitures.creer_Image(img_e30, 50, 360, 205, 205) + + pygame.display.flip() + + if choix == 'n2': + + monde = Paysage(fenetre, img_bg_nuit, img_n2, img_goudron, img_barriere) + monde.creer_monde() + pygame.display.flip() + + #BOUCLE DE JEU + while continuer_jeu: + pygame.time.Clock().tick(30) #Limitation de vitesse de la boucl + + nuages.avancer(10) + barrieres.avancer(10) + + + fonds.affiche() + nuages.affiche() + barrieres.affiche() + voitures.affiche() + + for event in pygame.event.get(): + + if event.type == QUIT: + continuer_jeu = 0 #Si l'utilisateur quitte, on met la variable qui continue le jeu + continuer = 0 #ET la variable générale à 0 pour fermer la fenêtre + + elif event.type == KEYDOWN: + if event.key == K_ESCAPE: + continuer_jeu = 0 #Si l'utilisateur presse Echap ici, on revient seulement au menu + elif event.key == K_UP: #Touches de déplacement de voiture + lst_elements[2].translater('y',"haut",10)#deplace pas la voiture + elif event.key == K_DOWN: + lst_elements[2].translater('y',"bas",10) + + pygame.display.flip() + + pygame.display.flip() pygame.quit() \ No newline at end of file