Esempio n. 1
0
class Intro:
    def __init__(self):
        self.montrer = True
        self.__couleur = (180, 180, 180)
        self.__timeur = 0
        self.__temps = 0
        self.__compteur = 0
        self.__image = Images().charger_image(
            "res/img/interfaces/intro/carryboo.png").convert_alpha()
        self.__image.fill((255, 255, 255, 15), None, pygame.BLEND_RGBA_MULT)
        Affichage().enregistrer(self)
        Maj().enregistrer(self)

    def affichage(self, ecran):
        if self.montrer:
            ecran.fill(self.__couleur)
            for i in range(min(30, self.__compteur)):
                ecran.blit(self.__image,
                           (LARGEUR / 2 - 126, HAUTEUR / 2 - 230))
            if self.__timeur == 20:
                Sons().jouer_son('intro', 'ogg')
            if self.__timeur == 550:
                self.montrer = False
                self.__timeur = 0
                MenuPrincipal()

    def maj(self, delta):
        if self.montrer:
            self.__temps += delta
            if self.__temps >= 1 / (17 * 2):
                self.__temps -= 1 / (17 * 2)
                self.__compteur += 1
                self.__timeur += 10
Esempio n. 2
0
    def __init__(self):
        self.__fleche = Images().charger_image('res/img/fleche.png')
        self.__visible = True
        self.__temps = 0
        self.__delai = 0.5

        Affichage().enregistrer(self, 5)
        Maj().enregistrer(self)
Esempio n. 3
0
 def __init__(self, i, coord=(0, 0), selectionne=False):
     self.surface = Images().charger_image(
         'res/img/hud/coeur-rouge.bmp').convert_alpha()
     self.surface_transparent = self.surface.copy()
     self.surface_transparent.fill((255, 255, 255, 70), None,
                                   pygame.BLEND_RGBA_MULT)
     self.selectionne = selectionne
     self.coord = coord
     self.index = i + 1
Esempio n. 4
0
 def affichage(self, ecran):
     nom = self._image
     if self.transparent:
         image = Images().charger_image(
             f'res/img/interfaces/selection/{nom}-desactive.png')
     else:
         image = Images().charger_image(
             f'res/img/interfaces/selection/{nom}.png')
     ecran.blit(image, self._coord)
Esempio n. 5
0
 def __init__(self, nom, coord=(0, 0), selectionne=False):
     self.surface = Images().charger_image(
         f'res/img/interfaces/selection/choix-dino-{nom}.png'
     ).convert_alpha()
     self.surface_transparent = self.surface.copy()
     self.surface_transparent.fill((255, 255, 255, 70), None,
                                   pygame.BLEND_RGBA_MULT)
     self.selectionne = selectionne
     self.coord = coord
     self.nom = nom
Esempio n. 6
0
 def __init__(self):
     self.montrer = True
     self.__couleur = (180, 180, 180)
     self.__timeur = 0
     self.__temps = 0
     self.__compteur = 0
     self.__image = Images().charger_image(
         "res/img/interfaces/intro/carryboo.png").convert_alpha()
     self.__image.fill((255, 255, 255, 15), None, pygame.BLEND_RGBA_MULT)
     Affichage().enregistrer(self)
     Maj().enregistrer(self)
Esempio n. 7
0
    def __init__(self, couleur, position, deplacement):
        self.__sprite = Images().charger_image(f'{CHEMIN_SPRITE}dino-{couleur}.png')
        self.__rect = self.__sprite.get_rect()
        self.__rect.x, self.__rect.y = position
        self.vitesse = 300
        self.deplacement = deplacement

        self.anim = Animation(18, 0, TAILLE_PERSO[0], TAILLE_PERSO[1], 6, 0.2)

        Maj().enregistrer(self)
        Affichage().enregistrer(self, 3)
Esempio n. 8
0
    def __init__(self, pv, couleur):
        self.__max_pv = pv
        self.__pv = pv
        self.__coeur = Images().charger_image(
            f'res/img/hud/coeur-{couleur}.bmp')
        self.__coeur_vide = Images().charger_image(
            'res/img/hud/coeur_perdu.bmp')

        self.__init__position()
        HudVie.__compte += 1

        Affichage().enregistrer(self, COUCHE_HUD)
Esempio n. 9
0
    def __init__(self, positions, deplacement, couleur_joueur, vitesse=400, duree=3):
        self.__couleur_joueur = couleur_joueur
        self.__sprite = Images().charger_image(self.CHEMIN_SPRITE + 'Tornade.png')
        self.__rect = self.__sprite.get_rect()
        self.__rect.x, self.__rect.y = positions
        self.__deplacement = deplacement
        self.__vitesse = vitesse
        self.__animation = Animation(0, 0, Tornade.TAILLE_IMAGE[0], Tornade.TAILLE_IMAGE[1], 4, duree / 12)
        self.__temps_restant = duree

        Sons().jouer_son('Tornade', 'wav', math.ceil(duree/3) - 1, duree)  # Avec 3 la duree du sons
        Affichage().enregistrer(self, 1)
        Maj().enregistrer(self)
Esempio n. 10
0
    def __init__(self, couleur, y_fin):
        self.__texte = Images().charger_image(
            f'res/img/interfaces/fin/victoire-{couleur}.png').convert_alpha()
        self.__rect_texte = self.__texte.get_rect()
        self.__rect_texte.x = LARGEUR / 2 - self.__rect_texte.width / 2
        self.__rect_texte.y = -self.__rect_texte.height * 2
        self.__vitesse = 500
        self.__y_fin = y_fin
        self.debut = False
        self.fin = False

        Affichage().enregistrer(self, 4)
        Maj().enregistrer(self)
Esempio n. 11
0
 def __init__(self):
     self.montrer = True
     self.credits = Credits(self)
     self.choix_personnages = ChoixPersonnages(self)
     self.reglement = Reglement(self)
     self.__background = Images().charger_image("res/img/interfaces/accueil/accueil-background.png")
     self.__titre = Images().charger_image("res/img/interfaces/accueil/titre.png")
     self.__bouton_jouer = BoutonJouer((350, 400), "bouton-jouer", self)
     self.__bouton_reglement = BoutonReglement((350, 500), "bouton-regles", self)
     self.__bouton_quitter = BoutonQuitter((350, 600), "bouton-quitter", self)
     self.__bouton_credits = BoutonCredits((910, 730), "bouton-credits", self)
     self.__konami = []
     Affichage().enregistrer(self)
     Evenement().enregistrer(pygame.KEYDOWN, self)
