private void GetGuess(GameEventHub ctx, PlayerIndex nextTurn, IInvokablePlayer bot) { // TODO async Delay(); while (true) { var count = bot.GetGuess(ctx.State); if (ctx.TryGiveGuess(nextTurn, count)) { break; } } }
private void GetMove(GameEventHub ctx, PlayerIndex nextTurn, IInvokablePlayer bot) { // TODO async Delay(); while (true) { var card = bot.GetMove(ctx.State); if (ctx.TryPlayCard(nextTurn, card)) { break; } } }
public ActiveLobby(BotController botController, EumelGameRoomDefinition room, GameProgress progress) { Room = room ?? throw new ArgumentException(nameof(room)); _botController = botController ?? throw new ArgumentException(nameof(botController)); _events = new EventCollection <GameSeriesEvent>(); GameContext = new GameEventHub(room, progress); // TODO when / how is an active lobby disposed GameContext.OnGameEvent += async(s, e) => await GameEventHandler(s, e); GameContext.OnGameEvent += async(s, e) => await _botController.OnGameEvent(s, e); SetProgress(progress); }
private void HandleBotMoves(GameEventHub ctx) { var turn = ctx.State.Turn; var nextTurn = turn.PlayerIndex; if (!HasBotFor(nextTurn)) { return; } var bot = BotFor(nextTurn); if (turn.NextEventType == typeof(GuessGiven)) { GetGuess(ctx, nextTurn, bot); } else if (turn.NextEventType == typeof(CardPlayed)) { GetMove(ctx, nextTurn, bot); } }