コード例 #1
0
        private static void CalculateMulligan(int MaxManaCost)
        {
            List <CardTemplate> HandCards_BoardCards = MainLists.HandCards_BoardCards;

            ManageTwins();

            ManageCombos();

            /*====================================main comparison===========================================*/
            /*prefers whitelist over blacklist*/
            foreach (CardTemplate card in HandCards_BoardCards.Where(x => !MainLists.chosenCards.Contains(x.Id)))
            {
                if (MainLists.whiteList.Contains(card.Id.ToString()))
                {
                    MainLists.chosenCards.Add(BoardToMulliganCard(card));
                }
                else if (MainLists.blackList.Contains(card.Id.ToString()))
                {
                    // ReSharper disable once RedundantJumpStatement
                    continue;
                }
                else if (new NeutralMinion(card).minionBoardCard != null &&
                         card.Cost <= MaxManaCost)
                {
                    Task newT = new Task(() => NeutralMinion.ManageNeutralMinion(BoardToMulliganCard(card)));
                    neutralMinionTaskList.Add(newT);
                    newT.Start();
                }
            }
        }
コード例 #2
0
        public ProbabilityCalculation()
        {
            List <CardTemplate> HandCards_BoardCards = MainLists.HandCards_BoardCards;

            bool coinInHand = HandCards_BoardCards.Any(x => x.Id.ToString() == "GAME_005");

            currentHandCards = coinInHand ? HandCards_BoardCards.ToArray().
                               Where(x => x.Id.ToString() != "GAME_005") : HandCards_BoardCards.ToArray();
            currentDeck = MainLists.currentDeck;
            handCount   = coinInHand ? HandCards_BoardCards.Count : HandCards_BoardCards.Count - 1;

            mediumCardsInHandCount = MainLists.HandCards_BoardCards.Count(x => new NeutralMinion(x).minionBoardCard != null &&
                                                                          NeutralMinion.WouldTakeMinion(x) && !MainLists.whiteList.Contains(x.Id.ToString()));

            int _minProbability = ValueReader.MinProbabilityToReplace;

            if (_minProbability > 100)
            {
                _minProbability = 100;
            }
            else if (_minProbability < 0)
            {
                _minProbability = 0;
            }

            minProbability = _minProbability;
        }
コード例 #3
0
        public static void ManageNeutralMinion(Card.Cards card)
        {
            //<= max mana
            var boardCard = new BoardCard(card);

            if (boardCard.ResultingBoardCard.Quality >= ValueReader.MinCardQualityToInstantAddMinion) //epic by default
            {
                MainLists.chosenCards.Add(card);
            }
            else
            {
                //card quality not hight enoughbut <= max mana
                if (!ValueReader.AttendMinionValue ||
                    boardCard.ResultingBoardCard.Cost < ValueReader.MinManaCostToAttendValue)
                {
                    //mana <= max cost & mana < MinManaCostToAttendValue
                    MainLists.chosenCards.Add(card);
                }
                else if (boardCard.ResultingBoardCard.Cost >= ValueReader.MinManaCostToAttendValue)
                {
                    var minionCard = new NeutralMinion(card);
                    MinionValue.Value requiredMinNeutralMinionValue =
                        minionCard.minionBoardCard.IsMaxManaCard && ValueReader.IncreaseMinMinionValueIfMaxCost
                            ? ValueReader.IncreasedMinNeutralMinionValue
                            : ValueReader.MinNeutralMinionValue;

                    if (minionCard.thisCardValue >= requiredMinNeutralMinionValue)
                    {
                        MainLists.chosenCards.Add(card);
                    }
                }
            }
        }
コード例 #4
0
        public static bool WouldTakeMinion(CardTemplate boardCard)
        {
            try
            {
                if (new NeutralMinion(boardCard).minionBoardCard == null) //not a neutral minion
                {
                    return(false);
                }
                //<= max mana
                Card.Cards card = CardTemplate.StringToCard(boardCard.Id.ToString());

                #region normalChecks

                if (MainLists.whiteList.Contains(boardCard.Id.ToString()))
                {
                    return(true);
                }
                if (MainLists.blackList.Contains((boardCard.Id.ToString())))
                {
                    return(false);
                }

                if (boardCard.Quality >= ValueReader.MinCardQualityToInstantAddMinion) //epic by default
                {
                    return(true);
                }

                //card quality not hight enough and mana to high too
                if ((!ValueReader.AttendMinionValue ||
                     boardCard.Cost < ValueReader.MinManaCostToAttendValue) && boardCard.Cost <= MainLists.MaxManaCost)
                {
                    return(true);
                }

                if (boardCard.Cost > MainLists.MaxManaCost)
                {
                    return(false);
                }

                //value has to be attended
                var minionCard = new NeutralMinion(card);
                MinionValue.Value requiredMinNeutralMinionValue =
                    minionCard.minionBoardCard.IsMaxManaCard && ValueReader.IncreaseMinMinionValueIfMaxCost
                        ? ValueReader.IncreasedMinNeutralMinionValue
                        : ValueReader.MinNeutralMinionValue;

                return(minionCard.thisCardValue >= requiredMinNeutralMinionValue);

                #endregion normalChecks
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return(false);
            }
        }
