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
class Jeu: def __init__(self): self.ecran = pygame.display.set_mode((900, 500)) pygame.display.set_caption('Jeu Pong') self.jeu_encours = True self.joueur_1_x, self.joueur_1_y = 20, 250 self.joueur_2_x, self.joueur_2_y = 860, 250 self.joueur_taille = [20, 80] self.vitesse_y_1, self.vitesse_y_2 = 0, 0 self.joueur_1 = Joueur(self.joueur_1_x, self.joueur_1_y, self.joueur_taille) self.joueur_2 = Joueur(self.joueur_2_x, self.joueur_2_y, self.joueur_taille) self.rect = pygame.Rect(0, 0, 900, 500) self.balle_direction = [-1, 1] self.balle = Balle(450, 250, [10, 10], random.choice(self.balle_direction)) self.balle_tire = False self.balle_vitesse_x, self.balle_vitesse_y = 15, 2 self.score_1, self.score_2 = 0, 0 def boucle_principale(self): while self.jeu_encours: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: self.vitesse_y_1 = -10 if event.key == pygame.K_DOWN: self.vitesse_y_1 = 10 if event.key == pygame.K_w: self.vitesse_y_2 = -10 if event.key == pygame.K_s: self.vitesse_y_2 = 10 if event.key == pygame.K_SPACE: self.balle_tire = True if event.type == pygame.KEYUP: if event.key == pygame.K_UP: self.vitesse_y_1 = 0 if event.key == pygame.K_DOWN: self.vitesse_y_1 = 0 if event.key == pygame.K_w: self.vitesse_y_2 = 0 if event.key == pygame.K_s: self.vitesse_y_2 = 0 self.joueur_1.mouvement(self.vitesse_y_1) self.joueur_2.mouvement(self.vitesse_y_2) self.joueur_1.rect.clamp_ip(self.rect) self.joueur_2.rect.clamp_ip(self.rect) if self.balle_tire: self.balle.mouvement(self.balle_vitesse_x, self.balle_vitesse_y) if self.joueur_1.rect.colliderect( self.balle.rect) or self.joueur_2.rect.colliderect( self.balle.rect): self.balle_vitesse_x = self.changement_direction_balle( self.balle_vitesse_x, 0) self.balle_vitesse_y = self.changement_direction_balle( self.balle_vitesse_y, 60) self.balle.vitesse_aleatoire_y = random.randint(1, 7) if self.balle.rect.top <= 0 or self.balle.rect.bottom >= 500: self.balle_vitesse_y = self.changement_direction_balle( self.balle_vitesse_y, 0) if self.balle.rect.right >= 915: self.balle.rect.x, self.balle.rect.y = 450, 250 self.score_1 += 1 self.balle_tire = False if self.balle.rect.left <= -15: self.balle.rect.x, self.balle.rect.y = 450, 250 self.score_2 += 1 self.balle_tire = False self.balle.rect.clamp_ip(self.rect) self.ecran.fill((50, 50, 50)) self.creer_message('grande', f"Jeu Pong", [300, 50, 20, 20], (255, 255, 255)) self.creer_message('grande', f" { self.score_1 }", [300, 200, 50, 50], (255, 255, 255)) self.creer_message('grande', f" { self.score_2 }", [485, 200, 50, 50], (255, 255, 255)) if self.balle_tire is False: self.creer_message( 'petite', f" Appuyer Sur Espace Pour Commencer Le Jeu", [30, 100, 300, 50], (255, 255, 255)) self.balle.afficher(self.ecran) self.joueur_1.afficher(self.ecran) self.joueur_2.afficher(self.ecran) pygame.display.flip() def changement_direction_balle(self, vitesse, angle): vitesse = -(vitesse * math.cos(angle)) return vitesse def creer_message(self, font, message, message_rectangle, couleur): if font == 'petite': font = pygame.font.Font( '/Users/karimsadiki/Desktop/Pong Game/ATARCC__.TTF', 20) if font == 'moyenne': font = pygame.font.Font( '/Users/karimsadiki/Desktop/Pong Game/ATARCC__.TTF', 30) if font == 'grande': font = pygame.font.Font( '/Users/karimsadiki/Desktop/Pong Game/ATARCC__.TTF', 40) message = font.render(message, True, couleur) self.ecran.blit(message, message_rectangle)