Question Pygame : mur et collision
pokio
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous, je suis en Terminales Spé ISN, et j'aimerais réaliser un labyrinthe.
Pour cela, nous avons bien évidemment besoin de gérer des murs, obstacles et collisions.
Après un mois de lecture de tutoriels et des heures de vidéos, mon groupe reste bloqué, c'est pour cela que je sollicite votre aide.
Je vous demande donc de nous aider à percer le secret de la collision sur python.
Merci de votre aide.
Pour cela, nous avons bien évidemment besoin de gérer des murs, obstacles et collisions.
Après un mois de lecture de tutoriels et des heures de vidéos, mon groupe reste bloqué, c'est pour cela que je sollicite votre aide.
Je vous demande donc de nous aider à percer le secret de la collision sur python.
Merci de votre aide.
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
moi je dirais qu'une collision se produit quand un élément se déplace vers une position occupée par un autre élément.
le groupe de lecture et de visionnage de vidéos a-t'il déjà une bonne maîtrise de python, a-t'il déjà réalisé des exercices plus simples?
comment le groupe a-t'il choisi de représenter le labyrinthe, les murs et les obstacles?
moi je dirais qu'une collision se produit quand un élément se déplace vers une position occupée par un autre élément.
le groupe de lecture et de visionnage de vidéos a-t'il déjà une bonne maîtrise de python, a-t'il déjà réalisé des exercices plus simples?
comment le groupe a-t'il choisi de représenter le labyrinthe, les murs et les obstacles?
Alors en gros pou l'affichage du fond et des murs, j'ai fais un tableau comme ceci :
niveau=[
[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,1,1,1,1,1,1,1,1,1,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
[1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
[1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
[1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1],
[1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1],
[1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1],
[1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0,1],
[1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,1],
[1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1],
[1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,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,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]]
où 1=mur et 0=fond, et nous avons un personnage entouré d'un rectangle (pour les collisions avec les murs qui sont aussi des rectangles). Sauf que le problème c'est que je ne sais pas comment écrire cela dans le programme. Je sais d'ors et déjà qu'il faut utiliser la formule "rect.collide" si j'ai bien compris
Pour le personnage : rect = pygame.Rect(0,0,21,24)
et, lorsque le personnage se déplace, j'utiliserais personnage.collidelist(murs) pour détecter une collision pendant le déplacement du personnage (pas juste au début et à la fin du déplacement).
def collision_mur():
for i in range(0,20):
for j in range(0,35):
if niveau[i][j]==1:
pygame.Rect(i*25,j*25,25,25)