from server.Files import save_file import os class GameStorage: def __init__(self, snake:str, path:str): self.snake_type = snake self.folder = path self.winner_snake_names = None def start_new_game(self, game_type:dict, game_board:dict, snake:dict): self.game_type = game_type self.start_position = snake self.game_board = [game_board] self.moves = [] def add_moves(self, game_board:dict, my_move:str): self.game_board.append(game_board) self.moves.append(my_move) def add_end_state(self, game_board:dict, snake_history_state:list[dict], final_turns:int): self.game_board.append(game_board) self.snake_history = snake_history_state self._set_winner_snake_name(game_board['snakes']) self.final_turns = final_turns def _set_winner_snake_name(self, snakes:list[dict]): if self.start_position["id"] in [ x["id"] for x in snakes]: self.winner_snake_names = "me" else: self.winner_snake_names = [ x["name"] for x in snakes] def _get_type_of_gameboard(self): if len(self.game_board[0]["snakes"]) == 2: return "duel" return "standart" def save(self, path:str, callback=None, **kwargs): if self.winner_snake_names == "me" and self.final_turns <= 10: return None save_file(os.path.join(self.folder, path), { "snake": { "type": self.snake_type, "choices": self.snake_history, }, "game": { "type": self._get_type_of_gameboard(), "infos": self.game_type, "snake_start": self.start_position, "final_turns": self.final_turns, "gameboard": self.game_board, "my_moves": self.moves, }, "winner": self.winner_snake_names, }, callback=callback, **kwargs) def __str__(self): return f"<{self.__class__.__name__}> Snake: {self.snake_type}, Folder: {self.folder}, Winner: {self.winner_snake_names}, Old Moves: {self.moves}"