IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

Menu pause pygame [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2020
    Messages : 22
    Points : 10
    Points
    10
    Par défaut Menu pause pygame
    Bonjour à tous,

    je suis en train de coder un petit jeu et j'aimerais faire un menu pause. J'ai déjà l'image qui me permet d'afficher le menu et sur laquelle je placerai les boutons. Mon soucis est que mon image s'affiche bien mais elle ne reste pas affichée à l'écran... Comment faire?
    voici mon code dans un petit programme fonctionnel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
     
    import os
    import random
    import pygame
    from pygame.locals import *
     
    pygame.init()
     
    os.environ["SDL_VIDEO_WINDOW_POS"] = "0, 28" #positionne la fenêtre sur l'écran d'ordinateur
     
    fenetre = pygame.display.set_mode((1535, 794))
    from bibliotheque.affichage import ecran #importation du module ecran
     
    arriere_plan = pygame.image.load("images/montagne_debut_jeu.jpg").convert() #image fond d'écran
     
    x = 443 #x,y coordonnés d'apparition du personnage
    y = 80
     
    nx = 0 #coordonnées permettant le mouvement. Elles sont à 0 au début
    ny = 0
     
    pex = 500#random.randint(415,1115)
    pey = 350#random.randint(65,750)
    print(pex, pey)
     
    pas_pepite_x = (((int(pex / 57))+1)*57)
    pas_pepite_y = (((int(pey / 57))+1)*57)
    print(type(pas_pepite_x))
    print(type(pas_pepite_y))
    print(pas_pepite_x,pas_pepite_y)
     
    pyrx = 700#random.randint(415,1115)
    pyry = 350#random.randint(65,750)
    print(pyrx,pyry)
     
    pas_pyr_x = (((int(pyrx / 57))+1)*57)
    pas_pyr_y = (((int(pyry / 57))+1)*57)
    print(type(pas_pyr_x))
    print(type(pas_pyr_y))
    print(pas_pyr_x,pas_pyr_y)
     
    personnage = pygame.image.load("images/perso.jpg").convert()
     
    pepite_or = pygame.image.load("images/pepite_d_or.jpg").convert()
    pepite_or_rect = pepite_or.get_rect(topleft =((pas_pepite_x), (pas_pepite_y)))
     
    pyrite = pygame.image.load("images/pyrite.jpg").convert()
    pyrite_rect = pyrite.get_rect(topleft = ((pas_pyr_x), (pas_pyr_y)))
     
    position_perso = personnage.get_rect()#créer un rectangle sur le personnage
    position_perso.center = x , y
     
    terrain = pygame.Surface((770,725)).convert()#surface permettant la création des bordures du terrain
    terrain_rect = terrain.get_rect(topleft =(429,59))
     
    menu = pygame.image.load("images/menu.png").convert()
     
    echap = 1
    jeu = 1
    py = True #boléen pour la pyrite
    while jeu:
        for event in pygame.event.get():       
            if event.type == QUIT:
                jeu = 0
            if event.type == KEYDOWN:
     
                if event.key == K_ESCAPE and echap == 1:
                    fenetre.blit(menu,(560,220))
                    pygame.display.update()
                    echap = 0
                    print("boubou")
     
                if event.key == K_ESCAPE and echap == 0:
                    echap = 1
                    fenetre.blit(arriere_plan,(0,0))
                    fenetre.blit(pepite_or,pepite_or_rect)
                    fenetre.blit(pyrite, pyrite_rect)
                    fenetre.blit(personnage, position_perso)
                    pygame.display.flip()            
     
                if event.key == K_w: #carac == 'z': #si la valeur de la touche est celle de z alors
                    nx = 0 #tu n'avance pas en x mais
                    ny = -57#tu recules en y
                    position_perso = position_perso.move(nx,ny)#variable permettant le mouvemment avec nx et ny
     
                if event.key == K_s:
                    nx = 0
                    ny = 57
                    position_perso = position_perso.move(nx,ny)
     
                if event.key == K_d:
                    nx = 57
                    ny = 0
                    position_perso = position_perso.move(nx,ny)
     
                if event.key == K_a:
                    nx = -57
                    ny = 0
                    position_perso = position_perso.move(nx,ny)
     
                if pepite_or_rect.collidepoint(position_perso.topleft):
                    nx = 0
                    ny = 0
                    print("ok")
                    jeu = 0
     
                if pyrx == pex and pyry == pey:
                    pyrx = random.randint(415,1115)
                    pyry = random.randint(65,750)
                    pas_pyr_x = (((int(pyrx / 57))+1)*57)
                    pas_pyr_y = (((int(pyry / 57))+1)*57)
                    pyrite_rect = pyrite.get_rect(topleft = ((pas_pyr_x), (pas_pyr_y)))
     
                if pyrite_rect.collidepoint(position_perso.topleft) and py == True:
                    pex = random.randint(415,1115)
                    pey = random.randint(65,750)
                    pas_pepite_x = (((int(pex / 57))+1)*57)
                    pas_pepite_y = (((int(pey / 57))+1)*57)
                    pepite_or_rect = pepite_or.get_rect(topleft =((pas_pepite_x), (pas_pepite_y)))
                    print("tout marche")
                    py = False
     
     
                position_perso.clamp_ip(terrain_rect)
                pepite_or_rect.clamp_ip(terrain_rect)
                pyrite_rect.clamp_ip(terrain_rect)
     
            fenetre.blit(arriere_plan,(0,0))
            fenetre.blit(pepite_or,pepite_or_rect)
            fenetre.blit(pyrite, pyrite_rect)
            fenetre.blit(personnage, position_perso)
            pygame.display.flip()
     
     
     
    pygame.quit()
    merci à tous de m'avoir lu

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 954
    Points : 1 212
    Points
    1 212
    Par défaut
    je suppose que la pause c'est avec la touche escape. Quand tu appuies sur escape, tu dois entrer dans une sous-boucle qui attend que tu ré-appuies sur escape.


    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    from pygame import *
     
    scr  = display.set_mode((500,500))
     
    clk  = time.Clock()
    laps = 0
     
    while True:
     
        for ev in event.get():
     
            # pause
            if ev.type == KEYDOWN and ev.key == K_ESCAPE:
                print('en pause')
     
                # sous-boucle unpause
                while True:
                    ev = event.wait()
                    if ev.type == KEYDOWN and ev.key == K_ESCAPE:
                        print('fini la pause')
                        break
     
            # quitter la boucle
            if ev.type == QUIT:
                break
     
        else:
     
            # autres actions
            laps = laps+clk.tick()
            if laps>=200:
                print('do stuff ...')
                laps = 0
            continue
     
        # quitter le programme
        break

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2020
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    D'accord merci pour cette réponse je vais tester ça dès que possible. Par contre à quoi sert laps?

    Disons que je suis encore novice dans le codage même si je commence à m'améliorer il y a encore beaucoup de choses que j'ignore^^

    En tout cas merci pour votre réponse

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 954
    Points : 1 212
    Points
    1 212
    Par défaut
    laps c'est une temporisation que j'ai ajouté pour visualiser le moment où tu fais pause.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2020
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    d'accord merci beaucoup je test ça dès que possible ^^

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2020
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Merci ça à marché.

    Le seul soucis que j'ai eu c'est que vous déclarez ev = event.wait et python n'associe pas event à wait. Il faut en fait marquer pygame.event.wait(). En tout cas mon menu s'affiche et reste affiché quand j'appuis sur échap et disparait quand j'appuis à nouveau dessus. Merci infiniment.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 17 724
    Points : 30 602
    Points
    30 602
    Par défaut
    Citation Envoyé par Goulthard Voir le message
    Il faut en fait marquer pygame.event.wait().
    Dans le code il y a un "from pygame import *" qui permet d'accéder à l'objet event sans avoir à le préfixer par "pygame."

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2020
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Bonjour je suis face à un nouveau soucis.

    Dans mon menu je place un bouton qui me permet de quitter le jeu. Le problème c'est que sois la condition du bouton fonctionne mais la suite du programme n'est pas lue, sois la condition du bouton est pas lue mais le reste du programme fonctionne (ici c'est le fait que le menu échap se retire de l'écran).

    Je suppose que mon problème doit-être lié à un problème de structure mais malgré mes multiples essais, je n'ai pas réussi à régler le problème... Je vous met le code ci-dessous (il est plus léger car il commençait à être lourd pour un programme de test).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    import os
    import pygame
    import random
    from pygame.locals import *
     
    pygame.init()
     
    os.environ["SDL_VIDEO_WINDOW_POS"] = "0, 28" #positionne la fenêtre sur l'écran d'ordinateur
     
    fenetre = pygame.display.set_mode((1535, 794))
    from bibliotheque.affichage import ecran #importation du module ecran
     
    arriere_plan = pygame.image.load("images/montagne_debut_jeu.jpg").convert() #image fond d'écran
     
    x = 443 #x,y coordonnés d'apparition du personnage
    y = 80
     
    nx = 0 #coordonnées permettant le mouvement. Elles sont à 0 au début
    ny = 0
     
    pex = 500#random.randint(415,1115)
    pey = 350#random.randint(65,750)
    print(pex, pey)
     
    pas_pepite_x = (((int(pex / 57))+1)*57)
    pas_pepite_y = (((int(pey / 57))+1)*57)
    print(type(pas_pepite_x))
    print(type(pas_pepite_y))
    print(pas_pepite_x,pas_pepite_y)
     
    pyrx = 700#random.randint(415,1115)
    pyry = 350#random.randint(65,750)
    print(pyrx,pyry)
     
    pas_pyr_x = (((int(pyrx / 57))+1)*57)
    pas_pyr_y = (((int(pyry / 57))+1)*57)
    print(type(pas_pyr_x))
    print(type(pas_pyr_y))
    print(pas_pyr_x,pas_pyr_y)
     
    personnage = pygame.image.load("images/perso.jpg").convert()
     
    pepite_or = pygame.image.load("images/pepite_d_or.jpg").convert()
    pepite_or_rect = pepite_or.get_rect(topleft =((pas_pepite_x), (pas_pepite_y)))
     
    pyrite = pygame.image.load("images/pyrite.jpg").convert()
    pyrite_rect = pyrite.get_rect(topleft = ((pas_pyr_x), (pas_pyr_y)))
     
    position_perso = personnage.get_rect()#créer un rectangle sur le personnage
    position_perso.center = x , y
     
    menu = pygame.image.load("images/menu.png").convert()
     
    fin_jeu = pygame.image.load("images/bouton_quitter_le_jeu.png").convert()
    fin_jeu_rect = fin_jeu.get_rect(topleft = (700,540))
     
    jeu = 1
    test = 1
     
    while jeu:
        for event in pygame.event.get():            
            if event.type == KEYDOWN and event.key == K_ESCAPE:
                fenetre.blit(menu,(560,220))
                fenetre.blit(fin_jeu, fin_jeu_rect)
                pygame.display.update()
                print("en pause")
     
                while test:
                    if event.type == pygame.MOUSEBUTTONDOWN:
                        if fin_jeu_rect.collidepoint(event.pos):
                            print("Je suis le plus beau")
                    else:
                        break
     
                while jeu:
                    ev = pygame.event.wait()
                    if ev.type == KEYDOWN and ev.key == K_ESCAPE:
                        fenetre.blit(arriere_plan,(0,0))
                        fenetre.blit(pepite_or,pepite_or_rect)
                        fenetre.blit(pyrite, pyrite_rect)
                        fenetre.blit(personnage, position_perso)
                        pygame.display.flip()        
                        print("fini la pause")
                        break
     
            if event.type == QUIT:
                jeu = 0
     
     
        fenetre.blit(arriere_plan,(0,0))
        fenetre.blit(pepite_or,pepite_or_rect)
        fenetre.blit(pyrite, pyrite_rect)
        fenetre.blit(personnage, position_perso)
        pygame.display.flip()
     
    pygame.quit()
    merci de votre aide

  9. #9
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 954
    Points : 1 212
    Points
    1 212
    Par défaut
    peut-être comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    while jeu:
        for event in pygame.event.get():            
            if event.type == KEYDOWN and event.key == K_ESCAPE:
                fenetre.blit(menu,(560,220))
                fenetre.blit(fin_jeu, fin_jeu_rect)
                pygame.display.update()
                print("en pause")
     
     
                while jeu:
                    ev = pygame.event.wait()
                    if ev.type == KEYDOWN and ev.key == K_ESCAPE:
                        fenetre.blit(arriere_plan,(0,0))
                        fenetre.blit(pepite_or,pepite_or_rect)
                        fenetre.blit(pyrite, pyrite_rect)
                        fenetre.blit(personnage, position_perso)
                        pygame.display.flip()        
                        print("fini la pause")
                        break
                    if event.type == pygame.MOUSEBUTTONDOWN:
                        if fin_jeu_rect.collidepoint(event.pos):
                            print("Je suis le plus beau")
                            jeu = 0
                            break
     
            if event.type == QUIT:
                jeu = 0
     
     
        fenetre.blit(arriere_plan,(0,0))
        fenetre.blit(pepite_or,pepite_or_rect)
        fenetre.blit(pyrite, pyrite_rect)
        fenetre.blit(personnage, position_perso)
        pygame.display.flip()
     
    pygame.quit()

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2020
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    j'ai appliqué la structure de code que vous m'avez proposé mais ça ne fonctionne pas, je ne vois pas comment faire...

  11. #11
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 954
    Points : 1 212
    Points
    1 212
    Par défaut
    Faudrait pouvoir télécharger un .zip du projet, c'est plus facile quand on peut tester avec les images, toussa...

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2020
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    on peut mettre un fichier en téléchargement sur le forum? comment faire?

  13. #13
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    25 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 25 764
    Points : 201 020
    Points
    201 020
    Billets dans le blog
    82
    Par défaut
    Bonjour,

    En répondant à la discussion et en scrollant en dessous de la zone d'édition de message : bouton "Gérer les pièces jointes" .
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2020
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    Tout d'abord milles excuses pour ne pas avoir donné de nouvelles ni envoyé mon code depuis plus d'un mois. Je suis étudiant en fac et avec le boulot des études + les différents trucs familiaux je n'ai pas du tout codé dans ce laps de temps.

    Toujours est-il que j'ai repris le code il y a de ça 3 jours et que j'ai réussi à régler mon problème après cette grande pause. En fait le problème résidais dans l'implantation de boucles dans d'autres boucles.
    Ma fonction qui créait le menu échape était au niveau 1, la fonction pour quitter le jeu via un bouton était à un niveau 2 (niveau d'identation) et ma fonction pour sortir du menu échape était au niveau 1.

    Pour régler le problème j'ai du juste mettre la sortie du menu au niveau 2 et non au niveau 1 et retirer le break que j'avais mis (il y a pu avoir d'autres modif mais je ne m'en souviens pas de tête). Le problème est donc désormais réglé et je vais passer cette discussion en résolu.

    Je vous remercie tous pour l'aide apporté, de m'avoir consacré du temps, je vous souhaite un joyeux nöel et une bonne année.
    Goulthard

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déplacement Manette inversé sur Menu Pause
    Par Jeje66 dans le forum Unity
    Réponses: 3
    Dernier message: 08/08/2020, 14h44
  2. Problème menu pygame
    Par samsam75 dans le forum Général Python
    Réponses: 3
    Dernier message: 30/05/2017, 20h52
  3. [Unity 5] Curseur sur menu Pause et cinématique
    Par taylor42 dans le forum Unity
    Réponses: 2
    Dernier message: 18/04/2017, 18h00
  4. [Débutant] Faire une pause dans un menu
    Par Chatbour dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 27/06/2008, 11h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo