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

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
 
# 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 joueur.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
 
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
Ma classe labyrinthe.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
 
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
Et ma classe mur.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
 
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]