def __init__(self): self.en_jeu = True self.balle = Balle() self.raquette = Raquette() self.niveau = Niveau() self.vie = NOMBRE_VIES self.score = 0 self.briques_touchees = 0
def __init__(self, i_fenetre): ''' Définition des variables du constructeur. ''' self.fenetre = i_fenetre # Stocke les paramètres de la fenêtre. self.canevas = tk.Canvas( self.fenetre, width=self.largeur_fenetre(), height=self.hauteur_fenetre( )) # Crée un canvas ( Support de tout les éléments d'affichage. ) self.canevas.place(x=0, y=0) # Place le Canvas self.raquette = Raquette(self) # Crée une instance de Raquette. self.balle = Balle(self) # Crée une instance de Balle. self.level_id = -1 # Numéro du niveau à charger. self.niveau = Level(self, self.level_id) # Crée une instance du Niveau . self.lives = Lives(self, 3, self.largeur_fenetre() / 16, (self.hauteur_fenetre() * 15) / 16) # Crée une instance des Vies. self.touche_possible = [ "q", "d", "Q", "D" ] # Liste des touches qui seront utilisées pour jouer. self.touche_options = [ 'plus', 'minus', 'slash' ] # Liste des touches qui seront utilisées pour les options du jeu (Augmenter le taux de rafraîchissement : +, le Diminuer : -, Mettre en place un sol : / ). # Capture les événements de la souris. self.canevas.bind( "<Motion>", self.moved) # Coordonnées du curseur de la souris en abscisse. self.canevas.bind("<Button-3>", self.rightClick) # Si le click droit a été activé. self.canevas.bind( "<Leave>", self.leave) # Si la souris a quitté le périmètre de la fenêtre. self.canevas.bind( "<Enter>", self.enter) # Si la souris est entrée le périmètre de la fenêtre. # Capture les événements du clavier. self.fenetre.bind( "<KeyPress>", self.checkKeyPressed ) # Active la capture des touches du clavier dans la fenêtre. self.resetGame( ) # Initialise tout les objets avec leurs paramètres par défaut.
class Game: def __init__(self, ecran: pygame.Surface): self.ecran = ecran self.raquette = Raquette(self.ecran) self.balle = Balle(self.ecran) self.continuer = True self.controles = {HAUT: const.K_UP, BAS: const.K_DOWN} def prepare(self): pygame.key.set_repeat(200, 50) self.continuer = True self.raquette = Raquette(self.ecran) self.balle = Balle(self.ecran) def update_screen(self): pygame.draw.rect(self.ecran, (0, 0, 0), (0, 0) + self.ecran.get_size()) # on dessine le fond pygame.draw.rect( self.ecran, (255, 255, 255), (self.ecran.get_width() // 2 - 1, 0, 2, self.ecran.get_height())) # la séparation au milieu du terrain self.raquette.render() # on dessine notre raquette self.balle.render() # on dessine notre balle def process_event(self, event: pygame.event): if event.type == const.KEYDOWN: # et revoici l'utilité de nos constantes, utilisées comme clé de dictionnaire :) # comme ça on peut plus facilement changer les controles ;) if event.key == self.controles[HAUT]: self.raquette.move(HAUT) if event.key == self.controles[BAS]: self.raquette.move(BAS) if event.type == const.QUIT: self.continuer = False def start(self): self.prepare() while self.continuer: for event in pygame.event.get(): self.process_event(event) self.update_screen() self.balle.move(self.raquette) # on déplace notre balle pygame.display.flip()
class Jeu: ''' Classe pour gérer l'ensemble des intéractions avec le jeu. ''' def __init__(self, i_fenetre): ''' Définition des variables du constructeur. ''' self.fenetre = i_fenetre # Stocke les paramètres de la fenêtre. self.canevas = tk.Canvas( self.fenetre, width=self.largeur_fenetre(), height=self.hauteur_fenetre( )) # Crée un canvas ( Support de tout les éléments d'affichage. ) self.canevas.place(x=0, y=0) # Place le Canvas self.raquette = Raquette(self) # Crée une instance de Raquette. self.balle = Balle(self) # Crée une instance de Balle. self.level_id = -1 # Numéro du niveau à charger. self.niveau = Level(self, self.level_id) # Crée une instance du Niveau . self.lives = Lives(self, 3, self.largeur_fenetre() / 16, (self.hauteur_fenetre() * 15) / 16) # Crée une instance des Vies. self.touche_possible = [ "q", "d", "Q", "D" ] # Liste des touches qui seront utilisées pour jouer. self.touche_options = [ 'plus', 'minus', 'slash' ] # Liste des touches qui seront utilisées pour les options du jeu (Augmenter le taux de rafraîchissement : +, le Diminuer : -, Mettre en place un sol : / ). # Capture les événements de la souris. self.canevas.bind( "<Motion>", self.moved) # Coordonnées du curseur de la souris en abscisse. self.canevas.bind("<Button-3>", self.rightClick) # Si le click droit a été activé. self.canevas.bind( "<Leave>", self.leave) # Si la souris a quitté le périmètre de la fenêtre. self.canevas.bind( "<Enter>", self.enter) # Si la souris est entrée le périmètre de la fenêtre. # Capture les événements du clavier. self.fenetre.bind( "<KeyPress>", self.checkKeyPressed ) # Active la capture des touches du clavier dans la fenêtre. self.resetGame( ) # Initialise tout les objets avec leurs paramètres par défaut. def largeur_fenetre(self) -> int: ''' Fonction qui retourne la valeur de la largeur de la fenêtre. ''' return self.fenetre.winfo_width( ) # Retourne la largeur définie dans main.py def hauteur_fenetre(self) -> int: ''' Fonction qui retourne la valeur de la hauteur de la fenêtre. ''' return self.fenetre.winfo_height( ) # Retourne la heuteur définie dans main.py def checkKeyPressed(self, event): ''' Fonction qui vérifie si une touche à été préssée, et si elle est prise en compte par le programme. ''' # print(f"Touche : {event.keysym}") #Affiche toutes les touches préssés. if event.keysym == "Escape": # Si la touche préssée est 'Echap' alors , self.stopGame( ) #Le jeu s'arrête (Sortie de la boucle while -> infini) if event.keysym in self.touche_possible: # Si la touche préssée est dans la liste de celles possibles pour le jeu. if event.keysym == "q" or event.keysym == "Q": # Si la touche préssée est la touche 'q' ou 'Q' (dans le cas d'un clavier en mode MAJS ) self.raquette.goLeft( ) # Apelle la fonction qui permet de déplacer la Raquette vers la Gauche. elif event.keysym == "d" or event.keysym == "D": # Si la touche préssée est la touche 'd' ou 'D' (dans le cas d'un clavier en mode MAJS ) self.raquette.goRight( ) # Apelle la fonction qui permet de déplacer la Raquette vers la Droite. if event.keysym in self.touche_options: # Si la touche préssée est dans la liste de celles possibles pour les options. if event.keysym == "plus": # Si la touche préssée est la touche '+' self.time_sleep /= 2 # Le taux de rafraîchissement de la fenêtre est augmenté (temps de pause diminué). print("Taux de Rafraîchissement : Augmenté" ) # Message qui s'affiche au passage dans la condition. elif event.keysym == "minus": # Si la touche préssée est la touche '-' self.time_sleep *= 2 # Le taux de rafraîchissement de la fenêtre est diminué (temps de pause augmenté). print("Taux de Rafraîchissement : Diminué" ) # Message qui s'affiche au passage dans la condition. elif event.keysym == 'slash': # Si la touche préssée est la touche '/' self.niveau.ground = not self.niveau.ground # Toggle (= Basculer) le sol à True / False. if self.niveau.ground == True: # Si le sol est à l'état True. print( "Sol Activé" ) # Message qui s'affiche au passage dans la condition. else: # Sinon print( "Sol Désactivé" ) # Message qui s'affiche si le sol est désactivé après passage dans la boucle. def moved(self, event): ''' Fonction récupérant les coordonnées en abscisse de la souris et les attribuants à la raquette. ''' x = event.x # Capte les coordonées de la souris en abscisse. self.raquette.setPosition( x ) # Attributs les coordonnées en abscisse de la souris captés précédement et les attributs à la Raquette. def enter(self, event): ''' Fonction qui gère l'entrée de la souris dans la zone du canvas. ''' x, y = event.x, event.y # Capture les coordonnées en abscisse, en ordonné et les stockent. if y > 0 and y < self.hauteur_fenetre( ): # Si la souris est dans la fenêtre en hauteur alors , self.raquette.setPositionEnter( x ) # On demande à placer la souris au maximum de la zone du canvas en largeur. def leave(self, event): ''' Fonction qui gère la sortie de la souris de la zone du canvas. ''' x, y = event.x, event.y # Capture les coordonnées en abscisse, en ordonné et les stockent. if y > 0 and y < self.hauteur_fenetre( ): # Si la souris est dans la fenêtre en hauteur alors , self.raquette.setPositionLeave( x ) # On demande à placer la souris au maximum de la zone du canvas en largeur. def miseAJour(self): ''' Fonction mettant à jour tout les éléments susceptibles de varier // Sauf les briques (Auto gérées) ''' self.balle.deplacer() # Provoque le déplacement de la Balle. self.balle.paint() # Actualise l'affichage de la Balle. self.raquette.paint() # Actualise l'affichage de la Raquette. self.lives.paint() # Actualise l'affichage de la Vie. def stopGame(self): ''' Fonction permettant d'arrêter le jeu. ''' self.running = False # Sortie de la bouble infini While. print("Game Stopped" ) # Message qui s'affiche lors de l'appel de cette fonction. def getStateGame(self): ''' Fonction permettant d'obtenir l'état du jeu (Pause/Running). ''' return self.running # Retourne True si le jeu est en marche, sinon, s'il est arrêté, retourne False. def resetGame(self): ''' Réinitialise tout les paramètres par défaut de tout les objets. ''' self.raquette.reset() # Réinitialise les paramètres de la Raquette. self.balle.reset() # Réinitialise les paramètres de la Balle. self.lives.reset() # Réinitialise les paramètres de la Vie. self.niveau.reset() # Réinitialise les paramètres du Niveau. self.time_sleep = 0.01 # Réinitialise les paramètres de temps de pause du jeu. def rightClick(self, event): ''' Fonction permettant de rédémarrer le Jeu avec un clic droit si le Jeu est en pause. ''' if self.getStateGame() == False: # Si le Jeu est en pause alors , self.resetGame( ) # L'on réinitialise tout les paramètres par défaut. self.startGame() # L'on rentre dans la boucle infini While. def startGame(self): ''' Fonction permattant de démarrer le Jeu. ''' self.running = True # Passe la condition de la boucle infini While à l'état : True (l'on rentre dans la boucle). while self.getStateGame(): # Tant que le Jeu est à l'état True : self.miseAJour() # Mise à jour du jeu. self.fenetre.update() # Mise à jour par l'os de l'affichage. sleep( self.time_sleep ) # Temps d'arrêt entre chaque rafraîchissement de l'écran qui est défini par : self.time_sleep .
def __init__(self, ecran: pygame.Surface): self.ecran = ecran self.raquette = Raquette(self.ecran) self.balle = Balle(self.ecran) self.continuer = True self.controles = {HAUT: const.K_UP, BAS: const.K_DOWN}
def prepare(self): pygame.key.set_repeat(200, 50) self.continuer = True self.raquette = Raquette(self.ecran) self.balle = Balle(self.ecran)
class Jeu: def __init__(self): self.en_jeu = True self.balle = Balle() self.raquette = Raquette() self.niveau = Niveau() self.vie = NOMBRE_VIES self.score = 0 self.briques_touchees = 0 def gestion_evenements(self): for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.MOUSEBUTTONDOWN: if event.button == 1: if self.balle.sur_raquette: self.balle.sur_raquette = False self.balle.vitesse_par_angle(60) if self.en_jeu == False: self.vie = NOMBRE_VIES self.niveau.en_cours = 1 self.score = 0 def mise_a_jour(self): x, y = pygame.mouse.get_pos() self.balle.deplacer(self.raquette) if self.balle.loose: self.vie -= 1 self.balle.loose = False prec = False for brique in self.niveau.brique_liste: if brique.en_vie(): collision = brique.collision_balle(self.balle,prec) if collision[0]: if not(prec): if brique.vie > 0: jouer_son("touche") else: jouer_son("score") if collision[0] and not(collision[1]) : self.score += 1 self.raquette.arc_en_ciel = True self.briques_touchees += 1 prec = True self.raquette.deplacer(x) self.en_jeu = True def affichage(self): screen.fill(COULEURS["NOIR"]) afficher_murs() afficher_ATH(self) self.balle.afficher() self.raquette.afficher() self.niveau.afficher() def game_over(self): screen.fill(COULEURS["NOIR"]) if jeu.vie == 0 : texte, rect = myfont.render("GAME OVER", (255,255,255), size = monitorwidth/15) else : texte, rect = myfont.render("GAME WIN", (255,255,255), size = monitorwidth/15) rect.center = (int(width/2), int(height/2)) screen.blit(texte, rect) texte, rect = myfont.render("SCORE : " + str(self.score), (255,255,255), size = monitorwidth/38) rect.midtop = (int(width/2), int(height/5*3)) screen.blit(texte, rect) texte, rect = myfont.render("NIVEAU : " + str(self.niveau.en_cours-1), (255,255,255), size = monitorwidth/38) rect.midbottom = (int(width/2), int(height/5*2)) screen.blit(texte, rect) self.en_jeu = False
"C:/Users/jean-/AppData/Local/Programs/Python/Python38-32/pcproject/image/deportes.png" ) balle = pygame.image.load( "C:/Users/jean-/AppData/Local/Programs/Python/Python38-32/pcproject/image/tenis.png" ) clock = pygame.time.Clock() #pour avoir l'objet tick gris = (128, 128, 128) noir = (0, 0, 0) tentatives = 0 tentative_max = 10 dessin = pygame.image.load( "C:/Users/jean-/AppData/Local/Programs/Python/Python38-32/pcproject/image/sports-and-competition.png" ) dessin = pygame.transform.scale(dessin, (50, 50)) raquette = Raquette(largeur, hauteur) bal = Balle(largeur, hauteur, raquette) largeur_barre = bal.tentatives ballegroup = pygame.sprite.Group() ballegroup.add(Balle(largeur, hauteur, raquette)) def printtentatives(): pygame.display.init() if bal.rect.y >= 460: bal.tentatives -= 1 if bal.tentatives == 0: ecran.blit(bal.over_text, (255, 255)) pygame.quit() elif bal.tentatives == bal.tentatives_max: