diff --git a/app.py b/app.py index 5de626e..bcdef69 100644 --- a/app.py +++ b/app.py @@ -1,4 +1,6 @@ import heapq +import csv +from datetime import datetime # Exercice 1 : Affichage de l'état du jeu def afficher_etat(etat_jeu): @@ -102,20 +104,33 @@ def strategie_gagnante(etat_jeu): # Pas de stratégie gagnante, faire un mouvement quelconque for i, tas in enumerate(etat_jeu): if tas > 0: - return appliquer_mouvement(etat_jeu, i, min(3, tas)) # Retire le maximum autorisé + return appliquer_mouvement(etat_jeu, i, min(3, tas)), i + 1, min(3, tas) # Retire le maximum autorisé else: # Stratégie gagnante : trouver le tas à modifier for i, tas in enumerate(etat_jeu): target = tas ^ xor_total if target < tas: - return appliquer_mouvement(etat_jeu, i, tas - target) + return appliquer_mouvement(etat_jeu, i, tas - target), i + 1, tas - target - return None # Aucun mouvement possible + return None, None, None # Aucun mouvement possible + +# Fonction pour sauvegarder l'historique dans un fichier CSV, format sur une seule ligne +def sauvegarder_historique(date_partie, vainqueur, historique, fichier="historique_parties.csv"): + # Construire la séquence des coups + coups = [] + for tas, nb_objets, joueur in historique: + coups.append(f"{joueur}({tas},{nb_objets})") + + with open(fichier, mode='a', newline='') as file: + writer = csv.writer(file) + # Une seule ligne avec la date, le vainqueur et tous les coups + writer.writerow([date_partie, vainqueur] + coups) # Exercice 9 : Interface utilisateur et IA def jouer_nim(): # Initialiser l'état du jeu etat_jeu = [3, 4, 5] + historique = [] # Historique des coups (tas, nb_objets, joueur) while True: # Afficher l'état actuel du jeu @@ -133,6 +148,7 @@ def jouer_nim(): nouvel_etat = appliquer_mouvement(etat_jeu, tas_index, nb_objets) if nouvel_etat: + historique.append((tas_index + 1, nb_objets, "Joueur")) etat_jeu = nouvel_etat else: continue # Demande de nouveau si le mouvement est invalide @@ -141,16 +157,28 @@ def jouer_nim(): if est_etat_final(etat_jeu): afficher_etat(etat_jeu) print("Vous avez gagné !") + date_partie = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + sauvegarder_historique(date_partie, "Joueur", historique) break # Tour de l'IA avec la stratégie gagnante print("C'est au tour de l'IA...") - etat_jeu = strategie_gagnante(etat_jeu) + nouvel_etat, tas_ia, nb_objets_ia = strategie_gagnante(etat_jeu) + + # Gérer les mouvements invalides pour l'IA + if nouvel_etat is None: + print("IA n'a pas trouvé de mouvement valide.") + continue + + historique.append((tas_ia, nb_objets_ia, "IA")) + etat_jeu = nouvel_etat # Vérifier si l'IA a gagné if est_etat_final(etat_jeu): afficher_etat(etat_jeu) print("L'IA a gagné !") + date_partie = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + sauvegarder_historique(date_partie, "IA", historique) break # Lancer le jeu