public static void RunQuickMatch()
        {
            var game = new SabberStoneState(new SabberStoneCore.Model.Game(new GameConfig {
                StartPlayer      = 1,
                Player1Name      = Constants.SABBERSTONE_GAMECONFIG_PLAYER1_NAME,
                Player1HeroClass = CardClass.HUNTER,
                Player1Deck      = Decks.GetRandomTournamentDeck(),
                Player2Name      = Constants.SABBERSTONE_GAMECONFIG_PLAYER2_NAME,
                Player2HeroClass = CardClass.HUNTER,
                Player2Deck      = Decks.GetRandomTournamentDeck(),
                FillDecks        = false,
                Shuffle          = true,
                SkipMulligan     = false,
                History          = false
            }));

            // Create two bots to play
            var bot1 = BotFactory.CreateSabberStoneBot(BotSetupType.RandomBot, game.Player1);
            var bot2 = BotFactory.CreateSabberStoneBot(BotSetupType.RandomBot, game.Player2);

            game.Game.StartGame();

            game.Game.Process(MulliganStrategySabberStone.DefaultMulligan(game.Game.Player1));
            game.Game.Process(MulliganStrategySabberStone.DefaultMulligan(game.Game.Player2));

            game.Game.MainReady();

            while (game.Game.State != State.COMPLETE)
            {
                Console.WriteLine("");
                Console.WriteLine($"TURN {(game.Game.Turn + 1) / 2} - {game.Game.CurrentPlayer.Name}");
                Console.WriteLine($"Hero[P1] {game.Player1.Hero} HP: {game.Player1.Hero.Health} / Hero[P2] {game.Player2.Hero} HP: {game.Player2.Hero.Health}");
                Console.WriteLine($"- {game.Game.CurrentPlayer.Name} Action ----------------------------");

                // Ask the bot to act.
                var action = game.Game.CurrentPlayer.Id == game.Player1.Id ? bot1.Act(game) : bot2.Act(game);

                // Check if the action is valid
                if (action == null || !action.IsComplete())
                {
                    continue;
                }

                // Process the tasks in the action
                foreach (var item in action.Tasks)
                {
                    // Process the task
                    Console.WriteLine(item.Task.FullPrint());
                    game.Game.Process(item.Task);
                }
            }

            Console.WriteLine($"Game: {game.Game.State}, Player1: {game.Player1.PlayState} / Player2: {game.Player2.PlayState}");
        }
 /// <summary>
 /// Returns a SabberStone game configuration setup for a tournament match.
 /// </summary>
 /// <returns>A SabberStone game configuration setup for a tournament match.</returns>
 public static GameConfig GetTournamentConfiguration()
 {
     return(new GameConfig {
         Player1Name = Constants.SABBERSTONE_GAMECONFIG_PLAYER1_NAME,
         Player1HeroClass = CardClass.HUNTER,
         Player1Deck = Decks.GetRandomTournamentDeck(),
         Player2Name = Constants.SABBERSTONE_GAMECONFIG_PLAYER2_NAME,
         Player2HeroClass = CardClass.HUNTER,
         Player2Deck = Decks.GetRandomTournamentDeck(),
         FillDecks = false,
         Shuffle = true,
         SkipMulligan = false,
         History = false
     });
 }