#region IsHu_50_0_Normal
private void IsHu_50_0_Normal(List<int> _pailist)
{
if (isHu) { return; }//一旦胡就退出
string Yupai = "";//输出用
List<int> Tlist = new List<int>(_pailist.ToArray());//复制副本
List<int> Vlist = new List<int>(_pailist.ToArray());//复制副本
for (int i = Vlist.Count - 1; i > 0; i--)//去重复,减少循环次数
{
if (Vlist[i].Equals(Vlist[i - 1])) { Vlist.RemoveAt(i); }
}
List<string> found_Zhuhe = new List<string>();//找刻或顺的组合
int maxshun = 0;
for (int i = 0; i < Vlist.Count; i++)
{
int TT = (int)Vlist[i];
if (Tlist.Contains(TT + 1) && Tlist.Contains(TT + 2) && TT < 60) //发现顺子;小于60指字牌和花牌不计顺
{
if (maxshun == 0 || (TT - maxshun) < 3)//优化递归
{
found_Zhuhe.Add("S" + (TT).ToString());
maxshun = TT;
}
}
else if (Tlist.Count(x => x == TT) >= 3)//发现刻子
{
found_Zhuhe.Add("K" + (TT).ToString());
}
}
if (found_Zhuhe.Count == 0)//如果已经提取组合完毕,退出递归
{
Yupai = "|X" + string.Join("|X", Tlist.ToArray());//每一种组合后最终的余牌
bool isIn_ZhuheAll = true;//剔除重复记录的组合
string[] zhuheAllSplit = tmp_ZhuheAll.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
string[] zhuheSplit = tmp_Zhuhe.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < zhuheSplit.Length; i++)
{
if (!zhuheAllSplit.Contains(zhuheSplit[i]))
{
tmp_ZhuheAll += "|" + zhuheSplit[i];//记录所有组合,用于识别剔除
isIn_ZhuheAll = false;
}
}
if (isIn_ZhuheAll == false || tmp_ZhuheAll.Count() == 0)//如果不重复
{
tmp_YupaiZhuheAll = "";
if (Tlist.Count() == 2 && Tlist[0] == Tlist[1])//如果余牌是一对
{
isHu = true;
// Hu_Output.Add(tmp_Zhuhe + Yupai);//精减版,不输出胡牌方案到Hu_Output
}
}
}
else//如果还有组合可以提取,找出各种组合,先提取,再递归,再恢复
{
for (int i = 0; i < found_Zhuhe.Count; i++)
{
if (found_Zhuhe[i].Substring(0, 1) == "K")
{
string k = found_Zhuhe[i].Substring(1);
Tlist.Remove(int.Parse(k)); Tlist.Remove(int.Parse(k)); Tlist.Remove(int.Parse(k));
tmp_Zhuhe += "|K" + k;
IsHu_51_0_Normal(Tlist);
tmp_Zhuhe = tmp_Zhuhe.Remove(tmp_Zhuhe.LastIndexOf("|"));
Tlist.Add(int.Parse(k)); Tlist.Add(int.Parse(k)); Tlist.Add(int.Parse(k));
Tlist.Sort();
}
else if (found_Zhuhe[i].Substring(0, 1) == "S")
{
string s = found_Zhuhe[i].Substring(1);
Tlist.Remove(int.Parse(s)); Tlist.Remove(int.Parse(s) + 1); Tlist.Remove(int.Parse(s) + 2);
tmp_Zhuhe += "|S" + int.Parse(s).ToString();
IsHu_51_0_Normal(Tlist);
tmp_Zhuhe = tmp_Zhuhe.Remove(tmp_Zhuhe.LastIndexOf("|"));
Tlist.Add(int.Parse(s)); Tlist.Add(int.Parse(s) + 1); Tlist.Add(int.Parse(s) + 2);
Tlist.Sort();
}
}
}
}
#endregion//IsHu_50_0_Normal