Téléverser les fichiers vers "/"
This commit is contained in:
parent
3c90658549
commit
5463fa770a
36
app.py
36
app.py
@ -1,4 +1,6 @@
|
||||
import heapq
|
||||
import csv
|
||||
from datetime import datetime
|
||||
|
||||
# Exercice 1 : Affichage de l'état du jeu
|
||||
def afficher_etat(etat_jeu):
|
||||
@ -102,20 +104,33 @@ def strategie_gagnante(etat_jeu):
|
||||
# Pas de stratégie gagnante, faire un mouvement quelconque
|
||||
for i, tas in enumerate(etat_jeu):
|
||||
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:
|
||||
# Stratégie gagnante : trouver le tas à modifier
|
||||
for i, tas in enumerate(etat_jeu):
|
||||
target = tas ^ xor_total
|
||||
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
|
||||
def jouer_nim():
|
||||
# Initialiser l'état du jeu
|
||||
etat_jeu = [3, 4, 5]
|
||||
historique = [] # Historique des coups (tas, nb_objets, joueur)
|
||||
|
||||
while True:
|
||||
# Afficher l'état actuel du jeu
|
||||
@ -133,6 +148,7 @@ def jouer_nim():
|
||||
|
||||
nouvel_etat = appliquer_mouvement(etat_jeu, tas_index, nb_objets)
|
||||
if nouvel_etat:
|
||||
historique.append((tas_index + 1, nb_objets, "Joueur"))
|
||||
etat_jeu = nouvel_etat
|
||||
else:
|
||||
continue # Demande de nouveau si le mouvement est invalide
|
||||
@ -141,16 +157,28 @@ def jouer_nim():
|
||||
if est_etat_final(etat_jeu):
|
||||
afficher_etat(etat_jeu)
|
||||
print("Vous avez gagné !")
|
||||
date_partie = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
sauvegarder_historique(date_partie, "Joueur", historique)
|
||||
break
|
||||
|
||||
# Tour de l'IA avec la stratégie gagnante
|
||||
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é
|
||||
if est_etat_final(etat_jeu):
|
||||
afficher_etat(etat_jeu)
|
||||
print("L'IA a gagné !")
|
||||
date_partie = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
sauvegarder_historique(date_partie, "IA", historique)
|
||||
break
|
||||
|
||||
# Lancer le jeu
|
||||
|
Loading…
Reference in New Issue
Block a user