Score qui ne s'affiche pas !

Résolu/Fermé
Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022 - Modifié le 23 août 2021 à 17:29
Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022 - 24 août 2021 à 21:04
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

Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 23 août 2021 à 17:34
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
Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022 3
23 août 2021 à 17:36
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
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
Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022 3 > vortex
23 août 2021 à 17:52
Je l'ai fais mais rien

self.screen.blit(self.Score_J1, [200, 10])
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
23 août 2021 à 17:49
Je ne vois pas l'instruction dans ton code qui permet d'afficher dans le jeu .....
0
Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022 3
23 août 2021 à 17:54
self.screen.blit(self.Score_J1, [200, 10])

mais ça n'affiche rien malheureusement
0
vortex > Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022
23 août 2021 à 18:03
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
Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022 3 > vortex
23 août 2021 à 18:14
            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
vortex > Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022
Modifié le 23 août 2021 à 18:27
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
Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022 3 > vortex
23 août 2021 à 18:29
La couleur est différente oui et j'ai essayé et non ça change pas le 0
0
Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022 3
Modifié le 23 août 2021 à 20:49
Je vous envoie tous ?
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022 3
Modifié le 23 août 2021 à 23:13
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
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
Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022 3 > vortex
Modifié le 24 août 2021 à 20:27
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
vortex > Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022
24 août 2021 à 20:46
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
Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022 3 > vortex
24 août 2021 à 20:57
C'est vrai je cherche trop compliqué en tous cas je te remercie, tu es un génie, tu as sauvé mon jeu !
0
Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022 3 > Alexouz Messages postés 84 Date d'inscription samedi 28 novembre 2020 Statut Membre Dernière intervention 17 août 2022
24 août 2021 à 21:01
Je te remercie infiniment pour ta patiente et de ta présence !
0