예제 #1
0
        /// <summary>Attempts to create a <typeparamref name="TGame"/> for this context.</summary>
        public async Task StartNewMPGameAsync(CommandContext ctx, params DiscordUser[] players)
        {
            if (await CheckGameAlreadyExistsAsync(ctx))
            {
                return;
            }

            var game = StartNewGame(await MultiplayerGame.CreateNewAsync <TGame>(ctx.Channel.Id, players, Services));

            while (await game.IsBotTurnAsync())
            {
                await game.BotInputAsync();                                 // When a bot starts
            }
            await RespondGameAsync(ctx);
        }
예제 #2
0
        /// <summary>Attempts to create a <typeparamref name="TGame"/> for this context.</summary>
        public async Task RunGameAsync(params SocketUser[] players)
        {
            if (await CheckGameAlreadyExistsAsync())
            {
                return;
            }

            StartNewGame(await MultiplayerGame.CreateNewAsync <TGame>(Context.Channel.Id, players, Services));

            while (!Game.AllBots && Game.BotTurn)
            {
                await Game.BotInputAsync();                                   // When a bot starts
            }
            var msg = await ReplyGameAsync();

            if (Game.AllBots) // Bot loop
            {
                while (Game.State == GameState.Active)
                {
                    try
                    {
                        await Game.BotInputAsync();

                        msg = await UpdateGameMessageAsync();

                        if (msg == null)
                        {
                            break;
                        }
                    }
                    catch (OperationCanceledException) { }
                    catch (TimeoutException) { }
                    catch (HttpException) { }  // All of these are connection-related and ignorable in this situation

                    await Task.Delay(Program.Random.Next(2500, 4001));
                }

                EndGame();
            }
        }