Esempio n. 12
0
class Dino:
    def __init__(self, couleur, position, deplacement):
        self.__sprite = Images().charger_image(f'{CHEMIN_SPRITE}dino-{couleur}.png')
        self.__rect = self.__sprite.get_rect()
        self.__rect.x, self.__rect.y = position
        self.vitesse = 300
        self.deplacement = deplacement

        self.anim = Animation(18, 0, TAILLE_PERSO[0], TAILLE_PERSO[1], 6, 0.2)

        Maj().enregistrer(self)
        Affichage().enregistrer(self, 3)

    def maj(self, delta):
        self.anim.ajouter_temps(delta)
        self.__rect = self.__rect.move(self.vitesse * self.deplacement[0] * delta,
                                       self.vitesse * self.deplacement[1] * delta)

    def affichage(self, ecran):
        sous_sprite, sous_sprite_rect = self.anim.recuperer_sous_sprite(self.__sprite, self.__rect.x, self.__rect.y)
        ecran.blit(pygame.transform.flip(sous_sprite, self.deplacement[0] < 0, False), sous_sprite_rect)

    def get_pos(self):
        return self.__rect.x, self.__rect.y

    def fin(self):
        Affichage().supprimer(self)
        Maj().supprimer(self)
Esempio n. 13
0
 def __init__(self, menu):
     self.montrer = False
     self.__menu = menu
     self.__background = Images().charger_image(
         "res/img/interfaces/accueil/accueil-background.png")
     Affichage().enregistrer(self)
     Evenement().enregistrer(pygame.KEYUP, self)
Esempio n. 14
0
    class __Coeur:
        def __init__(self, i, coord=(0, 0), selectionne=False):
            self.surface = Images().charger_image(
                'res/img/hud/coeur-rouge.bmp').convert_alpha()
            self.surface_transparent = self.surface.copy()
            self.surface_transparent.fill((255, 255, 255, 70), None,
                                          pygame.BLEND_RGBA_MULT)
            self.selectionne = selectionne
            self.coord = coord
            self.index = i + 1

        def collision(self, point):
            rect = self.surface.get_rect()
            rect.x, rect.y = self.coord

            return rect.collidepoint(point)
Esempio n. 15
0
class FinJeu:
    def __init__(self, couleur, y_fin):
        self.__texte = Images().charger_image(
            f'res/img/interfaces/fin/victoire-{couleur}.png').convert_alpha()
        self.__rect_texte = self.__texte.get_rect()
        self.__rect_texte.x = LARGEUR / 2 - self.__rect_texte.width / 2
        self.__rect_texte.y = -self.__rect_texte.height * 2
        self.__vitesse = 500
        self.__y_fin = y_fin
        self.debut = False
        self.fin = False

        Affichage().enregistrer(self, 4)
        Maj().enregistrer(self)

    def affichage(self, ecran):
        ecran.blit(self.__texte, self.__rect_texte)

    def maj(self, delta):
        if self.debut:
            if self.__rect_texte.y + self.__rect_texte.height < self.__y_fin:
                self.__vitesse += 800 * delta
                self.__rect_texte = self.__rect_texte.move(
                    0, delta * self.__vitesse)
            else:
                self.fin = True
                Maj().supprimer(self)
Esempio n. 16
0
class HudVie:
    MARGE_EXTERIEURE = 10
    MARGE_INTERIEURE = 2
    __compte = 0

    def __init__(self, pv, couleur):
        self.__max_pv = pv
        self.__pv = pv
        self.__coeur = Images().charger_image(
            f'res/img/hud/coeur-{couleur}.bmp')
        self.__coeur_vide = Images().charger_image(
            'res/img/hud/coeur_perdu.bmp')

        self.__init__position()
        HudVie.__compte += 1

        Affichage().enregistrer(self, COUCHE_HUD)

    def __init__position(self):
        self.__x = self.MARGE_EXTERIEURE if self.__compte % 2 == 0 \
            else LARGEUR - self.MARGE_EXTERIEURE - self.__max_pv * (self.MARGE_INTERIEURE + self.__coeur.get_width())

        self.__y = self.MARGE_EXTERIEURE if self.__compte < 2 else \
            HAUTEUR - self.MARGE_EXTERIEURE - self.__coeur.get_height()

    def retirer_pv(self):
        self.__pv -= 1

    def gagner_pv(self):
        self.__pv = min((self.__pv + 1, self.__max_pv))

    def affichage(self, ecran):
        for i in range(1, self.__max_pv + 1):
            x = self.__x + (self.__coeur.get_width() +
                            self.MARGE_INTERIEURE) * (i - 1)
            if self.__pv >= i:
                ecran.blit_absolu(self.__coeur, (x, self.__y))
            else:
                ecran.blit_absolu(self.__coeur_vide, (x, self.__y))

    def fin(self):
        Affichage().supprimer(self)
        HudVie.__compte -= 1
Esempio n. 17
0
    def __init__(self, touches, couleur, nb_coeurs):
        # Private
        Joueur.__count += 1
        self.__attente_releve = False
        self.__vies = nb_coeurs
        self.__sprite = Images().charger_image(
            f'{CHEMIN_SPRITE}dino-{couleur}.png')
        self.__hud = HudVie(self.__vies, couleur)
        self.__rect = self.__sprite.get_rect()
        self.__rect.y = HAUTEUR - TAILLE_PERSO[1]
        self.__vitesse = 300
        self.__deplacement = [0, 0]
        self.__boost = 0
        self.__velocite_saut, self.vitesse_chute = 2, 4
        self.__nb_saut_restant = 1
        self._subit_tornade = -1
        self.__accroupi = False
        self.__anim_attente = Animation(0, 0, TAILLE_PERSO[0], TAILLE_PERSO[1],
                                        4, 0.2)
        self.__anim_deplacement = Animation(4, 0, TAILLE_PERSO[0],
                                            TAILLE_PERSO[1], 6, 0.13)
        self.__anim_attaque = Animation(10, 0, TAILLE_PERSO[0],
                                        TAILLE_PERSO[1], 3, 0.2)
        self.__anim_degat = Animation(13, 0, TAILLE_PERSO[0], TAILLE_PERSO[1],
                                      4, 0.2, False, 0.5)
        self.__anim_accroupi = Animation(18, 0, TAILLE_PERSO[0],
                                         TAILLE_PERSO[1], 6, 0.2)
        self.__anim_active = self.__anim_attente

        # Protected
        self._touches = touches
        self._couleur = couleur

        evenement = Evenement()
        evenement.enregistrer(pygame.KEYDOWN, self)
        evenement.enregistrer(pygame.KEYUP, self)
        Affichage().enregistrer(self, 1)
        Maj().enregistrer(self)
