Bonjour à quiconque qui voudrait bien m'aider à résoudre mon problème . Alors voila je suis entrain de créer un jeu en python avec pygame et j'ai un problème , je n'arrive pas à créer les collisions , je ne comprend pas . Pourtant mon code marche bien , c'est à dire que mes deux éléments fonctionnent bien séparément (mon vaisseaux et les ennemie ce déplacent bien) . Mais je n'arrive pas à créer les collisions pourtant j'ai écumer plein de vidéo et de forum mais je suis bloqué .Je vous donne le code de cette version qui fonctionne , j'ai essayé de mettre une fonction pour détecter les collision mais je n'ai pas réussi . Merci de m'aider et m'expliquer ce qui ne va pas . Je pense que c'est surtout que de un je ne comprend pas comment transformer en .rect mon vaisseaux et de deux comment faire la collision . En premier c'est ma class jeu et mon deuxième ma class qui gère l'ennemie .Je vous met aussi a disposition les images pour tester vous même .

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
 
import pygame
from enemie import Enemie
import random
import time
 
##class Player(pygame.sprite.Sprite):
##    def __init__(self):
##        self.img = pygame.image.load("vaisseaux.png")
####        self.img=pygame.transform.scale(self.img, (75, 50))
##        self.rect_img=self.img.get_rect()
##        self.rect.X=400
##        self.rect.Y=300
##
##    def gauche(self):
##        self.rect.X=self.rect.X-20
##    def droite(self):
##        self.posX=self.posX+20
##    def haut(self):
##        self.posY=self.posY-20
##    def bas(self):
##        self.posY=self.posY+20
 
class jeu:
 
    def __init__(self):
        self.run = True
        self.posX=400
        self.posY=300
        self.img = pygame.image.load("vaisseaux.png")
        self.img=pygame.transform.scale(self.img, (75, 50))
        self.rect_img=self.img.get_rect()
        self.vie=1
        self.surf = pygame.display.set_mode((800,600))
        self.background=pygame.image.load("background2.png")
        self.background=pygame.transform.scale(self.background, (800, 600))
        self.clock=pygame.time.Clock()
        self.all_enemie=pygame.sprite.Group()
        self.pressed={}
        self.jeu=jeu
        self.colision1=self.all_enemie
        colision=[self.colision1]
        self.spawn(random.randint(1,15))
 
    def spawn(self,spipi):
        global enemie
##        self.nb_mob=1
##        for i in range(secs):
##            self.spipi=random.randint(1,15)
##            self.nb_mob+=1
##            time.sleep(secs)
 
##        if secs==1:
        for i in range(spipi):
            enemie=Enemie()
            self.all_enemie.add(enemie)
            spipi=random.randint(1,15)
 
##    def check_colision(self,surface,group):
##        return pygame.sprite.spritecollide(surface,group,False,pygame.sprite.collide_mask)
 
##    def mort(self,surf,group):
##        if self.jeu.check_colision(self,surface,group):
##            print(0)
 
 
    def start_and_end(self):
 
        while self.run :
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.run = False
 
            if event.type==pygame.KEYDOWN:
 
                if event.key == pygame.K_UP:
                    if 0<self.posY<=600:
                        self.posY=self.posY-20
##                        Player.haut()
                elif event.key == pygame.K_DOWN and 0<=self.posY<540:
                        self.posY=self.posY+20
##                        Player.bas()
                elif event.key == pygame.K_LEFT :
                    if 0<self.posX<=800:
                        self.posX=self.posX-20
##                    Player.gauche()
                elif event.key == pygame.K_RIGHT and 0<=self.posX<720:
                    self.posX=self.posX+20
##                    Player.droite()
 
##            if self.nb_mob<=20:
##                self.spawn(1)
##                self.nb_mob-=random.randint(1,5)
 
##            if self.posX.collicelist(colision) and self.posY.collicelist(colision) ==-1:
##                print(0)
            self.surf.blit(self.background,(0,0))
            self.surf.blit(self.img,(self.posX,self.posY))
            self.all_enemie.draw(self.surf)
##            self.mort(self.img,self.all_enemie)
##            print(self.posX)
            for Enemie in self.all_enemie:
                Enemie.mouvmt()
                Enemie.respawn()
 
 
            self.clock.tick(30)
            pygame.display.flip()
 
    def globa(self):
        self.start_and_end()
 
pygame.init()
a=jeu()
a.globa()
pygame.quit()



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
import pygame
import random
class Enemie(pygame.sprite.Sprite):
    def __init__(self):
            super().__init__()
            self.velocity=5
            self.image=pygame.image.load("boule.png")
            self.rect=self.image.get_rect()
            list=[80,120,160,200,240,280,320,360,400,440,480,600,640,680]
            self.rect.x=random.choice(list)
            self.rect.y=-20
            self.bin=random.randint(0,2)
##            self.rect=self.rect.inflate(0,0)
    def mouvmt(self):
        for i in range(1):
            if self.bin==0:
                self.rect.x=(self.rect.x+self.velocity)
            elif self.bin==1:
                self.rect.x= (self.rect.x-self.velocity)
            elif self.bin==2:
                pass
 
        if self.rect.x==-30:
            self.bin=0
        elif self.rect.x==745:
            self.bin=1
 
        self.rect.y=(self.rect.y+self.velocity)
 
    def respawn(self):
        if self.rect.y==600:
            self.rect.y=-20
Nom : vaisseaux.png
Affichages : 842
Taille : 265,0 Ko

Nom : boule.png
Affichages : 757
Taille : 619 octets

Nom : background2.png
Affichages : 757
Taille : 109,3 Ko