From 4be4cf5a03605b89bc093955837c7377f0b3b7f8 Mon Sep 17 00:00:00 2001 From: Faraphel Date: Sun, 5 Mar 2023 22:48:55 +0100 Subject: [PATCH] save are now deleted end an history save is created when a game end --- .gitignore | 1 + NOTE.md | 5 ++++- source/__init__.py | 3 +++ source/gui/scene/Game.py | 45 +++++++++++++++++++++++++++++----------- 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 410ed88..0e48dca 100644 --- a/.gitignore +++ b/.gitignore @@ -139,3 +139,4 @@ dmypy.json /.idea/vcs.xml /.save/ +/.history/ diff --git a/NOTE.md b/NOTE.md index b07ad12..df95bdf 100644 --- a/NOTE.md +++ b/NOTE.md @@ -14,9 +14,12 @@ A faire : - Changer les images, rajouter les fonds, mettre la musique, ... - Voir les TODOs +3. Autre : + - test avec "assert" (cahier des charges) + - mode d'emploi (video + pdf) expliquant le fonctionnement Bug : - - Dans de rare cas (souvent en fermant brutalement la fenêtre) le processus ne s'arrête pas + - (incertain) Dans de rare cas (souvent en fermant brutalement la fenêtre) le processus ne s'arrête pas Autre : diff --git a/source/__init__.py b/source/__init__.py index 73d14ce..72642f1 100644 --- a/source/__init__.py +++ b/source/__init__.py @@ -2,3 +2,6 @@ from pathlib import Path path_save: Path = Path(".save") path_save.mkdir(exist_ok=True) + +path_history: Path = Path(".history") +path_history.mkdir(exist_ok=True) diff --git a/source/gui/scene/Game.py b/source/gui/scene/Game.py index d54fb35..147b367 100644 --- a/source/gui/scene/Game.py +++ b/source/gui/scene/Game.py @@ -1,8 +1,10 @@ import json import socket +from datetime import datetime +from pathlib import Path from typing import TYPE_CHECKING -from source import path_save +from source import path_save, path_history from source.core.enums import BombState from source.core.error import InvalidBombPosition, PositionAlreadyShot from source.gui.scene import GameResult @@ -301,6 +303,29 @@ class Game(Scene): board_enemy_data=data["grid_enemy"] ) + @property + def save_path(self) -> Path: + ip_address, port = self.connection.getpeername() + + # Le nom du fichier est l'IP de l'opposent, suivi d'un entier indiquant si c'est à notre tour ou non. + # Cet entier permet aux localhost de toujours pouvoir sauvegarder et charger sans problème. + return path_save / ( + ip_address + + (f"-{int(self.my_turn)}" if ip_address == "127.0.0.1" else "") + + ".bn-save" + ) + + @property + def history_path(self): + return path_history / ( + datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + + ".bn-history" + ) + + def save_to_path(self, path: Path): + with open(path, "w", encoding="utf-8") as file: + json.dump(self.to_json(), file, ensure_ascii=False) + def save(self, value: bool): self.chat_new_message( "System", @@ -308,19 +333,15 @@ class Game(Scene): ) if not value: return - ip_address, port = self.connection.getpeername() - # Le nom du fichier est l'IP de l'opposent, suivi d'un entier indiquant si c'est à notre tour ou non. - # Cet entier permet aux localhost de toujours pouvoir sauvegarder et charger sans problème. - filename: str = ( - ip_address + - (f"-{int(self.my_turn)}" if ip_address == "127.0.0.1" else "") + - ".bn-save" - ) - - with open(path_save / filename, "w", encoding="utf-8") as file: - json.dump(self.to_json(), file, ensure_ascii=False, indent=4) + self.save_to_path(self.save_path) def game_end(self, won: bool): + # s'il existe une ancienne sauvegarde, efface la + self.save_path.unlink(missing_ok=True) + + # sauvegarde cette partie dans l'historique + self.save_to_path(self.history_path) + self.window.add_scene(GameResult, game_scene=self, won=won) # affiche le résultat self.thread.stop() # coupe la connexion