from Outils.Moteur_de_jeu import Conversion from Outils.Moteur_de_jeu.Conversion import * from os import (popen,system) """ Attention, ce code est conçu pour des plateaux standards : 9 cases sur 9 avec 10 barrières par joueurs """ def inserer_coup(stats, code_p, code_c) : """ Mets à jour les stats de la partie code_p pour le coup code_c """ # Création du tableau des codes de parties à partir du texte brut, puis recherche : tab_p = [l[:l.find(" ")] for l in stats] (trouve, id_p) = recherche(tab_p, code_p) if not trouve : insertion_place(stats," ", id_p) # Création du tableau de codes de parties à partir de la ligne brute : l = stats[id_p] tab_c_complet = l[l.find(" ") + 1:].split(",") if tab_c_complet == [''] : tab_c_complet = [] # Création du tableau de nombres d'occurences : tab_c = [] tab_n = [] for c in tab_c_complet : tab_c.append(c[:c.find(":")]) tab_n.append(int(c[c.find(":") + 1:])) # Recherche du coup et insertion/incrémentation : (trouve, id_c) = recherche(tab_c, code_c) if not trouve : insertion_place(tab_c_complet, code_c + ":1", id_c) else : tab_c_complet[id_c] = code_c + ":" + str(tab_n[id_c] + 1) # Recomposition : l = code_p + " " for coup in tab_c_complet : l += coup + "," l = l[:-1] stats[id_p] = l def analyser_fichier(origine, destination, nom, stats) : # Déplacement du fichier avant traitement : original = open(origine + "/" + nom, "r") contenu = original.readlines() original.close() copie = open(destination + "/" + nom, "w") for l in contenu : copie.write(l) copie.close() ### gagnant = int(contenu[-1][-1]) - 1 types_joueur = ["",""] # Recherche du début de la partie : l = 0 while contenu[l][:3] != "Cou" : if contenu[l][0] == "J" : types_joueur[int(contenu[l][7]) - 1] = contenu[l][-2] l += 1 # On ne prend en compte que les coups joués par des humains : if types_joueur[gagnant] == "O" : return plateau = Plateau(9,9,10) # Analyse de chaque coup : while contenu[l][:3] == "Cou" : s = contenu[l] #Césure de la ligne : str_c = s[s.find(":") + 2:] coup = coup_from_str(str_c) #Si le coup a été joué par le gagnant, on l'insère dans stats : if plateau.tour == gagnant : code_p = code_from_plateau(plateau) code_c = code_from_coup(coup) inserer_coup(stats, code_p, code_c) plateau.executer_coup(coup) l += 1 def traiter_parties(origine, destination, nom_fichier_stats) : liste_noms_brute = popen("dir " + origine + " /b").read().split("\n")[:-1] liste_noms = [nom for nom in liste_noms_brute if nom[-3:] == "txt"] fichier = open(nom_fichier_stats, "r") stats = [] for l in fichier : if l != [] : stats.append(l[:-1]) fichier.close() for nom in liste_noms : analyser_fichier(origine, destination, nom, stats) fichier = open(nom_fichier_stats, "w") for l in stats : fichier.write(l + "\n") fichier.close() system("del /Q " + origine) def test() : fichier = open("stats.txt", "r") stats = fichier.readlines() fichier.close() stats = inserer_coup([], "bill", "ah_ah") stats = inserer_coup(stats, "bill", "oh_oh") stats = inserer_coup(stats, "bill", "ah") stats = inserer_coup(stats, "bill", "zh_zh") stats = inserer_coup(stats, "bill", "oh_oh") stats = inserer_coup(stats, "zzz", "oh_oh") stats = inserer_coup(stats, "zzz", "oh_oh") stats = inserer_coup(stats, "gauss", "bah") stats = inserer_coup(stats, "d", "oh_oh") stats = inserer_coup(stats, "zzzz", "oh_oh") fichier = open("stats.txt", "w") for l in stats : fichier.write(l + "\n") fichier.close() #traiter_parties("PARTIES_A_TRAITER", "PARTIES_TRAITEES", "stats.txt") traiter_parties("TEST_PARTIES_A_TRAITER", "TEST_PARTIES_TRAITEES", "test_stats.txt")