Téléverser les fichiers vers "/"

This commit is contained in:
Jean-Luc NELET 2024-10-23 11:59:32 +02:00
parent 3c90658549
commit 5463fa770a

36
app.py
View File

@ -1,4 +1,6 @@
import heapq import heapq
import csv
from datetime import datetime
# Exercice 1 : Affichage de l'état du jeu # Exercice 1 : Affichage de l'état du jeu
def afficher_etat(etat_jeu): def afficher_etat(etat_jeu):
@ -102,20 +104,33 @@ def strategie_gagnante(etat_jeu):
# Pas de stratégie gagnante, faire un mouvement quelconque # Pas de stratégie gagnante, faire un mouvement quelconque
for i, tas in enumerate(etat_jeu): for i, tas in enumerate(etat_jeu):
if tas > 0: 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: else:
# Stratégie gagnante : trouver le tas à modifier # Stratégie gagnante : trouver le tas à modifier
for i, tas in enumerate(etat_jeu): for i, tas in enumerate(etat_jeu):
target = tas ^ xor_total target = tas ^ xor_total
if target < tas: 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 # Exercice 9 : Interface utilisateur et IA
def jouer_nim(): def jouer_nim():
# Initialiser l'état du jeu # Initialiser l'état du jeu
etat_jeu = [3, 4, 5] etat_jeu = [3, 4, 5]
historique = [] # Historique des coups (tas, nb_objets, joueur)
while True: while True:
# Afficher l'état actuel du jeu # Afficher l'état actuel du jeu
@ -133,6 +148,7 @@ def jouer_nim():
nouvel_etat = appliquer_mouvement(etat_jeu, tas_index, nb_objets) nouvel_etat = appliquer_mouvement(etat_jeu, tas_index, nb_objets)
if nouvel_etat: if nouvel_etat:
historique.append((tas_index + 1, nb_objets, "Joueur"))
etat_jeu = nouvel_etat etat_jeu = nouvel_etat
else: else:
continue # Demande de nouveau si le mouvement est invalide continue # Demande de nouveau si le mouvement est invalide
@ -141,16 +157,28 @@ def jouer_nim():
if est_etat_final(etat_jeu): if est_etat_final(etat_jeu):
afficher_etat(etat_jeu) afficher_etat(etat_jeu)
print("Vous avez gagné !") print("Vous avez gagné !")
date_partie = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
sauvegarder_historique(date_partie, "Joueur", historique)
break break
# Tour de l'IA avec la stratégie gagnante # Tour de l'IA avec la stratégie gagnante
print("C'est au tour de l'IA...") 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é # Vérifier si l'IA a gagné
if est_etat_final(etat_jeu): if est_etat_final(etat_jeu):
afficher_etat(etat_jeu) afficher_etat(etat_jeu)
print("L'IA a gagné !") print("L'IA a gagné !")
date_partie = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
sauvegarder_historique(date_partie, "IA", historique)
break break
# Lancer le jeu # Lancer le jeu