anchor.diff:  %%% @doc The core of the game
   -module(serpents_core).
   -author('elbrujohalcon@inaka.net').
  +
  +-behavior(gen_fsm).
  +
  +-type state() :: #{ game => serpents_games:game()
  +                  , dispatcher => pid()
  +                  }.
   
   -export(
     [ register_player/1
  
positive.code: fetch_game(GameId) ->
    call(GameId, fetch).
  
  -spec game_dispatcher(serpents_games:id()) -> pid() | atom().
  game_dispatcher(GameId) ->
    call(GameId, dispatcher).
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% PRIVATELY EXPORTED FUNCTIONS
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  -spec start_link(serpents_games:game()) -> {ok, pid()}.
  start_link(Game) ->
    Process = process_name(serpents_games:id(Game)),
    gen_fsm:start_link({local, Process}, ?MODULE, Game, []).
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% INTERNAL FUNCTIONS
  
negative.code: 
  -spec join_game(serpents_games:id(), serpents_players:id()) -> position().
  join_game(GameId, PlayerId) ->
    call(GameId, {join, PlayerId}).
  
  -spec start_game(serpents_games:id()) -> ok.
  start_game(GameId) ->
  