Joueur.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. """
  2. Convention :
  3. Toute I.A. possède une méthode calculer_coup. Celle-ci prend en argument le plateau de la situation courante et la liste des coups autorisés. Elle retourne un indice.
  4. """
  5. from random import randint
  6. from Outils.Moteur_de_jeu.Coup import * #Utilisé dans IA_random
  7. class Joueur : #Quentin 13/10/2016
  8. def __init__(self, jtype, nom) : #Quentin 14/10/2016
  9. self.type = jtype #"H" ou "O"
  10. self.nom = nom
  11. self.num = 0 #Par défaut, est modifié au début de la partie
  12. def est_humain(joueur) :
  13. return joueur.type == "H"
  14. class Humain(Joueur) : #Quentin 14/10/2016
  15. def __init__(self,nom) : #Quentin 14/10/2016
  16. Joueur.__init__(self,"H",nom)
  17. class IA_random(Joueur) :
  18. """ I.A. aléatoire, pour tester. Hérite de la classe Joueur. """
  19. def __init__(self, nom) : #Quentin 13/10/2016
  20. Joueur.__init__(self, "O", nom)
  21. def calculer_coup(self, plateau, liste_coups) : #Quentin 13/10/2016
  22. indices_M = []
  23. indices_B = []
  24. for i in range(len(liste_coups)) :
  25. if liste_coups[i].type == "M" :
  26. indices_M.append(i)
  27. else :
  28. indices_B.append(i)
  29. #On choisit un des deux types de mouvement, on mélange la liste qui lui correspond et on en retourne le premier élément sous forme de coup
  30. if randint(0,1) == 1 or indices_B == [] : #Si aucune barrière ne peut être placée, on est obligé de se déplacer
  31. i = randint(0, len(indices_M) - 1)
  32. return indices_M[i]
  33. else :
  34. return randint(0, len(indices_B) - 1)
  35. return indices_B[i]