Partage
  • Partager sur Facebook
  • Partager sur Twitter

gestion des collisions sous pygame

Sujet résolu
    13 mai 2018 à 12:27:32

    Bonjour,

    dans le cadre d'un projet d'isn, j'ai programmer un jeu semblable à Space Invaders. Cependant je suis bloquée au niveau de la gestion de la collision. J'aimerai savoir si il est possible de détecter une collisions entre deux listes. Voici le code de mon jeu.

    Merci de votre aide.

    import pygame
    from pygame.locals import*
    
    
    
    #on crée la fenetre
    
    pygame.init()
    FENETRE_WIDTH, FENETRE_HEIGHT = 700, 600
    fenetre = pygame.display.set_mode((FENETRE_WIDTH, FENETRE_HEIGHT))
    pygame.display.set_caption('projet ISN')
    fond = pygame.image.load("background.jpg")
    pygame.mouse.set_visible(0)
    
    
    
    
    
    sens = 1  #on crée une variable qui va nous permettre de faire bouger les envahisseurs
    
    limite = 600 #on crée un variable qui va servir de limite pour l'envahisseur. elle correspond au bas de la page
    
    ma_police = pygame.font.SysFont("Comic Sans MS",50)
    text = ma_police.render('GAME OVER',1,(0,0,0))
    
    
    #on télécharge et colle les images des invaders
    
    invader = pygame.image.load("invader1.png")
    
    
    
    #on colle les images de invaders dans des rectangles
    invader_rect = invader.get_rect(topleft = (50,50))
    invader2_rect = invader.get_rect(topleft = (150,50))
    invader3_rect = invader.get_rect(topleft = (250,50))
    invader4_rect = invader.get_rect(topleft = (350,50))
    invader5_rect = invader.get_rect(topleft = (450,50))
    invader6_rect = invader.get_rect(topleft = (50,155))
    invader7_rect = invader.get_rect(topleft = (150,155))
    invader8_rect = invader.get_rect(topleft = (250,155))
    invader9_rect = invader.get_rect(topleft = (350,155))
    invader10_rect = invader.get_rect(topleft = (450,155))
    invader11_rect = invader.get_rect(topleft = (50,260))
    invader12_rect = invader.get_rect(topleft = (150,260))
    invader13_rect = invader.get_rect(topleft = (250,260))
    invader14_rect = invader.get_rect(topleft = (350,260))
    invader15_rect = invader.get_rect(topleft = (450,260))
    
    
    invaders = [invader_rect,invader2_rect,invader3_rect,invader4_rect,invader5_rect,invader6_rect,invader7_rect,invader8_rect,invader9_rect,invader10_rect,invader11_rect,invader12_rect,invader13_rect,invader14_rect,invader15_rect]
    
    
    #on crée le ship et on le colle
    
    
    ship = pygame.image.load("Ship.png")
    ship_rect = ship.get_rect()
    ship_rect.midbottom = (FENETRE_WIDTH/2, FENETRE_HEIGHT)
    
    
    
    
    
    #on crée le missile
    
    missile = pygame.image.load("Missile.png")
    premier_missile_rect = missile.get_rect() # Utilisé pour placer des missiles
    missiles = []
    
    #ceci va nous permettre aux envahisseurs de se deplacer
    depla = USEREVENT + 1
    pygame.time.set_timer(depla,10)
    
    
    Clock = pygame.time.Clock()
    continuer=True
    
    
    
    
    #ceci est l'ecriture de la boucle principale
    while continuer:
    
    
        for event in pygame.event.get():
    
            if event.type == QUIT:
                continuer = False
    
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    continuer = False
    
                elif event.key == K_SPACE:
                    #si on appuie sur espace, on ajoute un missile
                    missile_rect = premier_missile_rect.copy()
                    missile_rect.midbottom = ship_rect.midtop
                    missiles.append( missile_rect )
    
    
    
    
            if event.type == depla:       # cette variables va permettre le
                invader_rect = invader_rect.move(sens,0)
                invader2_rect = invader2_rect.move(sens,0)
                invader3_rect = invader3_rect.move(sens,0)
                invader4_rect = invader4_rect.move(sens,0)
                invader5_rect = invader5_rect.move(sens,0)
                invader6_rect = invader6_rect.move(sens,0)
                invader7_rect = invader7_rect.move(sens,0)
                invader8_rect = invader8_rect.move(sens,0)
                invader9_rect = invader9_rect.move(sens,0)
                invader10_rect = invader10_rect.move(sens,0)
                invader11_rect = invader11_rect.move(sens,0)
                invader12_rect = invader12_rect.move(sens,0)
                invader13_rect = invader13_rect.move(sens,0)
                invader14_rect = invader14_rect.move(sens,0)
                invader15_rect = invader15_rect.move(sens,0)
    
    
    
                if invader_rect.right > 290:
                    invader_rect.right == 290
                    sens = -1
                    invader_rect = invader_rect.move(0,invader_rect.height)
                    invader2_rect = invader2_rect.move(0,invader_rect.height)
                    invader3_rect = invader3_rect.move(0,invader_rect.height)
                    invader4_rect = invader4_rect.move(0,invader_rect.height)
                    invader5_rect = invader5_rect.move(0,invader_rect.height)
                    invader6_rect = invader6_rect.move(0,invader_rect.height)
                    invader7_rect = invader7_rect.move(0,invader_rect.height)
                    invader8_rect = invader8_rect.move(0,invader_rect.height)
                    invader9_rect = invader9_rect.move(0,invader_rect.height)
                    invader10_rect = invader10_rect.move(0,invader_rect.height)
                    invader11_rect = invader11_rect.move(0,invader_rect.height)
                    invader12_rect = invader12_rect.move(0,invader_rect.height)
                    invader13_rect = invader13_rect.move(0,invader_rect.height)
                    invader14_rect = invader14_rect.move(0,invader_rect.height)
                    invader15_rect = invader15_rect.move(0,invader_rect.height)
    
    
    
                elif invader_rect.left <= 20:
                    invader_rect.left == 20
                    sens = 1
                    invader_rect = invader_rect.move(0,invader_rect.height)
                    invader2_rect = invader2_rect.move(0,invader_rect.height)
                    invader3_rect = invader3_rect.move(0,invader_rect.height)
                    invader4_rect = invader4_rect.move(0,invader_rect.height)
                    invader5_rect = invader5_rect.move(0,invader_rect.height)
                    invader6_rect = invader6_rect.move(0,invader_rect.height)
                    invader7_rect = invader7_rect.move(0,invader_rect.height)
                    invader8_rect = invader8_rect.move(0,invader_rect.height)
                    invader9_rect = invader9_rect.move(0,invader_rect.height)
                    invader10_rect = invader10_rect.move(0,invader_rect.height)
                    invader11_rect = invader11_rect.move(0,invader_rect.height)
                    invader12_rect = invader12_rect.move(0,invader_rect.height)
                    invader13_rect = invader13_rect.move(0,invader_rect.height)
                    invader14_rect = invader14_rect.move(0,invader_rect.height)
                    invader15_rect = invader15_rect.move(0,invader_rect.height)
    
    
    
        fenetre.blit(invader,invader_rect)
        fenetre.blit(invader,invader2_rect)
        fenetre.blit(invader,invader3_rect)
        fenetre.blit(invader,invader4_rect)
        fenetre.blit(invader,invader5_rect)
        fenetre.blit(invader,invader6_rect)
        fenetre.blit(invader,invader7_rect)
        fenetre.blit(invader,invader8_rect)
        fenetre.blit(invader,invader9_rect)
        fenetre.blit(invader,invader10_rect)
        fenetre.blit(invader,invader11_rect)
        fenetre.blit(invader,invader12_rect)
        fenetre.blit(invader,invader13_rect)
        fenetre.blit(invader,invader14_rect)
        fenetre.blit(invader,invader15_rect)
    
    
    
    
                 #déplacement
        button = pygame.key.get_pressed()
        if button[K_RIGHT]:
           ship_rect = ship_rect.move(10,0)
        if ship_rect.right > 680:
           ship_rect.right = 680
        if button[K_LEFT]:
           ship_rect = ship_rect.move(-10,0)
        if ship_rect.left < 20:
           ship_rect.left = 20
    
    
    
    
    
        for missile_rect in missiles:
            missile_rect.top -= 8
            if missile_rect.top < 0:
                missiles.remove(missile_rect)
    
    
    
    
        for missile_rect in missiles:
            fenetre.blit(missile, missile_rect)
        fenetre.blit(ship,ship_rect)
        pygame.display.flip()
        Clock.tick(50)
        fenetre.blit(fond, (0,0))
    
    pygame.quit()
    • Partager sur Facebook
    • Partager sur Twitter
      14 mai 2018 à 16:00:18

      monpersonnage = pygame.Rect(1, 1, 32, 32)
      monmur = pygame.Rect(50, 50, 32, 32)
      mondeuxiememur = pygame.Rect(100, 100, 32, 32)
       
      # On créé un liste contenant tous les carrés collisionants :
      mescollisions = [monmur, mondeuxiememur]
       
      if monpersonnage.collidelist(mescollisions) == -1:
          #Le personnage ne peut pas bouger ! Il est en collision !
      else:
          # Le personnage peut bouger, il n'est pas en collision
      Copié collé d'ici
      • Partager sur Facebook
      • Partager sur Twitter
      OpenClassrooms retire tellement d'aiguilles de nos pieds qu'on pourrait ne plus trouver le foin de notre botte :)
        23 mai 2018 à 14:28:25

        désolé du retard de la réponse et merci ça marche
        • Partager sur Facebook
        • Partager sur Twitter

        gestion des collisions sous pygame

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown