make new LocalStorage Class and move save functions into it
This commit is contained in:
+10
-52
@@ -1,14 +1,6 @@
|
|||||||
from server.Files import save_file
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import os
|
|
||||||
|
|
||||||
class GameBoard:
|
class GameBoard:
|
||||||
save_folder_dict = {
|
|
||||||
"standart": "01_Standart",
|
|
||||||
"duel": "02_Duels",
|
|
||||||
"constrictor": "04_Constrictor",
|
|
||||||
}
|
|
||||||
|
|
||||||
def __init__(self, game_id:str, width:int, height:int, ruleset:dict, source:str, map:str, snake_class):
|
def __init__(self, game_id:str, width:int, height:int, ruleset:dict, source:str, map:str, snake_class):
|
||||||
self.id = game_id
|
self.id = game_id
|
||||||
self.width = width
|
self.width = width
|
||||||
@@ -19,10 +11,11 @@ class GameBoard:
|
|||||||
# What will get Stored
|
# What will get Stored
|
||||||
self.winner_snake_names = None
|
self.winner_snake_names = None
|
||||||
self.now_date = datetime.now()
|
self.now_date = datetime.now()
|
||||||
self.turns = {}
|
self.turns = []
|
||||||
self.is_ladder = True if source == "ladder" else False
|
self.is_ladder = True if source == "ladder" else False
|
||||||
self.ruleset = ruleset
|
self.ruleset = ruleset
|
||||||
self.map = map
|
self.map = map
|
||||||
|
self.url = self._get_game_url(True if ruleset["version"] == "cli" else False)
|
||||||
|
|
||||||
# Setter Functions
|
# Setter Functions
|
||||||
def _set_snakes(self, snakes:list[dict]):
|
def _set_snakes(self, snakes:list[dict]):
|
||||||
@@ -109,10 +102,13 @@ class GameBoard:
|
|||||||
# Function get Called from Server
|
# Function get Called from Server
|
||||||
def snake_neat_make_a_move(self):
|
def snake_neat_make_a_move(self):
|
||||||
move = self.snake_class.choose_move(self)
|
move = self.snake_class.choose_move(self)
|
||||||
self.turns[self.turn] = {
|
|
||||||
|
self.turns.append({
|
||||||
|
"turn": self.turn,
|
||||||
"move": move,
|
"move": move,
|
||||||
"game_board": self.get_game_board_as_dict()
|
"game_board": self.get_game_board_as_dict()
|
||||||
}
|
})
|
||||||
|
|
||||||
return move
|
return move
|
||||||
|
|
||||||
# Save functions
|
# Save functions
|
||||||
@@ -139,44 +135,6 @@ class GameBoard:
|
|||||||
return {"name": "constrictor", "is_ladder": self.is_ladder}
|
return {"name": "constrictor", "is_ladder": self.is_ladder}
|
||||||
return {"name": "standart", "is_ladder": self.is_ladder}
|
return {"name": "standart", "is_ladder": self.is_ladder}
|
||||||
|
|
||||||
def _get_correct_folder_for_save_file(self, file_path:str, file_name:str, game_type:str, leader_board:bool, winner:bool):
|
def save(self, store_class, **kwargs):
|
||||||
storage_folder = file_path
|
store = store_class(**kwargs)
|
||||||
if leader_board:
|
store.save(self)
|
||||||
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, self.now_date.strftime('%Y'), self.now_date.strftime('%m_%B'), self.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, file_path:str, callback=None, **kwargs):
|
|
||||||
game_type = self._get_type_of_gameboard()
|
|
||||||
save_file_path = self._get_correct_folder_for_save_file(
|
|
||||||
file_path,
|
|
||||||
f"{self.snake_class.__class__.__name__}_{datetime.now().strftime('%H-%M-%S')}_{self.id}.json",
|
|
||||||
game_type["name"],
|
|
||||||
game_type["is_ladder"],
|
|
||||||
True if self.winner_snake_names == "me" else False
|
|
||||||
)
|
|
||||||
|
|
||||||
save_file(save_file_path, {
|
|
||||||
"winner": self.winner_snake_names,
|
|
||||||
"game": {
|
|
||||||
"url": self._get_game_url(True if self.ruleset["version"] == "cli" else False),
|
|
||||||
"id": self.id,
|
|
||||||
"final_turns": self.turn,
|
|
||||||
"map": self.map,
|
|
||||||
"type": game_type,
|
|
||||||
"ruleset": self.ruleset,
|
|
||||||
},
|
|
||||||
"moves": self.turns,
|
|
||||||
"snake": {
|
|
||||||
"type": self.snake_class.__class__.__name__,
|
|
||||||
"calculations": self.snake_class.get_history(),
|
|
||||||
},
|
|
||||||
}, callback=callback, **kwargs)
|
|
||||||
|
|||||||
+3
-1
@@ -2,6 +2,8 @@ from server.Files import read_file
|
|||||||
from server.GameBoard import GameBoard
|
from server.GameBoard import GameBoard
|
||||||
from server.SnakeBuilder import SnakeBuilder
|
from server.SnakeBuilder import SnakeBuilder
|
||||||
|
|
||||||
|
from statestorage.LocalStorage import LocalStorage
|
||||||
|
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from flask import request
|
from flask import request
|
||||||
import logging, json, os, re
|
import logging, json, os, re
|
||||||
@@ -133,8 +135,8 @@ class Server:
|
|||||||
game_board = self._get_game_board(game_state, end=True)
|
game_board = self._get_game_board(game_state, end=True)
|
||||||
if not game_board.get_winner() == "me" and not game_board.get_turn() <= self.store_game_when_win_and_moves_are_bigger_as:
|
if not game_board.get_winner() == "me" and not game_board.get_turn() <= self.store_game_when_win_and_moves_are_bigger_as:
|
||||||
game_board.save(
|
game_board.save(
|
||||||
|
LocalStorage,
|
||||||
file_path=os.path.join(self.data_path, 'data'),
|
file_path=os.path.join(self.data_path, 'data'),
|
||||||
callback=json.dump, indent=2, ensure_ascii=False
|
|
||||||
)
|
)
|
||||||
|
|
||||||
print("GAME ENDED: Winner is", [ x["name"] for x in game_state["board"]['snakes']])
|
print("GAME ENDED: Winner is", [ x["name"] for x in game_state["board"]['snakes']])
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
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",
|
||||||
|
}
|
||||||
|
|
||||||
|
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_gameboard()
|
||||||
|
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 == "me" 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)
|
||||||
Reference in New Issue
Block a user