anchor.diff:          , play_bot/5        % trigger a bot to play one move (async)
           , bots_are_busy/3
           , bot_is_busy/2
  +        , read_bot/1
           ]).
   
   -safe([create, start, cancel, accept, play, result, resume, moves, time]).
  
positive.code: resume_bots(GameTypeId, [undefined|Bots]) ->
      resume_bots(GameTypeId, Bots);
  resume_bots(GameTypeId, [Bot|Bots]) ->
      case global:whereis_name(?BOT_GID(Bot, GameTypeId)) of
          undefined ->
              case Bot:resume(GameTypeId) of
                  ok ->       resume_bots(GameTypeId, Bots);
  
negative.code:         false ->
              case Cnt-Done of
                  N when N > ?CREATE_BATCH_COUNT -> 
                      ?Info("Creating ~p games ~s ~p ~p done ~p + ~p",[?CREATE_BATCH_COUNT, GameType, YourAcc, MyAcc, Done, ?CREATE_BATCH_COUNT]),
                      [gen_server:call(?MODULE, {create, GameType, YourAcc, MyAcc}) || _ <- lists:seq(1, ?CREATE_BATCH_COUNT)],
                      timer:sleep(?CREATE_BATCH_ALWAYS_WAIT),
                      ?CREATE_BATCH_COUNT;
                  _ -> 
                      ?Info("Creating ~p games ~s ~p ~p done ~p + ~p",[Cnt-Done, GameType, YourAcc, MyAcc, Done, Cnt-Done]),
                      [gen_server:call(?MODULE, {create, GameType, YourAcc, MyAcc}) || _ <- lists:seq(1, Cnt-Done)],
                      timer:sleep(?CREATE_BATCH_ALWAYS_WAIT),
                      Cnt-Done
              end
      end,
  