コード例 #5
0
        /// <summary>
        /// Inifinive
        /// </summary>
        /// <returns></returns>
        private int GetAcceptablePlusCountInDeckLeft()
        {
            return(currentDeck.Cards.Count(x =>

                                           (MainLists.whiteList.Contains(x))
                                           ||
                                           (
                                               new NeutralMinion(CardTemplate.LoadFromId(x)).minionBoardCard != null &&
                                               NeutralMinion.WouldTakeMinion(CardTemplate.LoadFromId(x))
                                           )


                                           &&
                                           !currentHandCards.ToList().Contains(
                                               CardTemplate.LoadFromId(CardTemplate.StringToCard(x))
                                               )));
        }
コード例 #6
0
        private static void CalculateDeckProbabilities()
        {
            try
            {
                int normalMinionCount = MainLists.HandCards_BoardCards.Count(x => new NeutralMinion(x).minionBoardCard != null &&
                                                                             NeutralMinion.WouldTakeMinion(x) && !MainLists.whiteList.Contains(x.Id.ToString()));

                if (normalMinionCount == 0)
                {
                    return;
                }

                float minProbabilityToReplace = ValueReader.MinProbabilityToReplace;

                ProbabilityCalculation probabilityCalculation = new ProbabilityCalculation();
                Tuple <int, float>     treeResult             = probabilityCalculation.GenerateTreeWhiteListDraw();

                //less medium cards than actually having possible
                if (treeResult.Item1 /*prospective refused*/ < normalMinionCount)
                {
                    int deltaReplaceCount = normalMinionCount - treeResult.Item1;

                    int i = 1;
                    foreach (CardTemplate badCard in MainLists.HandCards_BoardCards.
                             Where(x => new NeutralMinion(x).minionBoardCard != null && NeutralMinion.WouldTakeMinion(x) &&
                                   !MainLists.whiteList.Contains(x.Id.ToString())).
                             OrderBy(x => new NeutralMinion(x).thisCardValue).TakeWhile(x => i <= deltaReplaceCount))
                    {
                        MainLists.chosenCards.Remove(BoardToMulliganCard(badCard));
                        ++i;
                    }
                }
            }
            catch
            {
                //Ignored
            }
        }
コード例 #7
0
        public static void ManageNeutralMinion(Card.Cards card)
        {
            //<= max mana
            var boardCard = new BoardCard(card);

            if (boardCard.ResultingBoardCard.Quality >= ValueReader.MinCardQualityToInstantAddMinion) //epic by default
                MainLists.chosenCards.Add(card);
            else
            {
                //card quality not hight enoughbut <= max mana
                if (!ValueReader.AttendMinionValue ||
                    boardCard.ResultingBoardCard.Cost < ValueReader.MinManaCostToAttendValue)
                    //mana <= max cost & mana < MinManaCostToAttendValue
                    MainLists.chosenCards.Add(card);
                else if (boardCard.ResultingBoardCard.Cost >= ValueReader.MinManaCostToAttendValue)
                {
                    var minionCard = new NeutralMinion(card);
                    MinionValue.Value requiredMinNeutralMinionValue =
                        minionCard.minionBoardCard.IsMaxManaCard && ValueReader.IncreaseMinMinionValueIfMaxCost
                            ? ValueReader.IncreasedMinNeutralMinionValue
                            : ValueReader.MinNeutralMinionValue;

                    if (minionCard.thisCardValue >= requiredMinNeutralMinionValue)
                        MainLists.chosenCards.Add(card);
                }
            }
        }
コード例 #8
0
        public static bool WouldTakeMinion(CardTemplate boardCard)
        {
            try
            {
                if (new NeutralMinion(boardCard).minionBoardCard == null) //not a neutral minion
                    return false;
                //<= max mana
                Card.Cards card = CardTemplate.StringToCard(boardCard.Id.ToString());

                #region normalChecks

                if (MainLists.whiteList.Contains(boardCard.Id.ToString()))
                    return true;
                if (MainLists.blackList.Contains((boardCard.Id.ToString())))
                    return false;

                if (boardCard.Quality >= ValueReader.MinCardQualityToInstantAddMinion) //epic by default
                    return true;

                //card quality not hight enough and mana to high too
                if ((!ValueReader.AttendMinionValue ||
                     boardCard.Cost < ValueReader.MinManaCostToAttendValue) && boardCard.Cost <= MainLists.MaxManaCost)
                    return true;

                if (boardCard.Cost > MainLists.MaxManaCost)
                    return false;

                //value has to be attended
                var minionCard = new NeutralMinion(card);
                MinionValue.Value requiredMinNeutralMinionValue =
                    minionCard.minionBoardCard.IsMaxManaCard && ValueReader.IncreaseMinMinionValueIfMaxCost
                        ? ValueReader.IncreasedMinNeutralMinionValue
                        : ValueReader.MinNeutralMinionValue;

                return minionCard.thisCardValue >= requiredMinNeutralMinionValue;

                #endregion normalChecks
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }