Problème affichage pygame

Fermé
Alexis - 6 août 2021 à 11:53
 vortex - 6 août 2021 à 19:26
Bonjour, en essayant de faire un programme avec pygame, je me suis rendu compte qu'une partie de mon code ne s'affichait pas. Cela se produit lorsque je souhaite afficher un message d'erreur directement sur la fenêtre. Voici le code:
import random

import pygame
import pygame as pg

def main():

    pg.display.set_caption("Pierre Feuille Ciseaux")
    screen = pg.display.set_mode((640, 480))
    color = pg.Color('lightskyblue3')
    font = pg.font.Font(None,32)
    input_box = pg.Rect(220, 350, 200, 40)
    myfont = pg.font.SysFont('Comic Sans MS', 30)
    textsurface = myfont.render('Some Text', False, (0, 0, 0))
    active = False
    text = ""
    done = False

    while not done:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                done = True
            if event.type == pg.MOUSEBUTTONDOWN:
                #Si l'utilisateur clique sur le rectangle
                if input_box.collidepoint(event.pos):
                    active = not active
                else:
                    active = False
            if event.type == pg.KEYDOWN:
                if active:
                    if event.key == pg.K_RETURN:
                        liste = ["pierre","feuille","ciseaux"]
                        choix = random.randint(0,2)
                        if liste[choix] == text:
                            print("égalité, l'ordinateur a sélectionné: ",liste[choix], "et vous avez décidé de jouer: ", text)
                        elif choix ==  0 and text == 'ciseaux':
                            print("perdu, l'ordinateur a sélectionné: ",liste[choix], "et vous avez décidé de jouer: ", text)
                        elif choix == 0 and text == 'feuille':
                            print("gagné, l'ordinateur a sélectionné: ",liste[choix], "et vous avez décidé de jouer: ", text)
                        elif choix == 1 and text == 'pierre':
                            print("perdu, l'ordinateur a sélectionné: ",liste[choix], "et vous avez décidé de jouer: ", text)
                        elif choix == 1 and text == 'ciseaux':
                            print("gagné, l'ordinateur a sélectionné: ",liste[choix], "et vous avez décidé de jouer: ", text)
                        elif choix == 2 and text=='pierre':
                            print("gagné, l'ordinateur a sélectionné: ",liste[choix], "et vous avez décidé de jouer: ", text)
                        elif choix == 2 and text == 'feuille':
                            print("perdu, l'ordinateur a sélectionné: ",liste[choix], "et vous avez décidé de jouer: ", text)
                        else:
                            print("Tu as fais une erreur !")
                            screen.blit(textsurface, ([https://www.commentcamarche.net/download/telecharger-34055821-20-20 20, 20]))
                            pg.display.flip()
                        text = ''
                    elif event.key == pg.K_BACKSPACE:
                        text = text[:-1]
                    else:
                        text += event.unicode
        
        screen.fill((140, 250, 113))

        Pierre = pg.image.load("Images/Pierre.png")
        screen.blit(Pierre,(50, 50))

        Ciseaux = pg.image.load("Images/Ciseaux.png")
        screen.blit(Ciseaux,(490,50))

        Feuille = pg.image.load("Images/Feuille.png")
        screen.blit(Feuille,(270,220))
        txt_surface = font.render(text, True, color)
        screen.blit(txt_surface, (input_box.x+5, input_box.y+5))
        pg.draw.rect(screen, color, input_box, 2)


        pg.display.flip()


#affichage de la fenêtre

if __name__ == '__main__':
    pg.init()
    main()
    pg.quit()


L'erreur se produit ici:
                        
else:
    print("Tu as fais une erreur !")
    screen.blit(textsurface, (20, 20))
    pg.display.flip()




Configuration: Macintosh / Chrome 92.0.4515.131
A voir également:

6 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
6 août 2021 à 12:55
Bonjour,

Tu as créé une interface graphique avec Pygame

Mais la commande print ne permet d'afficher du texte qu'en mode console

Il faut utiliser screen.blit en passant le texte comme argument

Est-ce que textsurface contient le message d'erreur ?
0
Je fais un screen.blit de textsurface, dans lequel se trouve le message "Some Text" (ligne 14)
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
6 août 2021 à 16:16
Je vois ça, et donc ça affiche les 2 mots "Some text" à l'écran

mais ça n'affiche évidemment pas le message "Tu as fais une erreur !"

comme je te le disais, print affiche en mode console :

0
Lorsque j'essaie, les mots "some text" ne s'affichent pas. Est ce que je peux avoir une capture d'écran de ce que tu vois s'il te plait ?
0

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

Posez votre question
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
6 août 2021 à 18:33
En fait je n'ai pas Pygame, j'utilise tkinter

Mais pour être clair, ta question, c'était bien:

"pourquoi le print("Tu as fais une erreur !") n'affiche rien ?"

C'est ça ou pas ?
0
Non, c'était plus pourquoi "some text" ne s'affiche pas sur la fenêtre. Comment fais-tu pour utiliser tkinter alors que dans mon code j'importe pygame ?
0
Bonsoir,

> c'était plus pourquoi "some text" ne s'affiche pas sur la fenêtre.

C'est affiché, sauf que juste après tu fais
screen.fill((140, 250, 113))
, donc pas le temps de le voir, de toute façon, ton code n'est pas très logique.

Il faut s'arranger à ne faire qu'un seul flip/update dans la boucle.
On ne charge pas des images dans une boucle, on le fait une fois et c'est tout.
0