Bonjour,
Je code un petit jeu (canons qui se tirent dessus). Il y a possibilité de jouer contre un canon controlé par l'ordi. Pour éviter des combats statiques, les canons sont replacés après leurs tirs. Donc l'IA doit se réorienter vers la nouvelle position du canon. Le problème c'est que la réorientation ne se fait pas.
Pour les classes utilisées : Canon (création d'un canon controlé par le joueur, et classe mère de Ordi), et Ordi (classe gérant les canons gérés par l'ordi).
Voici le code concerné (j'ai retiré l'inutile) :
N'hésitez pas si vous avez besoin d'infos complémentaires.Code:class Canon : """Création du canon et de la fonctionnalité d'ajustement de la buse.""" # Création du canon def __init__(self, canv, x, y, fen, coul_buse = 'Black', coul_corps = 'Black', nom = "") : # code def orientation(self, angle) : """Orientation de la buse du canon pour choisir l'angle de tir.""" self.ang = float(angle) * pi / 180 # Conversion de la chaine de caractère 'angle' en radians self.x2 = self.x1 + self.l_bu * cos(self.ang) self.y2 = self.y1 + self.l_bu * sin(self.ang) self.canv.coords(self.buse, self.x1, self.y1, self.x2, self.y2) # buse est la partie orientable du canon # x1, y1 => base de la buse # x2, y2 => bout de la buse def verifier(self) : # code def feu(self) : # code self.replacer() def modifier_couleur(self, elt_a_modifier, nvle_couleur = "") : # code def anim_explosion(self, intervalle = 50, _previous = None) : # code def replacer(self) : """Après chaque tir, le canon est déplacé.""" nvl_pos_x_canon, nvl_pos_y_canon = randint(50, 450), randint(50, 450) # code self.x1 = nvl_pos_x_canon self.y1 = nvl_pos_y_canon dict_cibles[self.nom] = (self.x1, self.y1) # MàJ de la position du canon dans le dictionnaire self.orientation(0) reorientation_ordi() # les canons controlés par l'ordi sont réorientés class Ordi(Canon) : """Création d'un adversaire controlé par l'ordi.""" def __init__(self, canvas, x, y, matrice, difficulte, coul_buse_ordi = 'Black', coul_corps_ordi = 'Black', nom = "") : # code self.angle_tir() # orientation dès la création def angle_tir(self) : """On choisit l'angle a adopter en fonction de la cible choisie. Etape 1 : on choisit une cible. Etape 2 : on détermine si la cible se trouve plus haut ou plus bas que le canon controlé par l'ordi. Etape 3 : calcul de l'angle. Etape 4 : ajustements. Etape 5 : orientation du canon.""" x_cible_choisie, y_cible_choisie = self.choisir_cible() # Etape 1 if self.y1 < y_cible_choisie : # Etape 2 angle = atan((y_cible_choisie - self.y1) / (x_cible_choisie - self.x1)) * (180 / pi) # Etape 3 if self.x1 > x_cible_choisie : angle -= 180 # Etape 4 else : angle = atan((x_cible_choisie - self.x1) / (y_cible_choisie - self.y1)) * (180 / pi) # Etape 3 angle = 360 - abs(angle) # Etape 4 if self.x1 > x_cible_choisie : angle -= 90 # Etape 4 self.orientation(angle) # Etape 5 def choisir_cible(self) : """Choisi aléatoirement la cible sur laquelle va tirer l'ordi.""" if nb_canons - 1 != 0 : # nb_canons est une variable globale contenant le nombre de canons joués par le/les utilisateurs pos_cible = randint(0, nb_canons - 1) else : pos_cible = 0 tuple_pos = dict_cibles[pos_cible] # récupération du tuple contenant les positions x et y de la cible # Le dictionnaire contient toutes les cibles possibles (canons créés par l'ordi + leurs positions) Ex : {"Billy" : (x, y)} x_cible = tuple_pos[0] # récupération de la position x y_cible = tuple_pos[1] # récupération de la position y return x_cible, y_cible def reorientation_ordi() : # méthode globale pour une interaction Canon-Ordi facilitée for elt in liste_adversaires : # liste contenant tout les adversaires créés elt.angle_tir()
Merci.
P.S : si vous voyez des problèmes concernant l'héritage, merci de le faire remarquer. Je ne le maîtrise pas encore totalement.
-----