actorMove :: (Monad m) => Actor m -> Player -> Board -> DecodeT m Board
actorMove a p b = case actorNNet a of
  Just nn -> selectMove (actorSolidarity a) nn p b
  Nothing -> let
    Outsider mf _ = a
    in lift $ mf p b

{-
Represent the board as a list of doubles for feeding to the neural network.
Explanation of magic numbers:
  A tile can face 6 directions, there are up to 3 players in the game,
  6*3 = 18.
  So each space on the grid gets 18 inputs, only 1 of which will be set to 1
  at any given time.
There are 91 spaces on the grid, so the total number of inputs is 1638.
-}
actorMove :: (Monad m) => Actor m -> Player -> Board -> DecodeT m Board
actorMove a p b = case actorNNet a of
  Just nn -> selectMove (actorSolidarity a) nn p b
  Nothing -> let
    Outsider mf _ = a
    in lift $ mf p b

{-
Represent the board as a list of doubles for feeding to the neural network.
Explanation of magic numbers:
  A tile can face 6 directions, there are up to 3 players in the game,
  6*3 = 18.
  So each space on the grid gets 18 inputs, only 1 of which will be set to 1
  at any given time.
There are 91 spaces on the grid, so the total number of inputs is 1638.
-}
actorMove a p b = case actorNNet a of
  Just nn -> selectMove (actorSolidarity a) nn p b
  Nothing -> let
    Outsider mf _ = a
    in lift $ mf p b

{-
Represent the board as a list of doubles for feeding to the neural network.
Explanation of magic numbers:
  A tile can face 6 directions, there are up to 3 players in the game,
  6*3 = 18.
  So each space on the grid gets 18 inputs, only 1 of which will be set to 1
  at any given time.
There are 91 spaces on the grid, so the total number of inputs is 1638.
-}