Esempio n. 18
0
class HudFlecheDirection:
    def __init__(self):
        self.__fleche = Images().charger_image('res/img/fleche.png')
        self.__visible = True
        self.__temps = 0
        self.__delai = 0.5

        Affichage().enregistrer(self, 5)
        Maj().enregistrer(self)

    def maj(self, delta):
        self.__temps += delta
        if self.__temps >= self.__delai:
            self.__temps -= self.__delai
            self.__visible = not self.__visible

    def affichage(self, ecran):
        if self.__visible:
            ecran.blit(self.__fleche,
                       (10, HAUTEUR / 2 - self.__fleche.get_rect().height / 2))

    def fin(self):
        Affichage().supprimer(self)
        Maj().supprimer(self)
Esempio n. 19
0
    def __init__(self, menu):
        self.montrer = False
        self.__menu = menu
        self.__bouton_commencer = BoutonCommencer((750, 380),
                                                  "bouton-commencer", self)
        self.__selection_joueur_1 = ""
        self.__selection_joueur_2 = ""
        self.__dino_rouge = self.__Dino("rouge", (0, 70))
        self.__dino_bleu = self.__Dino("bleu", (250, 70))
        self.__dino_vert = self.__Dino("vert", (500, 70))
        self.__dino_jaune = self.__Dino("jaune", (750, 70))
        self.__dinos = {
            "rouge": self.__dino_rouge,
            "bleu": self.__dino_bleu,
            "vert": self.__dino_vert,
            "jaune": self.__dino_jaune
        }

        font = pygame.font.Font('res/fonts/Comfortaa-Bold.ttf', 30)
        self.__difficulte = font.render('Niveau de difficulté : ', True,
                                        (255, 255, 255))

        self.__coeurs = []
        for i in range(3):
            self.__coeurs.append(
                self.__Coeur(i, (LARGEUR / 2 - 50 + i * 40, HAUTEUR / 2 - 30),
                             True))
        for i in range(3, 5):
            self.__coeurs.append(
                self.__Coeur(i, (LARGEUR / 2 - 50 + i * 40, HAUTEUR / 2 - 30)))

        self.__background = Images().charger_image(
            "res/img/interfaces/accueil/accueil-background.png")
        Affichage().enregistrer(self)
        Evenement().enregistrer(pygame.MOUSEBUTTONUP, self)
        Evenement().enregistrer(pygame.KEYUP, self)
Esempio n. 20
0
    def __init__(self, nom_json, x, y, taille):
        fichier_json = open(f'res/blocs/{nom_json}.json')
        self.__donnees = json.load(fichier_json)
        self.__sprite = Images().charger_image('res/img/Tileset.png')
        self._x = x
        self._y = y
        self.__z = self.__donnees['z'] if 'z' in self.__donnees.keys() else 0
        self.__taille = taille
        self._dessin = None
        self.__animation = None

        if all(cle in self.__donnees for cle in ['animation', 'temps-animation']):
            self.__animation = Animation(self.__donnees['x'], self.__donnees['y'], self.__donnees['largeur'],
                                         self.__donnees['hauteur'], self.__donnees['animation'],
                                         self.__donnees['temps-animation'])
            direction = self.__donnees['direction']
            if direction == 'x':
                self.__direction = [1, 0]
                self.__largeur = self.__donnees['largeur'] * taille
                self.__hauteur = self.__donnees['hauteur']
            else:
                self.__direction = [0, 1]
                self.__largeur = self.__donnees['largeur']
                self.__hauteur = self.__donnees['hauteur'] * taille
            Maj().enregistrer(self)
        else:
            fin_debut = 0
            fin_milieu = 0
            taille_milieu = 0

            if self.__donnees['direction'] == 'x':
                largeur = 0
                for debut in self.__donnees['debut']:
                    largeur += debut['largeur']
                fin_debut = largeur
                for milieu in self.__donnees['milieu']:
                    taille_milieu += milieu['largeur']
                largeur += taille_milieu * self.__taille
                fin_milieu = largeur
                for fin in self.__donnees['fin']:
                    largeur += fin['largeur']

                hauteur = self.__donnees['debut'][0]['hauteur']
            elif self.__donnees['direction'] == 'y':
                largeur = self.__donnees['debut'][0]['largeur']

                hauteur = 0
                for debut in self.__donnees['debut']:
                    hauteur += debut['hauteur']
                fin_debut = largeur
                for milieu in self.__donnees['milieu']:
                    taille_milieu += milieu['hauteur']
                    hauteur += taille_milieu * self.__taille
                    fin_milieu = largeur
                for fin in self.__donnees['fin']:
                    hauteur += fin['hauteur']
            else:
                largeur = self.__donnees['debut'][0]['largeur']
                hauteur = self.__donnees['debut'][0]['hauteur']

            self.__taille = taille
            nom_cache = f'{nom_json}|{taille}'
            if nom_cache not in Bloc.DESSINS:
                self.__init_dessin(largeur, hauteur, fin_debut, fin_milieu, taille_milieu)
                Bloc.DESSINS[nom_cache] = self._dessin
            else:
                self._dessin = Bloc.DESSINS[nom_cache]
            self.__largeur = self._dessin.get_width()

        Affichage().enregistrer(self, self.__z)
Esempio n. 21
0
 def set_sprite(self, nom_fichier):
     self.__sprite = Images().charger_image(CHEMIN_SPRITE + nom_fichier)
