in deployment/LambdaGateway/src/convert_utils.py [0:0]
def _convert_to_state(self, game_state, game):
# Get the border size
if self.border_option == "1":
border_size = 1
elif self.border_option == "None":
border_size = 0
elif self.border_option == "max":
border_size = int((21 - game.board_h)/2)
else:
raise ValueError("Unkown border_option {}".format(self.border_option))
# Get the style of state
if self.style == 'layered':
channels = game.num_snakes+1
elif self.style == 'one_versus_all':
channels = 3
else:
raise ValueError("Unkown style {}".format(self.style))
# Create the base state matrix
state = np.zeros((game.board_h + 2*border_size, game.board_w + 2*border_size, channels))
# Add the borders
if self.border_option in ["1", "max"]:
state = state - 1
state[border_size:border_size+game.board_h, border_size:border_size+game.board_w,:] = 0
# Put the food on the board
for coord in game_state['board']['food']:
state[coord['y']+border_size, coord['x']+border_size, BattlesnakeGame.FOOD_INDEX] = 1
# Add the snakes
for snake in game_state['board']['snakes']:
first = True
# Set the snakes channels to 2 if one vs all
if self.style == 'one_versus_all':
snake_channel = BattlesnakeGame.SNAKES_INDEX if game.snake_to_ids[snake['id']] != BattlesnakeGame.YOU_INDEX else BattlesnakeGame.YOU_INDEX
else:
snake_channel = game.snake_to_ids[snake['id']]
for coord in snake['body']:
if state[coord['y']+border_size, coord['x']+border_size, snake_channel] == 0:
state[coord['y']+border_size, coord['x']+border_size, snake_channel] = 5 if first else 1
first = False
return state