Q_Anti-Gael.py 5.1 KB

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