90 lines
3.1 KiB
Python
90 lines
3.1 KiB
Python
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) |