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); }
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); }
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); }
/// <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); }
public void Add(ProbabilityItem <T> probItem) { Add(probItem.Item, probItem.Multiplier, probItem.Unique); }