ajout de la fonctionnalité d'écriture des scores et coups dans un fichier

This commit is contained in:
2024-10-23 13:16:30 +02:00
parent f6992c8cab
commit 0d6c5518b0
2 changed files with 92 additions and 6 deletions

View File

@@ -470,6 +470,72 @@
" # Position avantageuse (gagnante)\n", " # Position avantageuse (gagnante)\n",
" return sum(etat_jeu) # Heuristique standard" " return sum(etat_jeu) # Heuristique standard"
] ]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Bonus"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# création d'un système de sauvegarde des parties jouées\n",
"\n",
"def sauvegarder_partie(historique):\n",
" \"\"\"\n",
" Sauvegarde l'historique de la partie dans un fichier.\n",
" \n",
" :param historique: Liste des coups effectués pendant la partie.\n",
" :param fichier: Nom du fichier où sauvegarder l'historique.\n",
" \"\"\"\n",
" fichier = \"historique.txt\"\n",
" with open(fichier, \"a\") as f:\n",
" f.write(\"Nouvelle partie :\")\n",
" for coup in historique:\n",
" f.write(f\"{coup} \")\n",
" f.write(\"\\n\")\n",
"\n",
"\n",
"# modification de la fonction jeu_nim pour sauvegarder l'historique des coups\n",
"def jeu_nim(etat_initial):\n",
" etat = etat_initial[:]\n",
" historique = []\n",
" while not est_etat_final(etat):\n",
" afficher_etat(etat)\n",
" try:\n",
" pile = int(input(\"Entrez le numéro de la pile (1, 2, 3, ...): \")) - 1\n",
" nb_objets = int(input(\"Entrez le nombre d'objets à retirer: \"))\n",
" historique.append(f\"Joueur: Pile {pile + 1}, Objets retirés: {nb_objets}\")\n",
" appliquer_mouvement(etat, pile, nb_objets)\n",
" historique.append(f\"Player: {etat}\")\n",
" afficher_etat(etat)\n",
" except ValueError:\n",
" print(\"Entrée invalide. Veuillez entrer des nombres entiers.\")\n",
" continue\n",
"\n",
" if est_etat_final(etat):\n",
" print(\"\\nFélicitations ! Vous avez gagné !\")\n",
" break\n",
"\n",
" # Tour de l'IA\n",
" chemin_optimal = algorithme_a_star(etat)\n",
" if chemin_optimal and len(chemin_optimal) > 1:\n",
" etat_ia = chemin_optimal[1]\n",
" historique.append(f\"IA: Pile {pile + 1}, Objets retirés: {nb_objets}\")\n",
" print(\"\\nL'IA joue...\")\n",
" etat = etat_ia\n",
" historique.append(f\"AI: {etat}\")\n",
"\n",
" if est_etat_final(etat):\n",
" print(\"\\n L'IA a gagné !\")\n",
" break\n",
" sauvegarder_partie(historique)"
]
} }
], ],
"metadata": { "metadata": {

View File

@@ -91,6 +91,7 @@ def algorithme_a_star(etat_initial):
return None return None
#affichade d'un chemin
def reconstruire_chemin(noeud_final): def reconstruire_chemin(noeud_final):
""" """
Reconstruit la séquence de mouvements depuis létat initial jusquà létat final. Reconstruit la séquence de mouvements depuis létat initial jusquà létat final.
@@ -105,20 +106,27 @@ def reconstruire_chemin(noeud_final):
noeud_courant = noeud_courant.parent noeud_courant = noeud_courant.parent
return chemin[::-1] return chemin[::-1]
def sauvegarder_partie(historique, fichier="historique_parties.txt"):
#sauvegarde de partie
def sauvegarder_partie(historique):
""" """
Sauvegarde l'historique de la partie dans un fichier. Sauvegarde l'historique de la partie dans un fichier.
:param historique: Liste des coups effectués pendant la partie. :param historique: Liste des coups effectués pendant la partie.
:param fichier: Nom du fichier où sauvegarder l'historique. :param fichier: Nom du fichier où sauvegarder l'historique.
""" """
fichier = "historique.txt"
with open(fichier, "a") as f: with open(fichier, "a") as f:
f.write("Nouvelle partie\n") f.write("Nouvelle partie :")
for coup in historique: for coup in historique:
f.write(f"{coup}\n") f.write(f"{coup} ")
f.write("\n") f.write("\n")
#jeu de nim version joueur vs IA
def jeu_nim(etat_initial): def jeu_nim(etat_initial):
etat = etat_initial[:] etat = etat_initial[:]
historique = [] historique = []
@@ -129,6 +137,7 @@ def jeu_nim(etat_initial):
nb_objets = int(input("Entrez le nombre d'objets à retirer: ")) nb_objets = int(input("Entrez le nombre d'objets à retirer: "))
historique.append(f"Joueur: Pile {pile + 1}, Objets retirés: {nb_objets}") historique.append(f"Joueur: Pile {pile + 1}, Objets retirés: {nb_objets}")
appliquer_mouvement(etat, pile, nb_objets) appliquer_mouvement(etat, pile, nb_objets)
historique.append(f"Player: {etat}")
afficher_etat(etat) afficher_etat(etat)
except ValueError: except ValueError:
print("Entrée invalide. Veuillez entrer des nombres entiers.") print("Entrée invalide. Veuillez entrer des nombres entiers.")
@@ -145,21 +154,28 @@ def jeu_nim(etat_initial):
historique.append(f"IA: Pile {pile + 1}, Objets retirés: {nb_objets}") historique.append(f"IA: Pile {pile + 1}, Objets retirés: {nb_objets}")
print("\nL'IA joue...") print("\nL'IA joue...")
etat = etat_ia etat = etat_ia
historique.append(f"AI: {etat}")
if est_etat_final(etat): if est_etat_final(etat):
print("\n L'IA a gagné !") print("\n L'IA a gagné !")
break break
sauvegarder_partie(historique) sauvegarder_partie(historique)
#pile aléatoire
def pile_random(etat) : def pile_random(etat) :
piles_non_vides = [i for i, pile in enumerate(etat) if pile > 0] piles_non_vides = [i for i, pile in enumerate(etat) if pile > 0]
return random.choice(piles_non_vides) return random.choice(piles_non_vides)
# nombre d'objets aléatoire selon la pile
def nb_objets_random(etat, pile): def nb_objets_random(etat, pile):
return random.randint(1, etat[pile]) return random.randint(1, etat[pile])
## jeu de nim version aléatoire vs IA
def jeu_nim_random(etat_initial): def jeu_nim_random(etat_initial):
etat = etat_initial[:] etat = etat_initial[:]
historique = [] historique = []
@@ -168,7 +184,7 @@ def jeu_nim_random(etat_initial):
try: try:
pile = pile_random(etat) pile = pile_random(etat)
nb_objets = nb_objets_random(etat, pile) nb_objets = nb_objets_random(etat, pile)
historique.append(f"Joueur: Pile {pile + 1}, Objets retirés: {nb_objets}") historique.append(f"Player : {etat}")
appliquer_mouvement(etat, pile, nb_objets) appliquer_mouvement(etat, pile, nb_objets)
afficher_etat(etat) afficher_etat(etat)
except ValueError: except ValueError:
@@ -183,9 +199,9 @@ def jeu_nim_random(etat_initial):
chemin_optimal = algorithme_a_star(etat) chemin_optimal = algorithme_a_star(etat)
if chemin_optimal and len(chemin_optimal) > 1: if chemin_optimal and len(chemin_optimal) > 1:
etat_ia = chemin_optimal[1] etat_ia = chemin_optimal[1]
historique.append(f"IA: Pile {pile + 1}, Objets retirés: {nb_objets}")
print("\nL'IA joue...") print("\nL'IA joue...")
etat = etat_ia etat = etat_ia
historique.append(f"AI: {etat}")
if est_etat_final(etat): if est_etat_final(etat):
print("\n L'IA a gagné !") print("\n L'IA a gagné !")
@@ -193,5 +209,9 @@ def jeu_nim_random(etat_initial):
sauvegarder_partie(historique) sauvegarder_partie(historique)
#main
etat_initial = [3, 4, 5] etat_initial = [3, 4, 5]
jeu_nim_random(etat_initial) jeu_nim_random(etat_initial)