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()
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
× 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.
Copié collé d'