Esempio n. 1
0
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])
Esempio n. 2
0
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