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 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
|
||||||
|
Loading…
Reference in New Issue
Block a user