Esempio n. 22
0
class Joueur:
    NB_SAUT_MAX = 1
    RECTANGLE_COLLISION = pygame.Rect(16, 16, 62, 70)
    RECTANGLE_COLLISION_ACCROUPI = pygame.Rect(24, 25, 54, 61)
    TEMPS_SUBIT_TORNADE = 2  # En seconde

    __count = 0

    def __init__(self, touches, couleur, nb_coeurs):
        # Private
        Joueur.__count += 1
        self.__attente_releve = False
        self.__vies = nb_coeurs
        self.__sprite = Images().charger_image(
            f'{CHEMIN_SPRITE}dino-{couleur}.png')
        self.__hud = HudVie(self.__vies, couleur)
        self.__rect = self.__sprite.get_rect()
        self.__rect.y = HAUTEUR - TAILLE_PERSO[1]
        self.__vitesse = 300
        self.__deplacement = [0, 0]
        self.__boost = 0
        self.__velocite_saut, self.vitesse_chute = 2, 4
        self.__nb_saut_restant = 1
        self._subit_tornade = -1
        self.__accroupi = False
        self.__anim_attente = Animation(0, 0, TAILLE_PERSO[0], TAILLE_PERSO[1],
                                        4, 0.2)
        self.__anim_deplacement = Animation(4, 0, TAILLE_PERSO[0],
                                            TAILLE_PERSO[1], 6, 0.13)
        self.__anim_attaque = Animation(10, 0, TAILLE_PERSO[0],
                                        TAILLE_PERSO[1], 3, 0.2)
        self.__anim_degat = Animation(13, 0, TAILLE_PERSO[0], TAILLE_PERSO[1],
                                      4, 0.2, False, 0.5)
        self.__anim_accroupi = Animation(18, 0, TAILLE_PERSO[0],
                                         TAILLE_PERSO[1], 6, 0.2)
        self.__anim_active = self.__anim_attente

        # Protected
        self._touches = touches
        self._couleur = couleur

        evenement = Evenement()
        evenement.enregistrer(pygame.KEYDOWN, self)
        evenement.enregistrer(pygame.KEYUP, self)
        Affichage().enregistrer(self, 1)
        Maj().enregistrer(self)

    def evenement(self, evenement):
        if self.__vies <= 0:
            return

        if evenement.type == pygame.KEYDOWN:
            if evenement.key == self._touches.get('aller_gauche'):
                self.__deplacement[0] -= 1
            elif evenement.key == self._touches.get('aller_droite'):
                self.__deplacement[0] += 1
            elif evenement.key == self._touches.get(
                    'sauter') and self.__nb_saut_restant > 0:
                self.__deplacement[1] -= self.__velocite_saut
                self.__nb_saut_restant -= 1
                Sons().jouer_son('saut')
            elif evenement.key == self._touches.get('accroupir'):
                self.accroupir()

        else:  # KEYUP
            if evenement.key == self._touches.get('aller_gauche'):
                self.__deplacement[0] += 1
            elif evenement.key == self._touches.get('aller_droite'):
                self.__deplacement[0] -= 1
            elif evenement.key == self._touches.get('accroupir'):
                self.relever()

        if self._subit_tornade <= 0:
            self.__maj_animation()

    def __maj_animation(self):
        if not self.__accroupi:
            if self.__deplacement[0] != 0:
                self.__anim_active = self.__anim_deplacement
            else:
                self.__anim_active = self.__anim_attente

    def __reset_boost(self):
        self.__deplacement[0] -= self.__boost
        self.__boost = 0

    def __correction_direction(self):
        precision = 10
        self.__deplacement[0] = round(
            self.__deplacement[0] * 10**precision) / 10**precision
        self.__deplacement[1] = round(
            self.__deplacement[1] * 10**precision) / 10**precision

    def __gestion_releve(self):
        self.__accroupi = False

        if Jeu.Jeu().collisions(self, 0):
            self.__accroupi = True
        else:
            self.__anim_active = self.__anim_attente
            self.__vitesse += 100
            self.__attente_releve = False

    def maj(self, delta):
        jeu = Jeu.Jeu()
        if self.__vies <= 0:
            return
        elif Joueur.__count == 1:
            jeu.fin(self._couleur)
            return

        if self.__attente_releve:
            self.__gestion_releve()

        if self._subit_tornade <= 0:
            if self.__deplacement[0] or not self.__accroupi:
                self.__anim_active.ajouter_temps(delta)
            else:
                self.__anim_active.reinitialiser(1)
            self.__correction_direction()
            ancien_boost = self.__boost

            # Mouvement X
            self.__rect = self.__rect.move(
                self.__vitesse * self.__deplacement[0] * delta, 0)
            self.__collisions((self.__deplacement[0], 0),
                              jeu.collisions(self, delta))

            if self.__boost == ancien_boost:
                self.__reset_boost()
        else:
            # gere temps de stun
            self._subit_tornade -= delta
            self.__anim_active.ajouter_temps(delta)
            if self.__anim_active.est_finie():
                self.__anim_active.reinitialiser()
                if self.__accroupi:
                    self.__anim_active = self.__anim_accroupi
                else:
                    self.__anim_active = self.__anim_attente

        # Mouvement Y
        self.__rect = self.__rect.move(
            0, self.__vitesse * self.__deplacement[1] * delta)
        self.__collisions((0, self.__deplacement[1]),
                          jeu.collisions(self, delta))

        self.__deplacement[1] += self.vitesse_chute * delta

        self.__maj_camera(delta)

    def __collisions(self, deplacement, collisions):
        if collisions:
            rect = self.get_rect_collision()
            if deplacement[0] > 0:
                rect.right = collisions.left
                self.__reset_boost()
            elif deplacement[0] < 0:
                rect.left = collisions.right
                self.__reset_boost()

            if deplacement[1] < 0:
                rect.top = collisions.bottom
                self.__deplacement[1] = 0
            elif deplacement[1] > 0:
                rect.bottom = collisions.top
                self.__deplacement[1] = 0
                self.ajout_saut(1)
            self.set_rect_collision(rect)

    def __maj_camera(self, delta):
        rect = self.get_rect()
        droite = rect.x + self.RECTANGLE_COLLISION.right
        haut = rect.y + self.RECTANGLE_COLLISION.top
        if Ecran.get_droite() - droite < DISTANCE_DEPLACEMENT:
            Ecran.deplacement(droite - Ecran.largeur + DISTANCE_DEPLACEMENT,
                              Ecran.y)
            Parallax().deplacement_joueur(self.__deplacement[0], delta)

        if Ecran.x > droite or Ecran.y + Ecran.hauteur < haut:
            self.__retirer_vie()

    def __retirer_vie(self):
        self.__vies -= 1
        self.__hud.retirer_pv()

        if Jeu.Jeu.konami_actif():
            Sons().jouer_son('k-mort')
        else:
            Sons().jouer_son('mort')

        if self.__vies > 0:
            self.__revivre()
        else:
            Joueur.__count -= 1

    def __revivre(self):
        self.__rect.x = Ecran.x + Ecran.largeur / 2
        self.__rect.y = Ecran.y + Ecran.hauteur / 2

    def affichage(self, ecran):
        if self.__vies <= 0:
            return

        sous_sprite, sous_sprite_rect = self.__anim_active.recuperer_sous_sprite(
            self.__sprite, self.__rect.x, self.__rect.y)
        miroir = (self._subit_tornade < 0 and self.__deplacement[0] < 0) or \
                 (self._subit_tornade > 0 and self._subit_tornade % 0.2 > 0.1)
        ecran.blit(pygame.transform.flip(sous_sprite, miroir, False),
                   sous_sprite_rect)

    def get_couleur(self):
        return self._couleur

    def get_vitesse(self):
        return self.__vitesse

    def get_sprite(self):
        return self.__sprite

    def get_rect(self):
        return self.__rect

    def get_rect_collision(self):
        if self.__accroupi:
            rect_collision = self.RECTANGLE_COLLISION_ACCROUPI
        else:
            rect_collision = self.RECTANGLE_COLLISION

        rect = self.__rect.copy()
        rect.x += rect_collision.x
        rect.y += rect_collision.y
        rect.width = rect_collision.width
        rect.height = rect_collision.height
        return rect

    def set_rect_collision(self, rect):
        if self.__accroupi:
            rect_collision = self.RECTANGLE_COLLISION_ACCROUPI
        else:
            rect_collision = self.RECTANGLE_COLLISION

        self.__rect.x = rect.x - rect_collision.x
        self.__rect.y = rect.y - rect_collision.y

    def get_deplacement(self):
        return self.__deplacement

    def get_nb_saut_restant(self):
        return self.__nb_saut_restant

    def get_nb_saut_max(self):
        return self.NB_SAUT_MAX

    def set_vitesse(self, vitesse):
        self.__vitesse = vitesse

    def set_deplacement(self, deplacement):
        self.__deplacement = deplacement

    def ajouter_boost(self, x, y):
        self.__boost += x
        self.__deplacement[0] += x
        self.__deplacement[1] += y

    def set_sprite(self, nom_fichier):
        self.__sprite = Images().charger_image(CHEMIN_SPRITE + nom_fichier)

    def set_rect(self, rect):
        self.__rect = rect

    def set_velocite_saut(self, velocite_saut):
        self.__velocite_saut = velocite_saut

    def set_vitesse_chute(self, vitesse_chute):
        self.vitesse_chute = vitesse_chute

    def ajout_saut(self, nb=1):
        self.__nb_saut_restant = min(
            [nb + self.__nb_saut_restant, self.NB_SAUT_MAX])

    def fin(self):
        self.__hud.fin()
        Joueur.__count = 0
        Evenement().supprimer(self)
        Affichage().supprimer(self)
        Maj().supprimer(self)

    def subit_tornade(self):
        self._subit_tornade = self.TEMPS_SUBIT_TORNADE
        self.__anim_active = self.__anim_degat
        self.__deplacement[1] = -1

    def reprendre(self):
        key_pressed = pygame.key.get_pressed()
        if key_pressed[self._touches.get('aller_droite')]:
            self.__deplacement[0] = 1
        elif key_pressed[self._touches.get('aller_gauche')]:
            self.__deplacement[0] = -1
        else:
            self.__deplacement[0] = 0

        self.__deplacement[0] += self.__boost

        self.__maj_animation()

    def accroupir(self):
        if not self.__accroupi:
            self.__accroupi = True
            self.__anim_active = self.__anim_accroupi
            self.__vitesse -= 100

    def relever(self):
        self.__attente_releve = True
