diff --git a/Nim.py b/Nim.py new file mode 100644 index 0000000..e87b1f5 --- /dev/null +++ b/Nim.py @@ -0,0 +1,90 @@ +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) \ No newline at end of file