fct_eval_elric.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. from Outils.Moteur_de_jeu import *
  2. from Outils.Moteur_de_jeu.Partie import *
  3. from Outils import alphabeta
  4. from Outils.alphabeta import *
  5. from Outils.Moteur_de_jeu import *
  6. from Outils.Moteur_de_jeu.Partie import *
  7. from Outils import IA_alphabeta
  8. from Outils.IA_alphabeta import *
  9. def fct_eval_basique(plateau, num) :
  10. return plateau.longueur_chemin(1 - num) - plateau.longueur_chemin(num)
  11. def fct_eval_heuristique_1 (plateau,num) :
  12. nIA = plateau.longueur_chemin(num)
  13. n_opponent = plateau.longueur_chemin(1-num)
  14. b_IA = plateau.barrieres_restantes[num]
  15. return -nIA + n_opponent + 0.001 * b_IA
  16. def fct_eval_heuristique_2 (plateau,num):
  17. def f(n) :
  18. t = [1000000000,1000000,40,38]
  19. a = len(t)
  20. if n< a : return t[n]
  21. else :
  22. return 40-n
  23. def g(b) :
  24. t = [6,4,2,0,-2,-4,-6,-8,-10,-12.9,-15.8]
  25. return t[10-b]
  26. def g2(b) :
  27. t = [0.5,0,-0.5,-1,-1.5,-2,-3,-4,-5,-7.9,-10.8]
  28. return t[10-b]
  29. nIA = plateau.longueur_chemin(num)
  30. n_opponent = plateau.longueur_chemin(1-num)
  31. b_IA = plateau.barrieres_restantes[num]
  32. b_opponent = plateau.barrieres_restantes[1-num]
  33. if IA_minmax_alpha_beta.dist == None or IA_minmax_alpha_beta.dist > 5 :
  34. return f(nIA) - f(n_opponent) + g(b_IA) - g(b_opponent)
  35. return f(nIA) - f(n_opponent) + g2(b_IA) - g2(b_opponent)
  36. def panzer (plateau,num) :
  37. if plateau.rangee_desiree(num) == 8 :
  38. b1 = Barriere ("h", 3, 5)
  39. b2 = Barriere ("h", 6, 5)
  40. tr = [b1,b2]
  41. bar = plateau.liste_barrieres_possibles()
  42. for k in tr :
  43. if k in plateau.liste_barrieres :
  44. suppr (tr,k)
  45. for k in bar :
  46. if k == b1 :
  47. return Coup("B", barriere = b1)
  48. elif k == b2 :
  49. return Coup("B", barriere = b2)
  50. if plateau.joueur_sur_case( 1 - num, 5, 6) :
  51. b1 = Barriere ("v", 5, 4)
  52. b2 = Barriere ("v", 3, 4)
  53. b3 = Barriere ("v", 4, 4)
  54. b4 = Barriere ("v", 6, 4)
  55. t = [b1,b2,b3,b4]
  56. for k in t :
  57. if k in plateau.liste_barrieres :
  58. suppr (t,k)
  59. if len(t)==4 :
  60. for k in bar :
  61. if k == b1 :
  62. return Coup("B", barriere = b1)
  63. for k in bar :
  64. if k == b2 :
  65. return Coup("B", barriere = b2)
  66. for k in bar :
  67. if k == b3 :
  68. return Coup("B", barriere = b3)
  69. for k in bar :
  70. if k == b4 :
  71. return Coup("B", barriere = b4)
  72. else :
  73. b1 = Barriere ("h", 3, 2)
  74. b2 = Barriere ("h", 6, 2)
  75. tr = [b1,b2]
  76. bar = plateau.liste_barrieres_possibles()
  77. for k in tr :
  78. if k in plateau.liste_barrieres :
  79. suppr (tr,k)
  80. for k in bar :
  81. if k == b1 :
  82. return Coup("B", barriere = b1)
  83. elif k == b2 :
  84. return Coup("B", barriere = b2)
  85. if plateau.joueur_sur_case( 1 - num, 5, 2) :
  86. b1 = Barriere ("v", 5, 3)
  87. b2 = Barriere ("v", 3, 3)
  88. b3 = Barriere ("v", 4, 3)
  89. b4 = Barriere ("v", 6, 3)
  90. t = [b1,b2,b3,b4]
  91. for k in t :
  92. if k in plateau.liste_barrieres :
  93. suppr (t,k)
  94. if len(t)==4 :
  95. for k in bar :
  96. if k == b1 :
  97. return Coup("B", barriere = b1)
  98. for k in bar :
  99. if k == b2 :
  100. return Coup("B", barriere = b2)
  101. for k in bar :
  102. if k == b3 :
  103. return Coup("B", barriere = b3)
  104. for k in bar :
  105. if k == b4 :
  106. return Coup("B", barriere = b4)
  107. return (Coup("B", barriere = Barriere ("v", 42, 42) ))
  108. class IA_Anti_Gaël(Joueur) :
  109. def __init__(self, nom, fct_eval, prof ) :
  110. """
  111. la fonction d'évaluation sera donnée en entrée, et évaluera les positions.
  112. prof indique la profondeur souhaitée
  113. """
  114. Joueur.__init__(self,"O",nom)
  115. self.fct_eval = fct_eval
  116. self.prof = prof
  117. def calculer_coup( self, plateau, liste_coup) :
  118. #1. : avoir l'arbre
  119. #2. : calculer le coup
  120. #3 : le ressortir (trouver son indexation dans la liste des coups)
  121. #etape 1
  122. coup = panzer(plateau, self.num)
  123. if not coup == Coup("B", barriere = Barriere ("v", 42, 42)) :
  124. for i in range(len(liste_coup)) :
  125. if liste_coup[i] == coup :
  126. return i
  127. return obtenir_coup(self.num, plateau, self.fct_eval, self.prof)
  128. def fct_eval_anti_gael(plateau, num) :
  129. nIA = plateau.longueur_chemin(num)
  130. n_opponent = plateau.longueur_chemin(1-num)
  131. b_IA = plateau.barrieres_restantes[num]
  132. b_opponent = plateau.barrieres_restantes[1-num]
  133. """
  134. if deux_chemins(plateau,num) : c = -4
  135. if deux_chemins (plateau,1-num) : d = 3
  136. """
  137. def f(n) :
  138. t = [1000000000,1000000,40,38]
  139. a = len(t)
  140. if n< a : return t[n]
  141. else :
  142. return 40-n
  143. def g(b) :
  144. t = [6,4,2,0,-2,-4,-6,-8,-10,-12.9,-15.8]
  145. return t[10-b]
  146. def g2(b) :
  147. t = [0.5,0,-0.5,-1,-1.5,-2,-3,-4,-5,-7.9,-10.8]
  148. return t[10-b]
  149. if IA_minmax_alpha_beta.dist == None or IA_minmax_alpha_beta.dist >5 :
  150. return f(nIA) - f(n_opponent) + g(b_IA) - g(b_opponent)
  151. return f(nIA) - f(n_opponent) + g2(b_IA) - g2(b_opponent)