57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
from server.GameBoard import GameBoard
|
|
from server.Files import save_file
|
|
|
|
import json, os
|
|
|
|
class LocalStorage:
|
|
def __init__(self, file_path:str):
|
|
self.save_folder_dict = {
|
|
"standart": "01_Standart",
|
|
"duel": "02_Duels",
|
|
"constrictor": "04_Constrictor",
|
|
"solo": "05_Solo",
|
|
}
|
|
self.file_path = file_path
|
|
|
|
def _get_correct_folder_for_save_file(self, game_board:GameBoard, file_name:str, game_type:str, leader_board:bool, winner:bool):
|
|
storage_folder = self.file_path
|
|
if leader_board:
|
|
storage_folder = os.path.join(storage_folder, "00_Leaderboards")
|
|
|
|
storage_folder = os.path.join(storage_folder, self.save_folder_dict[game_type])
|
|
storage_folder = os.path.join(storage_folder, game_board.now_date.strftime('%Y'), game_board.now_date.strftime('%m_%B'), game_board.now_date.strftime('%d'))
|
|
|
|
if winner:
|
|
storage_folder = os.path.join(storage_folder, "Winner")
|
|
else:
|
|
storage_folder = os.path.join(storage_folder, "Lost")
|
|
|
|
return os.path.join(storage_folder, file_name)
|
|
|
|
def save(self, game_board:GameBoard):
|
|
game_type = game_board.get_type_of_game()
|
|
save_file_path = self._get_correct_folder_for_save_file(
|
|
game_board,
|
|
f"{game_board.snake_class.__class__.__name__}_{game_board.now_date.strftime('%H-%M-%S')}_{game_board.id}.json",
|
|
game_type["name"],
|
|
game_type["is_ladder"],
|
|
True if game_board.winner_snake_names and "me" in game_board.winner_snake_names else False
|
|
)
|
|
|
|
save_file(save_file_path, {
|
|
"winner": game_board.winner_snake_names,
|
|
"game": {
|
|
"url": game_board.url,
|
|
"id": game_board.id,
|
|
"final_turns": game_board.turn,
|
|
"map": game_board.map,
|
|
"type": game_type,
|
|
"ruleset": game_board.ruleset,
|
|
},
|
|
"moves": game_board.turns,
|
|
"snake": {
|
|
"type": game_board.snake_class.__class__.__name__,
|
|
"calculations": game_board.snake_class.get_history(),
|
|
},
|
|
}, callback=json.dump, indent=2, ensure_ascii=False)
|