Beispiel #1
0
 def __init__(self, terrain, tank, name):
     """
     constructeur de la classe
         terrain    : le terrain sur lequel évolue l'obus
         tank       : le tank qui a tiré cet obus
         name       : nom de l'agent
         l_img_name : liste des noms des images  devant être dessinées dans l'ordre de la liste
         pos:  position (x,y) du tank (coin haut gauche)
         nb_rotates: nombre de rotations à pré-générer  (rotations par pas de 2pi/nb_rotations)
     """
     self.tank = tank  # le tank qui a tiré l'obus
     # appel au constructeur de la classe mère Agent: vitesse = vitesse max = 30, pas d'accel et pas de frottement
     Agent.__init__(
         self,
         terrain,
         name,
         l_img_name=[
             'Media/Tank/Explosion/Light_Shell_128x128.png',  # obus
             'Media/Tank/Explosion/Sprite_Fire_Shots_Shot_A_000.png'  # feux de tir
         ],
         pos=tank.pos,
         nb_rotates=tank.nb_rotates,
         v=30,
         vmax=30,
         accel=0,
         friction_force=0,
         bloc_size=32)
     self.id_shell = 0  # id de l'obus
     self.id_fire = 1  # id du feux de tir
     self.countdown = 0  # si compte à rebours obus à 0: le tank peut tirer son obus
     self.explosion = Explosion(
         terrain, self, self.name +
         ' explosion')  # agent explosion quand l'obus touche un obstacle
     self.desactivates_all()  #sésactive toutes les images
Beispiel #2
0
    def bouge(self):
        """
        méthode pour faire bouger le tank
        """
        if self.human:
            key_pressed = pygame.key.get_pressed()  # capture touche pressée
            if (key_pressed[K_LEFT] or key_pressed[K_RIGHT]):
                #orientation du tank si touche pressée LEFT(rotation +1) ou RIGTH(rotation-1)
                self.rotates(key_pressed[K_LEFT] - key_pressed[K_RIGHT])
            if (key_pressed[K_s] or key_pressed[K_d]):
                #rotation du canon uniquement si touches pressée  'S'(rotation +1) ou 'D' (rotation-1)
                index_angle_wp = (
                    (key_pressed[K_s] - key_pressed[K_d]) +
                    self.l_rotation[self.id_weapon]
                ) % self.nb_rotates  #nouvel indice d'angle du canon
                angle_wp_rel = (
                    (index_angle_wp - self.l_rotation[self.id_hull]) %
                    self.nb_rotates) * 360 / self.nb_rotates
                if (
                        angle_wp_rel <= 90 or angle_wp_rel >= 270
                ):  #le canon ne peut être orienté qu'à 90° par rapport au corps du tank, vers la droite ou vers la gauche
                    self.rotates(key_pressed[K_s] - key_pressed[K_d],
                                 self.id_weapon)
            #accélération du tank selon commande d'accélération UP ou DOWN
            self.accel = self.new_accel * (key_pressed[K_UP] -
                                           key_pressed[K_DOWN])

        Agent.bouge(self)  # nouvelle position et orientation du tank

        if self.shell.countdown > 0:  # l'obus a été tiré
            self.shell.countdown -= 1  # décompte le compte à rebours de l'obus
            self.shell.bouge()  # anime l'obus

        if self.shell.explosion.booom:  # l'obus tiré a rencontré un obstacle
            self.shell.explosion.bouge()  # anime l'explosion
Beispiel #3
0
 def __init__(self, terrain, obus, name):
     """
     constructeur de la classe
         terrain    : le terrain sur lequel évolue l'obus
         obus       : l'obus qui a généré l'explosion
         name       : nom de l'agent
     """
     # appel au constructeur de la classe mère Agent: vitesse et accélération nulle, pas de rotation
     Agent.__init__(
         self,
         terrain,
         name,
         l_img_name=[
             'Media/Tank/Explosion/Sprite_Effects_Explosion_000_64x64.png',  # motif explosion 1
             'Media/Tank/Explosion/Sprite_Effects_Explosion_001_64x64.png',  # motif explosion 2
             'Media/Tank/Explosion/Sprite_Effects_Explosion_002_64x64.png',  # motif explosion 3
             'Media/Tank/Explosion/Sprite_Effects_Explosion_003_64x64.png',  # motif explosion 4
             'Media/Tank/Explosion/Sprite_Effects_Explosion_004_64x64.png',  # motif explosion 5
             'Media/Tank/Explosion/Sprite_Effects_Explosion_005_64x64.png',  # motif explosion 6
             'Media/Tank/Explosion/Sprite_Effects_Explosion_006_64x64.png',  # motif explosion 7
             'Media/Tank/Explosion/Sprite_Effects_Explosion_007_64x64.png',  # motif explosion 8
             'Media/Tank/Explosion/Sprite_Effects_Explosion_008_64x64.png'  # motif explosion 9
         ],
         bloc_size=64)
     self.desactivates_all()  # désactive toutes les images
     self.booom = False  # True: l'explosion est visible