Esempio n. 23
0
    def affichage(self, ecran):
        if self.montrer:
            background = Images().charger_image(
                "res/img/interfaces/accueil/accueil-background.png")
            ecran.blit(background, (0, 0))
            if self.equipe and not self.sources:
                # Titre
                font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 80)
                texte = font.render("Equipe", True, self.TITRE)
                ecran.blit(texte, (LARGEUR / 2 - texte.get_width() / 2, 30))

                # Noms
                font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 36)
                ecran.blit(font.render("Baptiste LEDOYEN", True, self.NOM),
                           (30, 170))
                ecran.blit(font.render("Thomas VINCENT", True, self.NOM),
                           (30, 350))
                ecran.blit(font.render("Thibault GROOT", True, self.NOM),
                           (670, 350))
                ecran.blit(font.render("Théo PONCHON", True, self.NOM),
                           (670, 170))
                texte = font.render("Léo LE CORRE", True, self.NOM)
                ecran.blit(texte, (LARGEUR / 2 - texte.get_width() / 2, 530))

                # Rôles
                font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 26)
                # Baptiste
                ecran.blit(
                    font.render("Chef de projet", True, self.DESCRIPTION),
                    (90, 220))
                ecran.blit(font.render("Développeur", True, self.DESCRIPTION),
                           (90, 260))
                # Thomas
                ecran.blit(
                    font.render("Responsable technique", True,
                                self.DESCRIPTION), (30, 400))
                ecran.blit(font.render("Développeur", True, self.DESCRIPTION),
                           (90, 440))
                # Thibault
                ecran.blit(font.render("Développeur", True, self.DESCRIPTION),
                           (720, 400))
                # Théo
                ecran.blit(
                    font.render("Développeur UI", True, self.DESCRIPTION),
                    (720, 220))
                ecran.blit(font.render("Designer", True, self.DESCRIPTION),
                           (720, 260))
                # Léo
                texte = font.render("Game Designer", True, self.DESCRIPTION)
                ecran.blit(texte,
                           (LARGEUR / 2 - texte.get_width() / 2 + 30, 580))

                # Bouton Sources
                font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 30)
                ecran.blit(font.render("Sources", True, self.TITRE),
                           (880, 720))

            elif self.sources and not self.equipe:
                # Titre
                font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 80)
                texte = font.render("Sources", True, self.TITRE)
                ecran.blit(texte, (LARGEUR / 2 - texte.get_width() / 2, 30))

                # Bouton Equipe
                font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 30)
                ecran.blit(font.render("Equipe", True, self.TITRE), (10, 720))

                # Ressources
                font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 20)
                ecran.blit(font.render("Tileset", True, self.NOM),
                           (self.NOM_X, 150))
                ecran.blit(font.render("Parallax", True, self.NOM),
                           (self.NOM_X, 180))
                ecran.blit(font.render("Dinosaures", True, self.NOM),
                           (self.NOM_X, 210))
                ecran.blit(font.render("Coeur HUD", True, self.NOM),
                           (self.NOM_X, 240))
                ecran.blit(font.render("Tornade", True, self.NOM),
                           (self.NOM_X, 270))
                ecran.blit(font.render("Logo CarryBoo", True, self.NOM),
                           (self.NOM_X, 300))
                ecran.blit(font.render("Flèche démarrage", True, self.NOM),
                           (self.NOM_X, 330))

                ecran.blit(font.render("Musique", True, self.NOM),
                           (self.NOM_X, 370))
                ecran.blit(font.render("Musique alternative", True, self.NOM),
                           (self.NOM_X, 400))
                ecran.blit(font.render("Son de tornade", True, self.NOM),
                           (self.NOM_X, 450))
                ecran.blit(font.render("Son de fin", True, self.NOM),
                           (self.NOM_X, 480))
                ecran.blit(
                    font.render("Son de fin alternatif", True, self.NOM),
                    (self.NOM_X, 510))
                ecran.blit(font.render("Son de mort", True, self.NOM),
                           (self.NOM_X, 540))
                ecran.blit(
                    font.render("Son de mort alternatif", True, self.NOM),
                    (self.NOM_X, 570))
                ecran.blit(font.render("Son de saut", True, self.NOM),
                           (self.NOM_X, 600))
                ecran.blit(font.render("Son de vent", True, self.NOM),
                           (self.NOM_X, 630))
                ecran.blit(font.render("Son de bouton", True, self.NOM),
                           (self.NOM_X, 660))
                ecran.blit(font.render("Son logo CarryBoo", True, self.NOM),
                           (self.NOM_X, 690))

                # Liens
                font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 15)
                ecran.blit(
                    font.render(
                        "https://bigbuckbunny.itch.io/platform-assets-pack",
                        True, self.DESCRIPTION), (self.DESC_X, 153))
                ecran.blit(
                    font.render("https://mamanezakon.itch.io/forest-tileset",
                                True, self.DESCRIPTION), (self.DESC_X, 183))
                ecran.blit(
                    font.render("https://arks.itch.io/dino-characters", True,
                                self.DESCRIPTION), (self.DESC_X, 213))
                ecran.blit(
                    font.render("https://opengameart.org/content/pixel-hearts",
                                True, self.DESCRIPTION), (self.DESC_X, 243))
                ecran.blit(
                    font.render(
                        "https://opengameart.org/content/spells-and-company",
                        True, self.DESCRIPTION), (self.DESC_X, 273))
                ecran.blit(
                    font.render(
                        "https://www.vecteezy.com/vector-art/153284-free-caribou-vector-collection",
                        True, self.DESCRIPTION), (self.DESC_X, 303))
                ecran.blit(
                    font.render(
                        "https://pixabay.com/fr/vectors/droit-arrow-formes-pointage-29247",
                        True, self.DESCRIPTION), (self.DESC_X, 333))

                ecran.blit(
                    font.render(
                        "https://www.fesliyanstudios.com/royalty-free-music/download/retro-platforming/454",
                        True, self.DESCRIPTION), (self.DESC_X, 373))
                ecran.blit(
                    font.render(
                        "https://freemusicarchive.org/music/sawsquarenoise/Towel_Defence_OST/",
                        True, self.DESCRIPTION), (self.DESC_X, 403))
                ecran.blit(
                    font.render("Towel_Defence_Ingame", True,
                                self.DESCRIPTION), (self.DESC_X, 420))
                ecran.blit(
                    font.render(
                        "https://lasonotheque.org/detail-0595-vent.html", True,
                        self.DESCRIPTION), (self.DESC_X, 453))
                ecran.blit(
                    font.render(
                        "https://opengameart.org/content/crash-collision",
                        True, self.DESCRIPTION), (self.DESC_X, 483))
                ecran.blit(
                    font.render(
                        "https://opengameart.org/content/15-monster-gruntpaindeath-sounds",
                        True, self.DESCRIPTION), (self.DESC_X, 513))
                ecran.blit(
                    font.render(
                        "http://soundbible.com/1569-I-Will-Kill-You.html",
                        True, self.DESCRIPTION), (self.DESC_X, 543))
                ecran.blit(
                    font.render(
                        "http://soundbible.com/1459-Psycho-Scream.html", True,
                        self.DESCRIPTION), (self.DESC_X, 573))
                ecran.blit(
                    font.render(
                        "https://opengameart.org/content/platformer-jumping-sounds",
                        True, self.DESCRIPTION), (self.DESC_X, 603))
                ecran.blit(
                    font.render(
                        "https://freesound.org/people/qubodup/sounds/60009/",
                        True, self.DESCRIPTION), (self.DESC_X, 633))
                ecran.blit(
                    font.render(
                        "https://freesound.org/people/volkbutphan/sounds/485486/",
                        True, self.DESCRIPTION), (self.DESC_X, 663))
                ecran.blit(
                    font.render(
                        "https://freesound.org/people/luminousfridge/sounds/496199/",
                        True, self.DESCRIPTION), (self.DESC_X, 693))

            # Instruction ESC
            font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 20)
            texte = font.render("ESC pour retourner au menu principal", True,
                                self.DESCRIPTION)
            ecran.blit(texte, (LARGEUR / 2 - texte.get_width() / 2, 740))
