Score qui ne s'affiche pas !

Résolu
Alexouz Messages postés 88 Statut Membre -  
Alexouz Messages postés 88 Statut Membre -
Bonjour a tous, j'ai petit problème
actuellement je crée un jeux et en utilisant les Sysfonts etc... mon score s'affiche pas mais par contre il affiche dans le terminal.

self.score_1 = 0
self.Score_J1 = self.font.render(f"{self.score_1}" ,True , self.ColorFont)


if self.balle.Rect.colliderect(self.Bord_1.Rect):
                self.balle = balle(450, 250, [20, 20], random.choice(self.balle_direction))
                self.balle_tire = False
                self.score_1 += 1
                print(self.scoreun)


ignorez les rect,balle etc.. car c'est bon il y a juste le score.

5 réponses

  1. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Bonjour,

    "mon score s'affiche pas mais par contre il affiche dans le terminal."

    tu veux dire que tu as une interface graphique et que le score ne s'y affiche pas ?

    normal: print, c'est pour afficher sur le terminal ...
    0
  2. Alexouz Messages postés 88 Statut Membre 3
     
    Oui print c'est fait pour ça mais je l'ai fais pour voir si le score marche mais par contre il n'affiche pas dans le jeu
    0
    1. vortex
       
      Bonjour,

      self.Score_J1
      est donc une surface pygame, et comme toute surface elle doit être blit sur l'écran pour être affichée.
      0
      1. Alexouz Messages postés 88 Statut Membre 3 > vortex
         
        Je l'ai fais mais rien

        self.screen.blit(self.Score_J1, [200, 10])
        
        0
  3. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Je ne vois pas l'instruction dans ton code qui permet d'afficher dans le jeu .....
    0
    1. Alexouz Messages postés 88 Statut Membre 3
       
      self.screen.blit(self.Score_J1, [200, 10])
      

      mais ça n'affiche rien malheureusement
      0
    2. vortex > Alexouz Messages postés 88 Statut Membre
       
      Soit tu ne fais pas ton update/flip après le blit de ton score, soit tu affiches quelque chose par dessus ton score.

      Et si ce n'est pas ça, il faut montrer la partie de ton code où cela se passe.
      0
    3. Alexouz Messages postés 88 Statut Membre 3 > vortex
       
                  colorbg = (50, 50, 50)
                  self.screen.fill(colorbg)
                  self.screen.blit(self.Victoire_1, [290, 80])
                  self.screen.blit(self.Menu, [150, 210])
                  self.screen.blit(self.choix, [250, 180])
                  self.screen.blit(self.YN, [420, 300])
                  self.screen.blit(self.Victoire_2, [290, 40])
                  self.screen.blit(self.Score_J1, [200, 10])
                  self.screen.blit(self.Score_J2, [650, 10])
      
                  
                  self.balle.afficher(self.screen)
                  self.Joueur_1.afficher(self.screen)
                  self.Joueur_2.afficher(self.screen)
                  self.Bord_1.afficher(self.screen)
                  self.Bord_2.afficher(self.screen)
                  self.Bordtop.afficher(self.screen)
                  self.Bordbottom.afficher(self.screen)
      
                  pygame.display.flip()
      


      Toujours rien
      0
    4. vortex > Alexouz Messages postés 88 Statut Membre
       
      Tout est affiché correctement sauf Score_J1 ?

      Que fait la méthode afficher ?
      La couleur du texte est bien différente de celle de l'écran ?
      As-tu essayé de blit Score_J1 en dernier ? Idem avec
      self.Joueur_1.afficher(self.screen)
      .
      As-tu essayé aussi de mettre un background à ton texte ?
      0
    5. Alexouz Messages postés 88 Statut Membre 3 > vortex
       
      La couleur est différente oui et j'ai essayé et non ça change pas le 0
      0
  4. Alexouz Messages postés 88 Statut Membre 3
     
    Je vous envoie tous ?
    0
    1. vortex
       
      Si ton code n'est pas trop long, oui, sinon poste seulement là où tu fais un appel à ta focntion d'incrémentation et également cette fonction d'incrémentation, enfin là où ton code est concerné par ça =)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alexouz Messages postés 88 Statut Membre 3
     
    import random
    import pygame
    import sys
    import math
    
    from pygame.draw import rect
    from bordure import Bordure 
    from Joueur_1 import Joueur
    from balle import balle
    
    pygame.init()
    
    class Game:
        def __init__(self):
    
            self.res = (900, 600)
            self.screen = pygame.display.set_mode(self.res)
            pygame.display.set_caption('Pong - By Gamaxi')
            self.running = 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.Rectscreen = pygame.Rect(0, 0, 900, 600)
            self.balle_direction = [-1, 1]
            self.balle = balle(450, 250, [20, 20], random.choice(self.balle_direction))
            self.balle_tire = False
            self.balle_vitesse_x, self.balle_vitesse_y = 1, 0.9
            self.Bord_1 = Bordure(0, 0, [10, 1000])
            self.Bord_2 = Bordure(890, 0, [10, 1000])
            self.Bordtop = Bordure(0 , 0, [1000, 1])
            self.Bordbottom = Bordure(0 , 599, [1000, 1])
            self.scoreun, self.scoredeux = 0, 0
            self.ColorFont = (255, 255, 255)
            self.ColorESCAPE = (0, 0, 0)
            self.font = pygame.font.SysFont('Arial', 100)
            self.fontmenu = pygame.font.SysFont('Terminal', 50)
            self.Score_J1 = self.font.render(f"{self.scoreun}" ,True , self.ColorFont)
            self.Score_J2 = self.font.render(str(self.scoredeux) ,True , self.ColorFont)
            self.choix = self.fontmenu.render("Êtes vous sûr de quitter ?",True , (50, 50, 50))
            self.YN = self.fontmenu.render("Y/N ?",True , (50, 50, 50))
            self.Menu = self.fontmenu.render("Appuyer sur espace pour commencer !", True , self.ColorFont)
            self.Victoire_1 = self.fontmenu.render("Victoire du joueur 1 !", True, (50, 50, 50))
            self.Victoire_2 = self.fontmenu.render("Victoire du joueur 2 !", True, (50, 50, 50))
    
    
            self.start()
    
        def start(self):
            while self.running:
                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_2 = -1
                        if event.key == pygame.K_DOWN:
                            self.vitesse_y_2 = 1
    
                        if event.key == pygame.K_a:
                            self.vitesse_y_1 = -1
                        if event.key == pygame.K_w:
                            self.vitesse_y_1 = 1
    
                        if event.key == pygame.K_SPACE:
                            self.balle = balle(450, 250, [20, 20], random.choice(self.balle_direction))
                            self.Menu = self.fontmenu.render("Appuyer sur espace pour commencer !", True , (50, 50, 50))
                            self.balle_tire = True
    
                        if event.key == pygame.K_ESCAPE:
                            self.choix = self.fontmenu.render("Êtes vous sûr de quitter ?",True , self.ColorESCAPE)
                            self.YN = self.fontmenu.render("Y/N ?",True , self.ColorESCAPE)
                        if event.key == pygame.K_y:
                            self.running = False
                        if event.key == pygame.K_n:
                            self.choix = self.fontmenu.render("Êtes vous sûr de quitter ?",True , (50, 50, 50))
                            self.YN = self.fontmenu.render("Y/N ?",True , (50, 50, 50))
    
    
                    if event.type == pygame.KEYUP:
                        self.vitesse_y_2 = 0
                        self.vitesse_y_1 = 0
    
                self.Joueur_1.mouvement(self.vitesse_y_1)
                self.Joueur_2.mouvement(self.vitesse_y_2)
                self.Joueur_1.Rectt.clamp_ip(self.Rectscreen)
                self.Joueur_2.Rectt.clamp_ip(self.Rectscreen)
                self.balle.Rect.clamp_ip(self.Rectscreen)
    
                if self.balle_tire:
                    self.balle.mouvement(self.balle_vitesse_x, self.balle_vitesse_y)
    
                if self.Joueur_1.Rectt.colliderect(self.balle.Rect) or self.Joueur_2.Rectt.colliderect(self.balle.Rect):
                    self.balle_vitesse_x = self.change_direction(self.balle_vitesse_x, 0)
                    self.balle_vitesse_y = self.change_direction(self.balle_vitesse_y, 60)
    
                if self.balle.Rect.colliderect(self.Bordbottom.Rect) or self.balle.Rect.colliderect(self.Bordtop.Rect):
                    self.balle_vitesse_y = self.change_direction(self.balle_vitesse_y, 0)
    
                if self.balle.Rect.colliderect(self.Bord_1.Rect):
                    self.balle = balle(450, 250, [20, 20], random.choice(self.balle_direction))
                    self.balle_tire = False
                    self.scoreun += 1
                    print(self.scoreun)
    
                if self.balle.Rect.colliderect(self.Bord_2.Rect):
                    self.balle = balle(450, 250, [20, 20], random.choice(self.balle_direction))
                    self.balle_tire = False 
                    self.scoredeux += 1
                    print(self.scoredeux)
    
                if self.scoreun == 3:
                    self.Victoire_1 = self.fontmenu.render("Victoire du joueur 1 !", True, self.ColorFont)
    
                if self.scoredeux == 3:
                    self.Victoire_2 = self.fontmenu.render("Victoire du joueur 2 !", True, self.ColorFont)
    
    
                colorbg = (50, 50, 50)
                self.screen.fill(colorbg)
                self.screen.blit(self.Victoire_1, [290, 80])
                self.screen.blit(self.Menu, [150, 210])
                self.screen.blit(self.choix, [250, 180])
                self.screen.blit(self.YN, [420, 300])
                self.screen.blit(self.Victoire_2, [290, 40])
                self.screen.blit(self.Score_J1, [200, 10])
                self.screen.blit(self.Score_J2, [650, 10])
    
                
                self.balle.afficher(self.screen)
                self.Joueur_1.afficher(self.screen)
                self.Joueur_2.afficher(self.screen)
                self.Bord_1.afficher(self.screen)
                self.Bord_2.afficher(self.screen)
                self.Bordtop.afficher(self.screen)
                self.Bordbottom.afficher(self.screen)
    
                pygame.display.update()
    
        def change_direction(self, vitesse, angle):
            vitesse = - (vitesse * math.cos(angle))
            return vitesse
    
    
    if __name__ == '__main__':
        pygame.init()
        Game().start()
        pygame.quit()
    
    


    Après le reste c'est des class dans d'autres fichier
    0
    1. vortex
       
      Bonjour,

      Ben oui, tu ne mets pas à jour ta surface, dès l'instant où tu changes le contenu d'une surface tu dois forcément la mettre à jour elle-même et aussi sur l'écran.

      Il vaut mieux tester sur un exemple simple pour comprendre.

      import pygame
      
      def score_draw(screen, score):
          score_surf = font.render(str(score), True, (255,)*3)
          return screen.blit(score_surf, (150, 50))
      
      pygame.init()
      score = 0
      screen = pygame.display.set_mode((400, 200))
      font = pygame.font.SysFont('Arial', 100)
      pygame.display.update(score_draw(screen, score))
      clock = pygame.time.Clock()
      running = True
      while running:
          clock.tick(15)
          for evt in pygame.event.get():
              if evt.type == pygame.QUIT:
                  running = False
              elif evt.type == pygame.KEYDOWN:
                  if evt.key == pygame.K_UP:
                      score += 1
                      screen.fill((0,)*3)
                      score_rect = score_draw(screen, score)
                      pygame.display.update(score_rect)
      
      pygame.quit()
      


      Dans ton code, il faudrait quand même voir à utiliser des elif et else plutôt qu'une série de if ainsi que penser ton code un peu plus objet que ta classe fourre-tout Game.
      0
    2. Alexouz Messages postés 88 Statut Membre 3 > vortex
       
      J'ai essayé votre solution mais cela ne marche pas.
      ça me met:
      Score n'est pas attribué a score_1
      mais je pense que c'est parce que il supporte que les charactères
      0
    3. vortex > Alexouz Messages postés 88 Statut Membre
       
      Tout ce que tu as à faire dans ton code pour que ça fonctionne est de recréer ta nouvelle surface juste après ton
      self.scoreun += 1
      .

      if self.balle.Rect.colliderect(self.Bord_1.Rect):
          self.balle = balle(450, 250, [20, 20], random.choice(self.balle_direction))
          self.balle_tire = False
          self.scoreun += 1
          self.Score_J1 = self.font.render(str(self.scoreun), True, self.ColorFont)


      Idem pour self.scoredeux, je pense que tu cherches un truc trop compliqué alors que c'est plus que simple.
      0
    4. Alexouz Messages postés 88 Statut Membre 3 > vortex
       
      C'est vrai je cherche trop compliqué en tous cas je te remercie, tu es un génie, tu as sauvé mon jeu !
      0
    5. Alexouz Messages postés 88 Statut Membre 3 > Alexouz Messages postés 88 Statut Membre
       
      Je te remercie infiniment pour ta patiente et de ta présence !
      0