Question Pygame : mur et collision

Fermé
pokio - 5 mai 2018 à 13:37
yg_be Messages postés 22696 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 avril 2024 - 14 mai 2018 à 19:31
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.

2 réponses

yg_be Messages postés 22696 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 avril 2024 1 471
5 mai 2018 à 16:09
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?
0
Bonjour !

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
0
yg_be Messages postés 22696 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 avril 2024 1 471 > pokio
5 mai 2018 à 16:26
quelle sont la taille et la forme du personnage, quel espace occupe-t'il dans le labyrinthe?
0
La fenêtre fait : 878*504, et la taille d'une case dans le laby est de 25*25

Pour le personnage : rect = pygame.Rect(0,0,21,24)
0
yg_be Messages postés 22696 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 avril 2024 1 471 > pokio
5 mai 2018 à 16:53
alors j'utiliserais une liste murs qui contiendrait tous les rectangles qui forment des murs.
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).
0
mais pour le erctangles du murs, je dois écrire cela? :

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)
0
Bonjour.

Pygame fournit des méthodes pour simplifier les tests de collisions, et cela se fait par l'intermédiaire des sprites.
https://www.pygame.org/docs/ref/sprite.html
0