Esempio n. 24
0
    def affichage(self, ecran):
        if self.montrer:
            ecran.blit(self.__background, (0, 0))

            # Titre
            font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 60)
            texte = font.render("Règles", True, self.TITRE)
            ecran.blit(texte,
                       (Constantes.LARGEUR / 2 - texte.get_width() / 2, 20))

            # Objectif
            font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 36)
            ecran.blit(font.render("Objectif", True, self.SOUS_TITRE),
                       (50, 110))
            font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 20)
            ecran.blit(
                font.render("Soyez le dernier en vie en utilisant les", True,
                            self.DESCRIPTION), (50, 160))
            ecran.blit(
                font.render("courants ascendants et descendants", True,
                            (95, 39, 205)), (455, 160))
            ecran.blit(font.render("pour changer", True, self.DESCRIPTION),
                       (860, 160))
            ecran.blit(
                font.render("d'étages. Vous disposez également d'une", True,
                            self.DESCRIPTION), (50, 187))
            ecran.blit(font.render("compétence", True, (255, 165, 2)),
                       (490, 187))
            ecran.blit(
                font.render("pour rééquilibrer le duel.", True,
                            self.DESCRIPTION), (625, 187))
            ecran.blit(
                font.render(
                    "Evitez les obstacles et courez, la caméra se déplace en fonction du joueur en première",
                    True, self.DESCRIPTION), (50, 214))
            ecran.blit(
                font.render(
                    "position. Si vous sortez de l'écran (à gauche) vous perdez une vie et réapparaissez au",
                    True, self.DESCRIPTION), (50, 241))
            ecran.blit(
                font.render("centre de l'écran. Vous possédez jusqu'à", True,
                            self.DESCRIPTION), (50, 268))
            ecran.blit(font.render("5 vies", True, (231, 76, 60)), (485, 268))
            ecran.blit(font.render(".", True, self.DESCRIPTION), (550, 268))

            # Commandes
            font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 36)
            ecran.blit(font.render("Commandes", True, self.SOUS_TITRE),
                       (50, 320))
            font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 26)
            ecran.blit(font.render("Joueur 1", True, self.DESCRIPTION),
                       (350, 370))
            ecran.blit(font.render("Joueur 2", True, self.DESCRIPTION),
                       (750, 370))
            font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 22)
            ecran.blit(font.render("Déplacements", True, self.DESCRIPTION),
                       (50, 480))
            ecran.blit(font.render("Compétence", True, self.DESCRIPTION),
                       (50, 650))
            touche = Images().charger_image(
                "res/img/interfaces/regles/touche.png")
            font = pygame.font.Font("res/fonts/NotoSansJP-Bold.otf", 45)

            # Joueur 1
            ecran.blit(touche, (370, 430))  # Haut
            ecran.blit(touche, (370, 505))  # Bas
            ecran.blit(touche, (290, 505))  # Gauche
            ecran.blit(touche, (450, 505))  # Droite
            ecran.blit(touche, (370, 630))  # Compétence
            ecran.blit(
                font.render(self.nom_touche(Constantes.TOUCHES[0]['sauter']),
                            True, self.TOUCHE), (390, 425))  # Haut
            # ecran.blit(font.render(pygame.key.name(Constantes.TOUCHES[0]['']), True, self.TOUCHE), (370, 505))  # Bas
            ecran.blit(
                font.render(
                    self.nom_touche(Constantes.TOUCHES[0]['aller_gauche']),
                    True, self.TOUCHE), (307, 495))  # Gauche
            ecran.blit(
                font.render(
                    self.nom_touche(Constantes.TOUCHES[0]['accroupir']), True,
                    self.TOUCHE), (390, 500))  # Accroupir
            ecran.blit(
                font.render(
                    self.nom_touche(Constantes.TOUCHES[0]['aller_droite']),
                    True, self.TOUCHE), (470, 500))  # Droite
            ecran.blit(
                font.render(
                    self.nom_touche(Constantes.TOUCHES[0]['competence']), True,
                    self.TOUCHE), (377, 630))  # Compétence

            # Joueur 2
            ecran.blit(touche, (770, 430))  # Haut
            ecran.blit(touche, (770, 505))  # Bas
            ecran.blit(touche, (690, 505))  # Gauche
            ecran.blit(touche, (850, 505))  # Droite
            ecran.blit(touche, (770, 630))  # Compétence
            ecran.blit(
                font.render(self.nom_touche(Constantes.TOUCHES[1]['sauter']),
                            True, self.TOUCHE), (785, 425))  # Haut
            # ecran.blit(font.render(pygame.key.name(Constantes.TOUCHES[0]['']), True, self.TOUCHE), (370, 505))  # Bas
            ecran.blit(
                font.render(
                    self.nom_touche(Constantes.TOUCHES[1]['aller_gauche']),
                    True, self.TOUCHE), (700, 500))  # Gauche
            ecran.blit(
                font.render(
                    self.nom_touche(Constantes.TOUCHES[1]['accroupir']), True,
                    self.TOUCHE), (785, 500))  # Accroupir
            ecran.blit(
                font.render(
                    self.nom_touche(Constantes.TOUCHES[1]['aller_droite']),
                    True, self.TOUCHE), (865, 500))  # Droite
            ecran.blit(
                font.render(
                    self.nom_touche(Constantes.TOUCHES[1]['competence']), True,
                    self.TOUCHE), (773, 627))  # Compétence

            font = pygame.font.Font("res/fonts/Comfortaa-Bold.ttf", 20)
            texte = font.render("ESC pour retourner au menu principal", True,
                                self.DESCRIPTION)
            ecran.blit(texte,
                       (Constantes.LARGEUR / 2 - texte.get_width() / 2, 740))