Beispiel #4
0
 def __init__(self,
              terrain,
              name,
              l_img_name,
              human=False,
              pos=(0, 0),
              nb_rotates=16):
     """
     constructeur de la classe
         terrain    : le terrain sur lequel évolue le tank
         name       : nom du tank
         l_img_name : liste des noms des images du tank devant être dessinées dans l'ordre de la liste
         human: True si joué par un humain, False si joué par la machine
         pos:  position (x,y) du tank (coin haut gauche)
     """
     # appel au constructeur de la classe mère Agent
     Agent.__init__(self,
                    terrain,
                    name,
                    l_img_name,
                    pos,
                    nb_rotates=64,
                    v=0,
                    vmax=10,
                    accel=0,
                    friction_force=-1,
                    bloc_size=64)
     self.human = human  # True: joué par un humain
     self.id_shield, self.id_hull, self.id_weapon = 0, 1, 2  #id image du bouclier, coprs , canon et tir du tank
     self.new_accel = 1  #accélération du tank quand la commande Acceleration est activée
     self.shell = Shell(self.terrain, self, self.name +
                        ' shell')  # agent "Obus" qui sera activé si tir.
     self.shell_countdown_init = 20  # compte à rebours pour retirer un obus: -1 chaque mouvement
 def bouge(self):
     """
     méthode pour faire bouger l'obus
     """
     if self.timer > 0:   # boule de feux de tir activée au tout début, quand timer = 0
         self.l_actif[self.id_fire]=False
     if self.countdown == 0: # fin du compte à rebourg: arrêt et explosion de l'obus.
         self.v=0
     Agent.bouge(self)
     if self.v==0:        # l'obus a rencontré un obstacle : explosion activée
         self.explosion.pos = (self.pos[0]-self.explosion.half_size+self.half_size,
                               self.pos[1]-self.explosion.half_size+self.half_size ) # positionne l'explosion centrée sur l'obus
         self.explosion.booom = True   # active l'animation de l'explosion
 def bouge(self):
     """
     méthode pour animer l'explosion
     """
     if self.booom:
         if self.timer>0:
             self.l_actif[self.timer-1] = False     # désactive l'imge précédente
         self.l_actif[self.timer] = True            # active image suivante selon timer interne
         if self.timer == len(self.l_img_name) -1 : # fin de l'explosion
             self.booom = False
             self.desactivates_all()
             self.timer = 0
         Agent.bouge(self)
Beispiel #7
0
 def bouge(self):
     """
     méthode pour faire bouger l'obus
     """
     self.l_actif[self.id_fire] = (
         self.timer == 0
     )  # boule de feux de tir activée uniquement au tout début, quand timer = 0
     self.l_actif[self.id_shell] = (self.timer > 0)
     if self.countdown == 0:  # fin du compte à rebourg: arrêt et explosion de l'obus.
         self.v = 0
     Agent.bouge(self)
     if self.v == 0:  # l'obus a rencontré un obstacle : explosion activée
         self.desactivates_all()  #sésactive toutes les images
         self.explosion.pos = (
             self.pos[0] - self.explosion.half_size + self.half_size,
             self.pos[1] - self.explosion.half_size + self.half_size
         )  # positionne l'explosion centrée sur l'obus
         self.explosion.booom = True  # active l'animation de l'explosion
    def bouge(self):
        """
        méthode pour faire bouger le tank
        """
        if self.human:
            key_pressed = pygame.key.get_pressed()   # capture touche pressée
            #orientation du tank si touche pressée LEFT(rotation +1) ou RIGTH(rotation-1)
            self.rotates(key_pressed[K_LEFT] - key_pressed[K_RIGHT])             
            #rotation du canon uniquement si touches pressée  'S'(rotation +1) ou 'D' (rotation-1)
            self.rotates(key_pressed[K_s] - key_pressed[K_d], self.id_weapon)
            #accélération du tank selon commande d'accélération UP ou DOWN
            self.accel = self.new_accel*( key_pressed[K_UP] - key_pressed[K_DOWN] )

        Agent.bouge(self)              # nouvelle position et orientation du tank

        if self.shell.countdown > 0:   # l'obus a été tiré
            self.shell.countdown -= 1  # décompte le compte à rebours de l'obus
            self.shell.bouge()         # anime l'obus

        if self.shell.explosion.booom:   # l'obus tiré a rencontré un obstacle
            self.shell.explosion.bouge() # anime l'explosion