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


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Futur Membre du Club
    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é
    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
    Futur Membre du Club
    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é
    laps c'est une temporisation que j'ai ajouté pour visualiser le moment où tu fais pause.

  5. #5
    Futur Membre du Club
    d'accord merci beaucoup je test ça dès que possible ^^

  6. #6
    Futur Membre du Club
    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
    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
    Futur Membre du Club
    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é
    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
    Futur Membre du Club
    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é
    Faudrait pouvoir télécharger un .zip du projet, c'est plus facile quand on peut tester avec les images, toussa...

  12. #12
    Futur Membre du Club
    on peut mettre un fichier en téléchargement sur le forum? comment faire?

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

    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.

###raw>template_hook.ano_emploi###