Esempio n. 25
0
import pygame
import sys
import pygame.time as time
from gestionnaires.Evenement import *
from gestionnaires.Images import Images
from gestionnaires.Maj import *
from interfaces.Intro import Intro
from interfaces.Ecran import Ecran
from utils.Constantes import *

pygame.init()
random.seed()

ecran = pygame.display.set_mode(TAILLE)
pygame.display.set_caption("Dino Tempest")
icon = Images().charger_image("res/img/fenetre/icon2.png")
pygame.display.set_icon(icon)

intro = Intro()

clock = time.Clock()
gestionnaire_evenements = Evenement()
maj = Maj()
affichage = Ecran(ecran)

while 1:
    for evenement in pygame.event.get():
        if evenement.type == pygame.QUIT:
            sys.exit()
        else:
            gestionnaire_evenements.maj(evenement.type, evenement)
Esempio n. 26
0
 def affichage(self, ecran):
     if self._image != "":
         image = Images().charger_image(
             f'res/img/interfaces/accueil/{self._image}.png')
         ecran.blit(image, self._coord)
Esempio n. 27
0
class Bloc:
    DESSINS = {}

    def __init__(self, nom_json, x, y, taille):
        fichier_json = open(f'res/blocs/{nom_json}.json')
        self.__donnees = json.load(fichier_json)
        self.__sprite = Images().charger_image('res/img/Tileset.png')
        self._x = x
        self._y = y
        self.__z = self.__donnees['z'] if 'z' in self.__donnees.keys() else 0
        self.__taille = taille
        self._dessin = None
        self.__animation = None

        if all(cle in self.__donnees for cle in ['animation', 'temps-animation']):
            self.__animation = Animation(self.__donnees['x'], self.__donnees['y'], self.__donnees['largeur'],
                                         self.__donnees['hauteur'], self.__donnees['animation'],
                                         self.__donnees['temps-animation'])
            direction = self.__donnees['direction']
            if direction == 'x':
                self.__direction = [1, 0]
                self.__largeur = self.__donnees['largeur'] * taille
                self.__hauteur = self.__donnees['hauteur']
            else:
                self.__direction = [0, 1]
                self.__largeur = self.__donnees['largeur']
                self.__hauteur = self.__donnees['hauteur'] * taille
            Maj().enregistrer(self)
        else:
            fin_debut = 0
            fin_milieu = 0
            taille_milieu = 0

            if self.__donnees['direction'] == 'x':
                largeur = 0
                for debut in self.__donnees['debut']:
                    largeur += debut['largeur']
                fin_debut = largeur
                for milieu in self.__donnees['milieu']:
                    taille_milieu += milieu['largeur']
                largeur += taille_milieu * self.__taille
                fin_milieu = largeur
                for fin in self.__donnees['fin']:
                    largeur += fin['largeur']

                hauteur = self.__donnees['debut'][0]['hauteur']
            elif self.__donnees['direction'] == 'y':
                largeur = self.__donnees['debut'][0]['largeur']

                hauteur = 0
                for debut in self.__donnees['debut']:
                    hauteur += debut['hauteur']
                fin_debut = largeur
                for milieu in self.__donnees['milieu']:
                    taille_milieu += milieu['hauteur']
                    hauteur += taille_milieu * self.__taille
                    fin_milieu = largeur
                for fin in self.__donnees['fin']:
                    hauteur += fin['hauteur']
            else:
                largeur = self.__donnees['debut'][0]['largeur']
                hauteur = self.__donnees['debut'][0]['hauteur']

            self.__taille = taille
            nom_cache = f'{nom_json}|{taille}'
            if nom_cache not in Bloc.DESSINS:
                self.__init_dessin(largeur, hauteur, fin_debut, fin_milieu, taille_milieu)
                Bloc.DESSINS[nom_cache] = self._dessin
            else:
                self._dessin = Bloc.DESSINS[nom_cache]
            self.__largeur = self._dessin.get_width()

        Affichage().enregistrer(self, self.__z)

    def dessiner_partie(self, direction, decalage, partie):
        for element in partie:
            sprite = self.__sprite.subsurface(
                pygame.Rect(element['x'], element['y'], element['largeur'], element['hauteur']))
            x_element = element['dx'] + direction[0] * decalage
            y_element = element['dy'] + direction[1] * decalage
            self._dessin.blit(sprite, (x_element, y_element))

    def __init_dessin(self, largeur, hauteur, fin_debut, fin_milieu, taille_milieu):
        self._dessin = pygame.Surface((largeur, hauteur)).convert_alpha()
        self._dessin.fill((0, 0, 0, 0))

        direction = [0, 0]
        if self.__donnees['direction'] == 'x':
            direction[0] = 1
        elif self.__donnees['direction'] == 'y':
            direction[1] = 1

        self.dessiner_partie(direction, 0, self.__donnees['debut'])
        for i in range(0, self.__taille):
            self.dessiner_partie(direction, fin_debut + taille_milieu * i, self.__donnees['milieu'])
        self.dessiner_partie(direction, fin_milieu, self.__donnees['fin'])

    def maj(self, delta):
        self.__animation.ajouter_temps(delta)

    def affichage(self, ecran):
        if self.__animation:
            for i in range(self.__taille):
                x = self._x + (self.__donnees['largeur'] * i) * self.__direction[0]
                y = self._y + (self.__donnees['hauteur'] * i) * self.__direction[1]
                sous_sprite, sous_sprite_rect = self.__animation.recuperer_sous_sprite(self.__sprite, x, y)
                ecran.blit(sous_sprite, sous_sprite_rect)
        else:
            ecran.blit(self._dessin, (self._x, self._y))

    def set_x(self, x):
        self._x = x

    def set_y(self, y):
        self._y = y

    def get_largeur(self):
        return self.__largeur

    def get_rect(self):
        if self._dessin:
            return self._dessin.get_rect()
        else:
            return pygame.rect.Rect(self._x, self._y, self.__largeur, self.__hauteur)

    def collisions(self, joueur, delta):
        return None
