Bonjour a toutes et a tous,
J’ai du mal a comprendre quelque chose dans ce code que j’ai récupéré: qu’est ce qui fait que les animations du jeux sont «gelées» lorsque Je clique le bouton Pause .

J’ai éssayé de simplifier ce code , pas sur que ce soit claire .
J’ai dabord dans mon fichier main.py:

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
def start():
    pygame.init()
 
 
    game = True
    menu = True
    run = False
 
    while game:
 
        while menu:
            number = men.menu(win)
            if number == 0:
                menu = False
                game = False
            elif number == 1:
                run = True
                menu = False
 
 
        while run:
            num = gamerun.run(win, org_win)  
            if num == 0:
                run = False
                game = False
            if num == 1:
                run = False
                menu = True
 
 
if __name__ == '__main__':
    start()
Ensuite dans mon fichier gamerun.py:
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
battleship = Spaceship('spaceship1_', 250, 120)  # instance héro
 
aliens = []
aliens2 = []
alien3 = []
stars = []
enemyspaceships = []
 
 
def run(win):
 
    redrawGameWindow(win)
 
    if battleship.health <= 0:
        if not ru:          #initialisé a True en début de fichier
            go = gameover(win)
            if go == 0 or go == 1:  
                ru = True
                return go  
        ru = False
 
    if len(aliens) == 0 and len(enemyspaceships) == 0 and len(aliens2) == 0 and len(alien3) == 0:
        generateLevel(win)       #fonction qui permet l’avancement dans les différents niveau
 
        redrawGameWindow(win)     #affiche tous les éléments graphiques 
 
    keys = pygame.key.get_pressed()
    if pausebutton or keys[pygame.K_ESCAPE]:
        pausebutton = False
        pau = True
        while pau:
            g = pause(win)
            if g == 1:
                pau = False
            elif g == 0:
                pau = False
                return 1
 
 
    pygame.display.update()
La fonction redrawGameWindow() affiche tout ce qu’il y a a l’ecran .

La fonction gameover() dans l’intégralité :

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
137
138
139
140
141
def gameover(win):
    global alienkills
    global spaceshipkills
    global totaltestseconds
    global level
    global levelcounter
    global aliens
    global alien3
    global aliens2
    global lasers
    global enemyspaceships
    global enemylasers
    global timee
 
    pygame.mixer.music.stop()
    helplevel = level
 
    ptime = calculateTime()
    if int(ptime[1]) < 10:
        timee = ptime[0] + ':0' + ptime[1]
    else:
        timee = ptime[0] + ':' + ptime[1]
 
    if helplevel > s.readlevel():
        s.save(helplevel, alienkills, spaceshipkills, timee, totaltestseconds)
        highscoreloop = True
        hslo = 0
        ybutton = 370
    elif helplevel == s.readlevel() and totaltestseconds > s.readseconds():
        s.save(helplevel, alienkills, spaceshipkills, timee, totaltestseconds)
        highscoreloop = True
        hslo = 0
        ybutton = 370
    else:
        highscoreloop = False
        ybutton = 350
 
    f = True
    g = True
    h = True
    i = True
    j = True
    k = True
    l = True
    m = True
    n = True
 
    while f:
        try:
            aliens.pop()
        except:
            f = False
    while i:
        try:
            aliens2.pop()
        except:
            i = False
    while j:
        try:
            alien3.pop()
        except:
            j = False
    while k:
        try:
            enemyspaceships.pop()
        except:
            k = False
 
    while g:
        try:
            lasers.pop()
        except:
            g = False
    while h:
        try:
            enemylasers.pop()
        except:
            h = False
    while l:
        try:
            aliens2_lasers.pop()
        except:
            l = False
    while m:
        try:
            aliens2_lasers2.pop()
        except:
            m = False
    while n:
        try:
            alien3_lasers.pop()
        except:
            n = False
 
    gaov = True
    while gaov:
        clock.tick(30)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                ptime = calculateTime()
                if int(ptime[1]) < 10:
                    timee = ptime[0] + ':0' + ptime[1]
                else:
                    timee = ptime[0] + ':' + ptime[1]
                return 0
        pygame.draw.rect(win, yellow, (50, 75, 600, 400))  # cadre resultat final
        pygame.draw.rect(win, black, (60, 85, 580, 380))
 
        gameoverfont = pygame.font.Font(set.font, 50)
        text = gameoverfont.render('Game Over!', 1, yellow)
        win.blit(text, (350 - round(text.get_width() / 2), 80))
 
        statfont = pygame.font.Font(set.font, 30)
        text = statfont.render('Level: ' + str(helplevel), 1, white)
        win.blit(text, (350 - round(text.get_width() / 2), 160))
 
        text = statfont.render('Aliens killed: ' + str(alienkills), 1, white)
        win.blit(text, (350 - round(text.get_width() / 2), 190))
 
        text = statfont.render('Enemy spaceships destroyed: ' + str(spaceshipkills), 1, white)
        win.blit(text, (350 - round(text.get_width() / 2), 220))
 
        if highscoreloop:  # si True : nouveau score
            hslo += 1  # la boucle hslo va permettre l'affichage par intermitence de
            # 'New Highscore!'
            if hslo < 15:
                highfont = pygame.font.Font(set.font, 40)
                text = highfont.render('New Highscore!', 1, yellow)
                win.blit(text, (350 - round(text.get_width() / 2), 290))
            elif hslo == 30:
                hslo = 0
 
        text = statfont.render('Survived time: ' + timee, 1, white)
        win.blit(text, (350 - round(text.get_width() / 2), 250))
 
        exbutton = t.button(win, 'Main Menu', 250, ybutton, 200, 50, yellow, black, yellow)
        if exbutton:
            reset()
            return 1
 
        pygame.display.update()
Et la fonction pause() dans l’intégralité:

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
def pause(win):
    global timee
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            ptime = calculateTime()
            if int(ptime[1]) < 10:
                timee = ptime[0] + ':0' + ptime[1]
            else:
                timee = ptime[0] + ':' + ptime[1]
            return 0
 
    pygame.draw.rect(win, green, (150, 115, 600, 380))
    pygame.draw.rect(win, black, (160, 125, 580, 360))
 
    paufont = pygame.font.Font(set.font, 50)
    text = paufont.render('Pause', 1, green)
    win.blit(text, (350 - round(text.get_width() / 2), 150))
 
    notefont = pygame.font.Font(set.font, 30)
    text = notefont.render('NOTE: if you quit, you can go back to the current', 1, green)
    win.blit(text, (180, 340))
    text = notefont.render('save by just starting the game via the main menu.', 1, green)
    win.blit(text, (180, 360))
    text = notefont.render('If you close the whole game with an unfinished save,', 1, green)
    win.blit(text, (180, 380))
    text = notefont.render('it will be saved regularly but you wont be able to', 1, green)
    win.blit(text, (180, 400))
    text = notefont.render('finish it.', 1, green)
    win.blit(text, (180, 420))
 
    resumebutton = t.button(win, 'Reprise', 250, 200, 200, 50, green, black, green)
    if resumebutton:  # si clique sur resumebutton
        return 1
 
    quitbutton = t.button(win, 'Quit', 250, 260, 200, 50, green, black, green)
    if quitbutton:  # si clique sur quitbutton
        ptime = calculateTime()
        if int(ptime[1]) < 10:
            timee = ptime[0] + ':0' + ptime[1]
        else:
            timee = ptime[0] + ':' + ptime[1]
        return 0
 
    pygame.display.update()
En espérant que vous puissiez m’aider , je vous remercie de votre aide .