斗地主算法1判断牌型

using UnityEngine;
using System.Collections.Generic;
/// <summary>
/// 牌型 3 4 5 6 7 8 9 10 11(J) 12(Q) 13(K) 14(A) 15(2) 16(小王) 17(大王)
/// </summary>
public class DDZ_CardType
{
    public enum DDZ_CardTypes
    {
        None,//什么都不是
        Single,//单张
        Double,//对子
        Three,//三张
        ThreeOne,//三代一
        ThreeTwo,//三代二
        ShunZi,//顺子45678
        LianDui,//连对334455
        Flay,//飞机333444
        FlayOne,//飞机带单
        FlayTwo,//飞机带队
        Boom,//炸弹
        BoomOne,//炸弹带单张(不是炸弹了)
        BoomTwo,//炸弹带对子
    }

    /// <summary>
    /// 是否是单张
    /// </summary>
    /// <param name="card"></param>
    /// <returns></returns>
    public static bool IsSingle(List<int> card)
    {
        if (card.Count == 0)
            return true;
        return false;
    }

    /// <summary>
    /// 是否是对子
    /// </summary>
    /// <param name="card"></param>
    /// <returns></returns>
    public static bool IsDouble(List<int> card)
    {
        if (card.Count == 2)
        {
            if (card[0] == card[1])
                return true;
            else
                return false;
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// 是否是三张
    /// </summary>
    /// <param name="card"></param>
    /// <returns></returns>
    public static bool IsThree(List<int> card)
    {
        if (card.Count == 3)
        {
            if (card[0] != card[1])
                return false;
            if (card[1] != card[2])
                return false;
            if (card[0] != card[2])
                return false;
            return true;
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// 是否是三代一
    /// </summary>
    /// <param name="card"></param>
    /// <returns></returns>
    public static bool IsThreeOne(List<int> card)
    {
        if (card.Count == 4)
        {
            if (card[0] != card[1])//第一张是单张
            {
                if (card[1] != card[2])
                    return false;
                if (card[2] != card[3])
                    return false;
                if (card[1] != card[4])
                    return false;
                return true;
            }
            else if (card[2] != card[3])//第四张是单张
            {
                if (card[0] != card[1])
                    return false;
                if (card[1] != card[2])
                    return false;
                if (card[0] != card[2])
                    return false;
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// 是否是三代二
    /// </summary>
    /// <param name="card"></param>
    /// <returns></returns>
    public static bool IsThreeTwo(List<int> card)
    {
        if (card.Count == 5)
        {
            if (card[0] == card[1])//前2张是对子
            {
                if (card[2] != card[3])
                    return false;
                if (card[3] != card[4])
                    return false;
                if (card[2] != card[4])
                    return false;
                return true;
            }
            else if (card[3] == card[4])//后2张是对子
            {
                if (card[0] != card[1])
                    return false;
                if (card[1] != card[2])
                    return false;
                if (card[0] != card[2])
                    return false;
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// 是否是顺子45678
    /// </summary>
    /// <param name="card"></param>
    /// <returns></returns>
    public static bool IsShunZi(List<int> card)
    {
        if (card.Count >= 5 && card.Count <= 12)
        {
            for (int i = 0; i < card.Count - 1; i++)
            {
                if (card[i + 1] != card[i] + 1)
                {
                    return false;
                }
                if (card[i] == 15 || card[i] == 16 || card[i] == 17)//顺子不能是2和2王
                    return false;
            }
            return true;
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// 是否是连对334455
    /// </summary>
    /// <param name="card"></param>
    /// <returns></returns>
    public static bool IsLianDui(List<int> card)
    {
        if (card.Count >= 6 && card.Count % 2 == 0)
        {
            for (int i = 0; i < card.Count; i = i + 2)
            {
                if (card[i] == 15 || card[i] == 16 || card[i] == 17)//连对不能包含2和俩王
                    return false;
                if (card[i] != card[i + 1])//对子之间是否相等
                    return false;
                if (card[i + 2] != card[i] + 1)//2个对子之间是否相差1
                    return false;
            }
            return true;
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// 是否是飞机333444
    /// </summary>
    /// <param name="card"></param>
    /// <returns></returns>
    public static bool IsFlay(List<int> card)
    {
        if (card.Count >= 6 && card.Count % 3 == 0)
        {
            for (int i = 0; i < card.Count; i = i + 3)
            {
                if (card[i] == 15 || card[i] == 16 || card[i] == 17)//连对不能包含2和俩王
                    return false;
                if (card[i] != card[i + 1])
                    return false;
                if (card[i + 1] != card[i + 2])
                    return false;
                if (card[i] != card[i + 2])
                    return false;
                if (card[i] + 1 != card[i + 3])
                    return false;
            }
            return true;
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// 是否是飞机带单
    /// </summary>
    /// <param name="card"></param>
    /// <returns></returns>
    //public bool IsFlayOne(List<int> card)
    //{

    //}

    /// <summary>
    /// 是否是炸弹 
    /// </summary>
    /// <param name="card"></param>
    /// <returns></returns>
    public static bool IsBoom(List<int> card)
    {
        if (card.Count == 2)
        {
            if (card[0] == 16 && card[1] == 17)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else if (card.Count == 4)
        {
            for (int i = 0; i < card.Count; i++)
            {
                if (i == card.Count)
                {
                    if (card[0] != card[i])
                        return false;
                }
                else
                {
                    if (card[i] != card[i + 1])
                        return false;
                }
            }
            return true;
        }
        else
        {
            return false;
        }

    }

    /// <summary>
    /// 炸弹带单张
    /// </summary>
    /// <param name="card"></param>
    /// <returns></returns>
    public static bool IsBoomOne(List<int> card)
    {
        if (card.Count == 3)
        {
            if (card[1] == 16 && card[2] == 17)
                return true;
            else
                return false;
        }
        else if (card.Count == 5)
        {
            if (card[0] != card[1])
            {
                for (int i = 1; i < card.Count; i++)
                {
                    if (i == card.Count)
                    {
                        if (card[0] != card[i])
                            return false;
                    }
                    else
                    {
                        if (card[i] != card[i + 1])
                            return false;
                    }
                }
                return true;
            }
            else if (card[3] != card[4])
            {
                for (int i = 0; i < card.Count - 1; i++)
                {
                    if (i == card.Count)
                    {
                        if (card[0] != card[i])
                            return false;
                    }
                    else
                    {
                        if (card[i] != card[i + 1])
                            return false;
                    }
                }
                return true;
            }
            else
                return false;
        }
        else
            return false;
    }

    /// <summary>
    /// 炸弹带对子
    /// </summary>
    /// <param name="card"></param>
    /// <returns></returns>
    public static bool IsBoomTwo(List<int> card)
    {
        if (card.Count == 4)
        {
            return false;
        }
        else if (card.Count == 6)
        {
            return false;
        }
        else
            return false;
    }

    /// <summary>
    /// 判读牌的类型
    /// </summary>
    /// <param name="card"></param>
    /// <returns></returns>
    public static DDZ_CardTypes GetCardType(List<int> card)
    {
        DDZ_CardTypes type = DDZ_CardTypes.None;
        card.Sort();
        if (IsSingle(card))
        {
            type = DDZ_CardTypes.Single;
        }
        else if (IsDouble(card))
        {
            type = DDZ_CardTypes.Double;
        }
        else if (IsThree(card))
        {
            type = DDZ_CardTypes.Three;
        }
        else if (IsThreeOne(card))
        {
            type = DDZ_CardTypes.ThreeOne;
        }
        else if (IsThreeTwo(card))
        {
            type = DDZ_CardTypes.ThreeTwo;
        }
        else if (IsShunZi(card))
        {
            type = DDZ_CardTypes.ShunZi;
        }
        else if (IsLianDui(card))
        {
            type = DDZ_CardTypes.LianDui;
        }
        else if (IsFlay(card))
        {
            type = DDZ_CardTypes.Flay;
        }
        else if (IsBoom(card))
        {
            type = DDZ_CardTypes.Boom;
        }
        else if (IsBoomOne(card))
        {
            type = DDZ_CardTypes.BoomOne;
        }
        else if (IsBoomTwo(card))
        {
            type = DDZ_CardTypes.BoomTwo;
        }
        else
        {
            type = DDZ_CardTypes.None;
        }
        return type;
    }
}

————-还没有写完待完善,后面继续更新

猜你喜欢

转载自blog.csdn.net/baidu_39447417/article/details/79841109