Bonjour à tous,
Je débute avec Pygame et je rencontre un problème avec le déplacement d'un sprite qui laisse une trace.
Si quelqu'un à une idée ? Je vous remercie.
Avec mon code je vous joins mes 2 images.
Voici mon code :
Ma classe principale jeu.py
Ma classe joueur.pyCode:
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 # Référencement de la librairie from pathlib import Path from turtle import Screen import pygame # Importation des fichiers "joueur" et "mur" que nous avons créés from joueur import Joueur from mur import Mur from labyrinthe import Labyrinthe labyrinthe_tab = [ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 ], [ 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1 ], [ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 ], [ 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1 ], [ 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 ], [ 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1 ], [ 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1 ], [ 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1 ], [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ] # Vitesse de déplacement speed = 64 # Couleur de fond du jeu background_color = (255,255,255) # Initialisation de la librairie pygame.init() # Définition de la résolution de la fenêtre 1280 x 720 ecran = pygame.display.set_mode((1280,720)) # Définition de la couleur de fond de la fenêtre ecran.fill(background_color) # Modifications apportées à la V2 joueur = Joueur() mur = Mur() # Création du groupe de sprites sprites_group = pygame.sprite.Group() sprites_group.add(joueur) # mur a été retiré du groupe # Groupe de sprites du labyrinthe laby_group = pygame.sprite.Group() # Instanciation du labyrinthe labyrinthe = Labyrinthe(labyrinthe_tab, 64, 64) # Initialisation d'un booléen pour la boucle du jeu running = True # Boucle infinie while running : # Capture de la touche ESC pour quitter la boucle du jeu for event in pygame.event.get(): if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE : running = False # Modification de la V4 # Capture des touches de contrôles du joueur keys = pygame.key.get_pressed() if keys[pygame.K_q]: joueur.bouge_gauche(speed) if keys[pygame.K_z]: joueur.bouge_haut(speed) if keys[pygame.K_s]: joueur.bouge_bas(speed) if keys[pygame.K_d]: joueur.bouge_droite(speed) # Lecture et affichage du labyrinthe labyrinthe.lire_et_affichage(laby_group) laby_group.draw(ecran) # Les opérations opérées sur les objets du jeu sprites_group.update() # Affichages des objets du groupe sprites sprites_group.draw(ecran) # Mise à jour de l'affichage pygame.display.flip() # Sortie du programme pygame.quit()
Ma classe labyrinthe.pyCode:
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 from typing import Any import pygame from pathlib import Path class Joueur(pygame.sprite.Sprite): def __init__(self): # Mon dossier de travail dirLocal = Path(__file__).absolute().parent pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load(dirLocal / 'images/joueur.png').convert_alpha() self.rect = self.image.get_rect() self.rect.x = 512 self.rect.y = 512 def update(self) : pass # Déplacement vers la gauche def bouge_gauche(self, speed): self.rect.x -= speed # Déplacement vers la droite def bouge_droite(self, speed): self.rect.x += speed # Déplacement vers le haut def bouge_haut(self, speed): self.rect.y -= speed # Déplacement vers le bas def bouge_bas(self, speed): self.rect.y += speed
Et ma classe mur.pyCode:
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 from mur import Mur class Labyrinthe(): # Constructeur de la classe Labyrinthe # Les paramètres attendus sont : # La structure du labyrinthe # La largeur et la hauteur d'un bloc du mur def __init__(self, labyrinthe_struct, cell_largeur, cell_hauteur): self.labyrinthe = labyrinthe_struct self.cell_largeur = cell_largeur self.cell_hauteur = cell_hauteur # Lecture de la structure du labyrinthe et remplacement des 1 par des blocs de mur def lire_et_affichage(self, groupe_sprite_mur): x_pos = 0 y_pos = 0 # La variable y correspond à chaque ligne de la structure du tableau # La variable x correspond à chaque colonne de la structure du tableau for y in range(len(self.labyrinthe)): x_pos = 0 for x in range(len(self.labyrinthe[0])): # Si nous rencontrons un 1 dans notre structure du labyrinthe # Nous créons une instance de l'objet mur if self.labyrinthe[y][x] == 1 : mur = Mur() mur.rect.x = x_pos mur.rect.y = y_pos groupe_sprite_mur.add(mur) x_pos += self.cell_largeur else : x_pos += self.cell_largeur y_pos += self.cell_hauteur
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import pygame from pathlib import Path class Mur(pygame.sprite.Sprite): def __init__(self): # Mon dossier de travail dirLocal = Path(__file__).absolute().parent pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load(dirLocal / 'images/mur.png').convert_alpha() self.rect = self.image.get_rect() self.rect.x = 600 self.rect.y = 300 def update(self) : pass[ATTACH=CONFIG]658307[/ATTACH][ATTACH=CONFIG]658308[/ATTACH]