Bonjour,
Voici ce que j'aimerais faire ;
J'ai fini le TP du jeu Donkey Kong, du chapitre Pygame, et je voudrais l'améliorer, par exemple en y rajoutant des animations faites à partir de boucles whiles, de time.sleep() et de sprites.
Voyez par exemple cet écran d'accueil, je voudrais faire une animation des flèches pour la sélection du niveau, qui s'écartent et se rapprochent toutes les 0,5 secondes.
Mais je voudrais que Pygame continue à recevoir les événements (donc celui où la touche "Entrée" est appuyée), pendant qu'il fasse l'animation des flèches, que je fais donc grâce à des boucles while. Des idées ? Merci d'avance !(Une fois terminé je mettrais le projet sur Github pour ceux qui veulent jouer ou regarder le code)
Pour mieux comprendre ce que je recherche à faire, vous pouvez aussi imaginer un timer, qui s'incrémente en même temps qu'on joue.
La boucle du menu :
(J'ai un peu tout commenté pour mieux comprendre)
La classe Game :
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 import pygame import constants import classes from pygame import * from constants import * pygame.init() pygame.display.set_icon(icon) #D'ailleurs l'icône ne veut pas s'afficher et je ne comprends absolument pas pourquoi pygame.display.set_caption("DK's Maze !") window = pygame.display.set_mode(size) Game = classes.Game(window) Game.home() #Affichage du menu pygame.key.set_repeat(400, 30) #On permet la répétition de touches, si on reste appuyé dessus run = 1 ingame = 0 level = 1 while run: while ingame == 0: pygame.time.Clock().tick(30) #On évite de surchauffer le processeur Game.select(level) for event in pygame.event.get(): if event.type == QUIT: run = 0 if event.type == KEYDOWN: if event.key == K_RETURN: #Si l'on séléctionne un niveau, on fait une instance de Donkey et on initialise le niveau Donkey = classes.Donkey(window, level) Game.initlevel(level) pos_donkey = [0, 0] home = 0 ingame = 1 Game.level() if event.key == K_DOWN or event.key == K_UP: #On bouge les flèches si l'on appuie sur la touche Bas ou Haut if level == 1: level = 2 else: level = 1 if event.key == K_ESCAPE: exit()
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 import pygame import constants from pygame import * from constants import * from time import sleep pygame.init() class Game: def __init__(self, window): self.lines = [] self.window = window def home(self): #Affiche le menu self.window.blit(home, (0, 0)) pygame.display.flip() def select(self, level): #On déplace les flèches en fonction de la touche appuyée (Haut / Bas) if level == 1: self.home() self.window.blit(select1, (0, 0)) #select1 = Flèches écartées sur le choix du niveau 1 sleep(0.5) self.window.blit(select1b, (0, 0)) #select1b = Flèches rapprochées sur le choix du niveau 1 if level == 2: self.home() self.window.blit(select2, (0, 0)) #select2 = Flèches écartées sur le choix du niveau 2 sleep(0.5) self.window.blit(select2b, (0, 0)) #select2b = Flèches rapprochées sur le choix du niveau 2 pygame.display.flip() def initlevel(self, level): #On lit les lignes du fichier de niveau en fonction du niveau choisi, pour les réutiliser après name = "levels/lev" + str(level) with open(name, "r") as file: self.lines = file.readlines() file.close() self.dkstart = True return self.lines def level(self): #On affiche le niveau grâce aux lignes du fichier de niveau self.window.blit(background, (0, 0)) y = 0 for line in self.lines: x = 0 for chara in line: if chara == "d": self.window.blit(start, (x, y)) if chara == "w": self.window.blit(brick, (x, y)) if chara == "a": self.window.blit(end, (x, y)) x += 30 y += 30 if self.dkstart == True: #Permet d'initialiser Donkey Kong sur la case de départ seulement au début self.window.blit(dkdown, (0, 0)) self.dkstart = False pygame.display.flip()
Partager