Esempio n. 28
0
class Tornade:
    TAILLE_IMAGE = [64, 64]
    CHEMIN_SPRITE = 'res/img/competences/'
    RECTANGLE_COLLISION = pygame.Rect(9, 0, 45, 60)

    def __init__(self, positions, deplacement, couleur_joueur, vitesse=400, duree=3):
        self.__couleur_joueur = couleur_joueur
        self.__sprite = Images().charger_image(self.CHEMIN_SPRITE + 'Tornade.png')
        self.__rect = self.__sprite.get_rect()
        self.__rect.x, self.__rect.y = positions
        self.__deplacement = deplacement
        self.__vitesse = vitesse
        self.__animation = Animation(0, 0, Tornade.TAILLE_IMAGE[0], Tornade.TAILLE_IMAGE[1], 4, duree / 12)
        self.__temps_restant = duree

        Sons().jouer_son('Tornade', 'wav', math.ceil(duree/3) - 1, duree)  # Avec 3 la duree du sons
        Affichage().enregistrer(self, 1)
        Maj().enregistrer(self)

    def maj(self, delta):
        self.gerer_collisions()
        if self.__temps_restant > 0:
            self.__animation.ajouter_temps(delta)
            self.__rect = self.__rect.move(self.__vitesse * self.__deplacement[0] * delta,
                                           self.__vitesse * self.__deplacement[1] * delta)
            self.__temps_restant -= delta
        else:
            Maj().supprimer(self)

    def affichage(self, ecran):
        if self.__temps_restant > 0:
            sous_sprite = self.__sprite.subsurface(self.__animation.recuperer_image())
            sous_sprite_rect = sous_sprite.get_rect()
            sous_sprite_rect.x, sous_sprite_rect.y = self.__rect.x, self.__rect.y
            ecran.blit(pygame.transform.flip(sous_sprite, self.__deplacement[0] < 0, False), sous_sprite_rect)
        else:
            Affichage().supprimer(self)

    def set_deplacement(self, deplacement):
        self.__deplacement = deplacement

    def get_rect(self):
        return self.__rect

    def get_couleur_joueur(self):
        return self.__couleur_joueur

    def get_rect_collision(self):
        rect = self.__rect.copy()
        rect.x += self.RECTANGLE_COLLISION.x
        rect.y += self.RECTANGLE_COLLISION.y
        rect.width = self.RECTANGLE_COLLISION.width
        rect.height = self.RECTANGLE_COLLISION.height
        return rect

    def gerer_collisions(self):
        joueurs = Jeu.Jeu().get_joueurs()
        if joueurs:
            for joueur in joueurs:
                if joueur.get_rect_collision().colliderect(self.get_rect_collision()) and self.get_couleur_joueur() != joueur.get_couleur():
                    joueur.subit_tornade()