import datetime import json import random # Fonction pour afficher les tas def afficher_tas(tas): print("\nVoici les tas actuels :") for i, nb_objets in enumerate(tas): print(f"Tas {i+1}: {nb_objets} objets") print() # Fonction pour vérifier si le jeu est terminé def est_jeu_termine(tas): return all(nb_objets == 0 for nb_objets in tas) # Sauvegarder la partie dans un fichier json def sauvegarder_partie(historique, resultat): partie = { "date": str(datetime.datetime.now()), "historique": historique, "resultat": resultat } # Chargement du fichier JSON existant ou création s'il n'existe pas try: with open("historique_nim.json", "r") as fichier: sauvegardes = json.load(fichier) except FileNotFoundError: sauvegardes = [] # Ajouter la nouvelle partie à l'historique sauvegardes.append(partie) # Sauvegarde dans le fichier with open("historique_nim.json", "w") as fichier: json.dump(sauvegardes, fichier, indent=4) # Heuristique pour l'ordinateur : choisir un tas non vide au hasard et prendre un nombre aléatoire d'objets def heuristique_ordinateur(tas, historique, joueur): tas_non_vide = [i for i, nb_objets in enumerate(tas) if nb_objets > 0] tas_choisi = random.choice(tas_non_vide) if 3 <= tas[tas_choisi]: nb_objets = random.randint(1, 3) elif tas[tas_choisi] == 1: nb_objets = 1 else: nb_objets = random.randint(1, tas[tas_choisi]) tas[tas_choisi] -= nb_objets historique.append(f"Joueur{joueur} a pris {nb_objets} objets du tas {tas_choisi + 1}") print(f"L'ordinateur a pris {nb_objets} objets du tas {tas_choisi + 1}.\n") # Fonction principale pour jouer au jeu def jeu_de_nim(tas_initial, mode="normal"): tas = tas_initial[:] joueur = 1 # 1 pour joueur humain, 2 pour ordinateur afficher_tas(tas) historique = [f"Tas initiaux: {tas}"] while not est_jeu_termine(tas): if joueur == 1: print("Tour du joueur 1 :") heuristique_ordinateur(tas, historique, joueur) else: print("Tour du joueur 2 :") heuristique_ordinateur(tas, historique, joueur) # Changer de joueur joueur = 2 if joueur == 1 else 1 # Condition de victoire/perte if mode == "normal": if joueur == 2: print("Joueur 1 a gagné.") Resultat = ("joueur 1 a gagné") else: print("Joueur 2 a gagné.") Resultat = ("joueur 2 a gagné") elif mode == "misere": if joueur == 2: print("Joueur 2 a perdu (version misère).") Resultat = ("joueur 1 a gagné") else: print("Joueur 1 a perdu (version misère).") Resultat = ("joueur 2 a gagné") sauvegarder_partie(historique,Resultat) tas_initial = [random.randint(5, 10), random.randint(5, 10), random.randint(5, 10)] mode_de_jeu = "normal" jeu_de_nim(tas_initial, mode_de_jeu)