TraitementParties.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. from Outils.Moteur_de_jeu import Conversion
  2. from Outils.Moteur_de_jeu.Conversion import *
  3. from os import (popen,system)
  4. """
  5. Attention, ce code est conçu pour des plateaux standards : 9 cases sur 9 avec 10 barrières par joueurs
  6. """
  7. def inserer_coup(stats, code_p, code_c) :
  8. """
  9. Mets à jour les stats de la partie code_p pour le coup code_c
  10. """
  11. # Création du tableau des codes de parties à partir du texte brut, puis recherche :
  12. tab_p = [l[:l.find(" ")] for l in stats]
  13. (trouve, id_p) = recherche(tab_p, code_p)
  14. if not trouve :
  15. insertion_place(stats," ", id_p)
  16. # Création du tableau de codes de parties à partir de la ligne brute :
  17. l = stats[id_p]
  18. tab_c_complet = l[l.find(" ") + 1:].split(",")
  19. if tab_c_complet == [''] :
  20. tab_c_complet = []
  21. # Création du tableau de nombres d'occurences :
  22. tab_c = []
  23. tab_n = []
  24. for c in tab_c_complet :
  25. tab_c.append(c[:c.find(":")])
  26. tab_n.append(int(c[c.find(":") + 1:]))
  27. # Recherche du coup et insertion/incrémentation :
  28. (trouve, id_c) = recherche(tab_c, code_c)
  29. if not trouve :
  30. insertion_place(tab_c_complet, code_c + ":1", id_c)
  31. else :
  32. tab_c_complet[id_c] = code_c + ":" + str(tab_n[id_c] + 1)
  33. # Recomposition :
  34. l = code_p + " "
  35. for coup in tab_c_complet :
  36. l += coup + ","
  37. l = l[:-1]
  38. stats[id_p] = l
  39. def analyser_fichier(origine, destination, nom, stats) :
  40. # Déplacement du fichier avant traitement :
  41. original = open(origine + "/" + nom, "r")
  42. contenu = original.readlines()
  43. original.close()
  44. copie = open(destination + "/" + nom, "w")
  45. for l in contenu :
  46. copie.write(l)
  47. copie.close()
  48. ###
  49. gagnant = int(contenu[-1][-1]) - 1
  50. types_joueur = ["",""]
  51. # Recherche du début de la partie :
  52. l = 0
  53. while contenu[l][:3] != "Cou" :
  54. if contenu[l][0] == "J" :
  55. types_joueur[int(contenu[l][7]) - 1] = contenu[l][-2]
  56. l += 1
  57. # On ne prend en compte que les coups joués par des humains :
  58. if types_joueur[gagnant] == "O" :
  59. return
  60. plateau = Plateau(9,9,10)
  61. # Analyse de chaque coup :
  62. while contenu[l][:3] == "Cou" :
  63. s = contenu[l]
  64. #Césure de la ligne :
  65. str_c = s[s.find(":") + 2:]
  66. coup = coup_from_str(str_c)
  67. #Si le coup a été joué par le gagnant, on l'insère dans stats :
  68. if plateau.tour == gagnant :
  69. code_p = code_from_plateau(plateau)
  70. code_c = code_from_coup(coup)
  71. inserer_coup(stats, code_p, code_c)
  72. plateau.executer_coup(coup)
  73. l += 1
  74. def traiter_parties(origine, destination, nom_fichier_stats) :
  75. liste_noms_brute = popen("dir " + origine + " /b").read().split("\n")[:-1]
  76. liste_noms = [nom for nom in liste_noms_brute if nom[-3:] == "txt"]
  77. fichier = open(nom_fichier_stats, "r")
  78. stats = []
  79. for l in fichier :
  80. if l != [] :
  81. stats.append(l[:-1])
  82. fichier.close()
  83. for nom in liste_noms :
  84. analyser_fichier(origine, destination, nom, stats)
  85. fichier = open(nom_fichier_stats, "w")
  86. for l in stats :
  87. fichier.write(l + "\n")
  88. fichier.close()
  89. system("del /Q " + origine)
  90. def test() :
  91. fichier = open("stats.txt", "r")
  92. stats = fichier.readlines()
  93. fichier.close()
  94. stats = inserer_coup([], "bill", "ah_ah")
  95. stats = inserer_coup(stats, "bill", "oh_oh")
  96. stats = inserer_coup(stats, "bill", "ah")
  97. stats = inserer_coup(stats, "bill", "zh_zh")
  98. stats = inserer_coup(stats, "bill", "oh_oh")
  99. stats = inserer_coup(stats, "zzz", "oh_oh")
  100. stats = inserer_coup(stats, "zzz", "oh_oh")
  101. stats = inserer_coup(stats, "gauss", "bah")
  102. stats = inserer_coup(stats, "d", "oh_oh")
  103. stats = inserer_coup(stats, "zzzz", "oh_oh")
  104. fichier = open("stats.txt", "w")
  105. for l in stats :
  106. fichier.write(l + "\n")
  107. fichier.close()
  108. #traiter_parties("PARTIES_A_TRAITER", "PARTIES_TRAITEES", "stats.txt")
  109. traiter_parties("TEST_PARTIES_A_TRAITER", "TEST_PARTIES_TRAITEES", "test_stats.txt")