def explosion(x, y): '''créer une explosion infligeant un dégat aux briques environnantes''' global nbBrique, enleverBrique, briques, vies, type, bonus_contenu, RAYON_EXPLOSION #ca va etre dur a supprimer les briques #car chacune est désignée par un indice #seulement cette indice n'est plus valable #si une des brique a été enlevé # l'indice change explosions = [] #contient des tuples de la forme (x,y) i = 0 for j in range(nbBrique()): #Si un des coins de la brique est dans le rayon de l'explosion alors la brique est touché #distance du centre de l'explosion par rapport au coin supérieure gauche de la brique. r1 = sqrt((x-briques[i][0])**2+(y-briques[i][1])**2) #coin supérieur droit. r2 = sqrt((x-briques[i][0]-briques[i][2])**2+(y-briques[i][1])**2) #coin inférieur gauche. r3 = sqrt((x-briques[i][0])**2+(y-briques[i][1]-briques[i][3])**2) #coin inferieur droit. r4 = sqrt((x-briques[i][0]-briques[i][2])**2+(y-briques[i][1]-briques[i][3])**2) #Si la brique est dans le rayon de l'explosion if r1<RAYON_EXPLOSION or r2<RAYON_EXPLOSION or r3<RAYON_EXPLOSION or r4<RAYON_EXPLOSION: xAnim = briques[i][0]+briques[i][2]//2 yAnim = briques[i][1]+briques[i][3]//2 if type[i] == "indestructible": #on increment l'indice i += 1 elif type[i] == "explosive": #on ajoute une explosion #on supprime la brique animationsExplosion.ajouterExplosion(xAnim, yAnim) explosions.append((xAnim,yAnim)) enleverBrique(i) elif type[i] == "" : #on creer un bonus #on creer un feu d'artifice #on supprime la brique if bonus_contenu[i] != "": bonus.ajouterBonus(xAnim, yAnim, bonus_contenu[i]) animationsArtifice.ajouterAnimationArtifice(xAnim, yAnim) enleverBrique(i) #si la brique n'est pas dans le rayon de l'explosion else: i += 1 for tuple in explosions: explosion(tuple[0], tuple[1])
def gestionCollisionBallesBriques(): global gestionCollisionBalleBrique flagsretour = [] for i in range(balles.nbBalle()): flags = [] k = 0 for j in range(briques.nbBrique()): flags += gestionCollisionBalleBrique(i, k) if {"event": "brique.enlever"} in flags: briques.enleverBrique(k) flags.remove({"event": "brique.enlever"}) else: k += 1 # gestion des flags # flags possibles : "balle.invert_dx", "balle.invert_dy", "explosion.create", "animationArtifice.create", "bonus.create" flags_processed = list() for flag in flags: if flag["event"] == "balle.invert_dx" and flag not in flags_processed: balles.dx[i] = -balles.dx[i] flags_processed.append(flag) elif flag["event"] == "balle.invert_dy" and flag not in flags_processed: balles.dy[i] = -balles.dy[i] flags_processed.append(flag) elif flag["event"] == "animationArtifice.create" and flag not in flags_processed: animationsArtifice.ajouterAnimationArtifice(flag["x"], flag["y"]) flags_processed.append(flag) elif flag["event"] == "bonus.create" and flag not in flags_processed: bonus.ajouterBonus(flag["x"], flag["y"], flag["bonus"]) flags_processed.append(flag) elif flag["event"] == "explosion.create" and flag not in flags_processed: animationsExplosion.ajouterExplosion(flag["x"], flag["y"]) briques.explosion(flag["x"], flag["y"]) flags_processed.append(flag) # suppression des flags for flag in flags_processed: while flag in flags: flags.remove(flag) # sauvegarde des flags non traités flagsretour += flags return flagsretour