Пример #1
0
    /// <summary>
    /// 测试
    /// </summary>
    private static void test()
    {
        // 百位:1同,2条,3万
        // 十位:0无,其他数值
        // 个位:0无,1碰,2杠
        int[] everyData = new int[] { 110, 110, 110, 000, 230, 230, 230, 240, 240, 240, 250, 250, 250, 290, 290, 000,
                                      000, 000 };
        Every[] everys = new Every[18];
        for (int i = 0; i < everyData.Length; i++)
        {
            Every every = new Every();
            every.setNumber(everyData[i] / 10 % 10);
            every.setColor(everyData[i] / 100 == 0 ? 1000 : everyData[i] / 100);
            if (everyData[i] % 10 == 1)
            {
                every.setIf_Touched(true);
            }
            else if (everyData[i] % 10 == 2)
            {
                every.setIf_Konged(true);
            }
            everys[i] = every;
        }
        HuPaiResult result = RuleUtils.IsHu(everys);

        Debug.Log(result.type.huType);
    }
Пример #2
0
    /// <summary>
    /// 非基本胡牌判断
    /// </summary>
    /// <param name="everys"></param>
    /// <param name="arrPai"></param>
    /// <returns></returns>
    private static HuPaiResult IsHuNoneBase(Every[] everys, int[] arrPai)
    {
        HuPaiResult huResult = new HuPaiResult();

        huResult.type = HuBaseType.None;
        if (!IsOncePengOrGang(everys)) // 是否碰或杠过
        {
            if (IsHuQingLongQiDui(arrPai))
            { // 清龙七对
                huResult.type = HuBaseType.QingLongQiDui;
            }
            else if (IsHuQingQiDui(arrPai))
            { // 清七对
                huResult.type = HuBaseType.QingQiDui;
            }
            else if (IsHuLongQiDui(arrPai))
            { // 龙七对
                huResult.type = HuBaseType.LongQiDui;
            }
            else if (IsHuQiDui(arrPai))
            { // 七对
                huResult.type = HuBaseType.QiDui;
            }
        }
        return(huResult);
    }
Пример #3
0
    /// <summary>
    /// 判断听牌情况
    /// </summary>
    /// <param name="everys"></param>
    /// <returns></returns>
    public static Dictionary <int, Dictionary <Every, HuPaiResult> > IsTing(Every[] everys)
    {
        Dictionary <int, Dictionary <Every, HuPaiResult> > result = new Dictionary <int, Dictionary <Every, HuPaiResult> >();

        for (int i = 0; i < everys.Length; i++)
        {
            Dictionary <Every, HuPaiResult> item = new Dictionary <Every, HuPaiResult>();
            if (everys[i].getColor() <= 3 && !everys[i].getIf_Konged() && !everys[i].getIf_Touched())// 非空,非杠,非空
            {
                int oldColor  = everys[i].getColor();
                int oldNumber = everys[i].getNumber();

                for (int color = 1; color <= 3; color++)
                {
                    for (int number = 1; number <= 9; number++)
                    {
                        everys[i].setColor(color);
                        everys[i].setNumber(number);
                        HuPaiResult huResult = IsHu(everys);
                        if (!huResult.type.Equals(HuBaseType.None))
                        {
                            item.Add(new Every(color, number, false, false), huResult);
                        }
                    }
                }
                everys[i].setColor(oldColor);
                everys[i].setNumber(oldNumber);
            }
            result.Add(i, item);
        }
        return(result);
    }
Пример #4
0
    /// <summary>
    /// 判断胡 flag标识自摸或胡其他玩家 特例:天胡 、地胡
    /// </summary>
    /// <param name="everys"></param>
    /// <param name="other"></param>
    /// <returns></returns>
    public static HuPaiResult IsHu(Every[] everys, bool other)
    {
        int[] arrPaiAll        = ToArrPaiAll(everys);
        int[] arrPai           = ToArrPai(everys);
        int[] arrPaiGangOrPeng = ToArrPaiGangOrPeng(everys);

        HuPaiResult huResult = new HuPaiResult();

        huResult.type = HuBaseType.None;

        // 基本番
        if (IsHuBase(arrPai)) // 满足基本胡牌型
        {
            if (IsHuQingShiBaLuoHan(arrPaiAll))
            { // 清十八罗汉
                huResult.type = HuBaseType.QingShiBaLuoHan;
            }
            else if (IsHuShiBaLuoHan(arrPaiAll))
            { // 十八罗汉
                huResult.type = HuBaseType.ShiBaLuoHan;
            }
            else if (IsHuJinGouGou(arrPaiGangOrPeng) && IsHuQingYiSe(arrPaiAll))
            { // 清金钩钩
                huResult.type = HuBaseType.QingJingGouGou;
            }
            else if (IsHuJinGouGou(arrPaiGangOrPeng) && IsHuJiangJinGouGou(arrPaiGangOrPeng))
            {// 将金钩钩
                huResult.type = HuBaseType.JiangJinGouGou;
            }
            else if (IsHuDaiYaoJiu(arrPai, arrPaiGangOrPeng) && IsHuQingYiSe(arrPaiAll))
            { // 清幺九
                huResult.type = HuBaseType.QingYaoJiu;
            }
            else if (IsHuJinGouGou(arrPaiGangOrPeng))
            { // 金钩钩
                huResult.type = HuBaseType.JinGouGou;
            }
            else if (IsHuDaiYaoJiu(arrPai, arrPaiGangOrPeng))
            { // 带幺九
                huResult.type = HuBaseType.DaiYaoJiu;
            }
            else if (IsHuQingYiSe(arrPaiAll))
            { // 清一色
                huResult.type = HuBaseType.QingYiSe;
            }
            else if (IsPengPengHu(arrPaiAll))
            { // 碰碰胡
                huResult.type = HuBaseType.PengPengHu;
            }
            else
            { // 平胡
                huResult.type = HuBaseType.PingHu;
            }
            // 满足基本胡牌型 也有可能满足非基本胡牌型 两者皆满足取大番者
            HuPaiResult result = IsHuNoneBase(everys, arrPai);
            if (result.type.fan > huResult.type.fan)
            {
                huResult.type = result.type;
            }
        }
        else
        { // 不满足基本胡牌型
            HuPaiResult result = IsHuNoneBase(everys, arrPai);
            huResult.type = result.type;
        }
        // 另加番
        return(huResult);
    }