change over to new Game Board class from old Game Storage class
This commit is contained in:
+40
-37
@@ -1,9 +1,7 @@
|
||||
from server.Files import read_file
|
||||
from server.GameStorage import GameStorage
|
||||
from snakes.TemplateSnake import TemplateSnake
|
||||
from server.GameBoard import GameBoard
|
||||
from server.SnakeBuilder import SnakeBuilder
|
||||
|
||||
from datetime import datetime
|
||||
from flask import Flask
|
||||
from flask import request
|
||||
import logging, json, os, re
|
||||
@@ -21,8 +19,7 @@ class Server:
|
||||
self.store_game_state = False
|
||||
self.store_game_when_win_and_moves_are_bigger_as = store_game_when_win_and_moves_are_bigger_as
|
||||
|
||||
self.running_games:dict[str, GameStorage] = {}
|
||||
self.running_snake:dict[str, TemplateSnake] = {}
|
||||
self.running_games:dict[str, GameBoard] = {}
|
||||
|
||||
self.app = Flask("Battlesnake")
|
||||
|
||||
@@ -73,6 +70,36 @@ class Server:
|
||||
config[key.lower()] = os.environ.get(f"SNAKE_{key.upper()}")
|
||||
return config
|
||||
|
||||
def _create_game_board(self, game_state:dict):
|
||||
new_game_board = GameBoard(
|
||||
game_id=game_state["game"]["id"],
|
||||
width=game_state['board']['width'],
|
||||
height=game_state['board']['height'],
|
||||
ruleset=game_state['game']["ruleset"],
|
||||
source=game_state['game']['source'],
|
||||
map=game_state['game']['map'],
|
||||
snake_class=SnakeBuilder.build(self.snake_type)
|
||||
)
|
||||
new_game_board.start_game(game_state)
|
||||
|
||||
self.running_games[game_state["game"]["id"]] = new_game_board
|
||||
return new_game_board
|
||||
|
||||
def _delete_game_board(self, game_state):
|
||||
del self.running_games[game_state["game"]["id"]]
|
||||
|
||||
def _get_game_board(self, game_state:str, end:bool=False):
|
||||
try:
|
||||
game_board = self.running_games[game_state["game"]["id"]]
|
||||
except KeyError:
|
||||
game_board = self._create_game_board(game_state)
|
||||
|
||||
game_board.read_game_data(game_state)
|
||||
if end:
|
||||
game_board.end_game(game_state)
|
||||
|
||||
return game_board
|
||||
|
||||
def enable_store_game_state(self):
|
||||
self.store_game_state = True
|
||||
|
||||
@@ -87,32 +114,13 @@ class Server:
|
||||
|
||||
# start is called when your Battlesnake begins a game
|
||||
def _start(self, game_state:dict):
|
||||
if self.store_game_state:
|
||||
self.running_games[game_state["game"]["id"]] = GameStorage(
|
||||
self.snake_type,
|
||||
path=os.path.join(self.data_path, 'data'),
|
||||
no_store_turns=self.store_game_when_win_and_moves_are_bigger_as
|
||||
)
|
||||
self.running_games[game_state["game"]["id"]].start_new_game(game_state["game"], game_state["board"], game_state["you"])
|
||||
|
||||
self.running_snake[game_state["game"]["id"]] = SnakeBuilder.build(self.snake_type)
|
||||
self._create_game_board(game_state)
|
||||
print("GAME START:", game_state["game"])
|
||||
|
||||
# move is called when your Battlesnake game is running game
|
||||
def _move(self, game_state:dict) -> dict:
|
||||
try:
|
||||
next_move = self.running_snake[game_state["game"]["id"]].choose_move(game_state)
|
||||
except KeyError:
|
||||
self.running_snake[game_state["game"]["id"]] = SnakeBuilder.build(self.snake_type)
|
||||
next_move = self.running_snake[game_state["game"]["id"]].choose_move(game_state)
|
||||
|
||||
if self.store_game_state:
|
||||
try:
|
||||
self.running_games[game_state["game"]["id"]].add_moves(game_state["turn"], game_state["board"], next_move)
|
||||
if self.debug:
|
||||
print(self.running_games[game_state["game"]["id"]])
|
||||
except KeyError:
|
||||
pass
|
||||
game_board = self._get_game_board(game_state)
|
||||
next_move = game_board.snake_neat_make_a_move()
|
||||
|
||||
if self.debug:
|
||||
print("TURN:", f'{game_state["turn"]:3},', "MOVE:", f"{next_move:5}")
|
||||
@@ -122,17 +130,12 @@ class Server:
|
||||
# end is called when your Battlesnake finishes a game
|
||||
def _end(self, game_state:dict):
|
||||
if self.store_game_state:
|
||||
snake = self.running_snake[game_state["game"]["id"]]
|
||||
|
||||
try:
|
||||
self.running_games[game_state["game"]["id"]].add_end_state(game_state["board"], snake.get_history(), game_state["turn"])
|
||||
self.running_games[game_state["game"]["id"]].save(
|
||||
f"{snake.__class__.__name__}_{datetime.now().strftime('%H-%M-%S')}_{game_state['game']['id']}.json",
|
||||
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:
|
||||
game_board.save(
|
||||
file_path=os.path.join(self.data_path, 'data'),
|
||||
callback=json.dump, indent=2, ensure_ascii=False
|
||||
)
|
||||
del self.running_games[game_state["game"]["id"]]
|
||||
except KeyError:
|
||||
print(f"ERROR: Can't find Game {game_state['game']['id']} in Storage")
|
||||
|
||||
print("GAME ENDED: Winner is", [ x["name"] for x in game_state["board"]['snakes']])
|
||||
del self.running_snake[game_state["game"]["id"]]
|
||||
self._delete_game_board(game_state)
|
||||
|
||||
Reference in New Issue
Block a user