Esempio n. 1
0
        bool list_probability(int color, int gui_num, int num, int key, bool chi, ProbabilityItemTable ptbl)
        {
            bool find = false;
            int  anum = ptbl.array_num;

            for (int i = 0; i <= gui_num; ++i)
            {
                int yu = (num + i) % 3;
                if (yu == 1)
                {
                    continue;
                }
                bool eye = (yu == 2);
                if (find || TableMgr.getInstance().check(key, i, eye, chi))
                {
                    ProbabilityItem item = ptbl.m[anum, ptbl.m_num[anum]];
                    ptbl.m_num[anum]++;

                    item.eye     = eye;
                    item.gui_num = i;
                    find         = true;
                }
            }

            if (ptbl.m_num[anum] <= 0)
            {
                return(false);
            }

            ptbl.array_num++;
            return(true);
        }
Esempio n. 2
0
        bool check_probability(ProbabilityItemTable ptbl, int gui_num)
        {
            // 全是鬼牌
            if (ptbl.array_num == 0)
            {
                return(gui_num >= 2);
            }

            // 只有一种花色的牌的鬼牌
            if (ptbl.array_num == 1)
            {
                return(true);
            }

            // 尝试组合花色,能组合则胡
            for (int i = 0; i < ptbl.m_num[0]; ++i)
            {
                ProbabilityItem item = ptbl.m[0, i];
                bool            eye  = item.eye;
                int             gui  = gui_num - item.gui_num;
                if (check_probability_sub(ptbl, ref eye, ref gui, 1, ptbl.array_num))
                {
                    return(true);
                }
            }
            return(false);
        }
Esempio n. 3
0
        bool check_probability_sub(ProbabilityItemTable ptbl, ref bool eye, ref int gui_num, int level, int max_level)
        {
            for (int i = 0; i < ptbl.m_num[level]; ++i)
            {
                ProbabilityItem item = ptbl.m[level, i];

                if (eye && item.eye)
                {
                    continue;
                }

                if (gui_num < item.gui_num)
                {
                    continue;
                }

                if (level < max_level - 1)
                {
                    int  old_gui_num = gui_num;
                    bool old_eye     = eye;
                    gui_num -= item.gui_num;
                    eye      = eye || item.eye;

                    if (check_probability_sub(ptbl, ref eye, ref gui_num, level + 1, ptbl.array_num))
                    {
                        return(true);
                    }

                    eye     = old_eye;
                    gui_num = old_gui_num;
                    continue;
                }

                if (!eye && !item.eye && item.gui_num + 2 > gui_num)
                {
                    continue;
                }
                return(true);
            }

            return(false);
        }
Esempio n. 4
0
        /// <summary>
        /// Returns list of probability data
        /// </summary>
        /// <param name="currentNode"></param>
        /// <param name="availableNodeTimings"> </param>
        /// <returns></returns>
        public virtual IList <ProbabilityItem> BuildProbabilityDataMatrix(INode currentNode, IEnumerable <NodeTiming> availableNodeTimings)
        {
            var probabilityDataList = new List <ProbabilityItem>();

            // build probability data matrix for all unprocessed nodes
            foreach (var nodeTiming in availableNodeTimings)
            {
                var topProbability = CalculateProbability(currentNode, nodeTiming);

                var probabilityItem = new ProbabilityItem()
                {
                    Element        = nodeTiming.Node,
                    TopProbability = topProbability
                };

                // store the result
                probabilityDataList.Add(probabilityItem);
            }

            CalculateProbabilities(probabilityDataList);

            return(probabilityDataList);
        }
Esempio n. 5
0
 public void Add(ProbabilityItem <T> probItem)
 {
     Add(probItem.Item, probItem.Multiplier, probItem.Unique);
 }