Unity 网络斗地主 判断牌的类型

                                                   Unity 网络斗地主  牌的类型

   

     web版本演示地址:   http://www.dreamhome666.com/Desktop.html

     在上个版本中,下面的角色在牌的后面,可以将角色做为一个Panel的子物体,然后调整Panel的depth,即可调整顺序!

   进入正题,定义牌的类型!

   用c#的enum来实现枚举判断,斗地主的牌的类型有,

   /// <summary>
/// 牌类型
/// </summary>
public enum cardtype
{
    //未知类型
    none,
    //王炸
    wangzha,
    //炸弹
    zhadan,
    //四张带两张
    sidaier,
    //三个不带
    sangebudai,
    //三个带一
    sandaiyi,
    //三个带二
    sandaier,
    //两个三个
    lianggesange,
    //两个三个带二个
    lianggesangedaier,
    //两个三个带四个
    lianggesangedaisige,
    //三个三个
    sangesange,
    //三个三个带三个
    sangesangedaisange,
    //三个三个带六个
    sangesangedailiuge,
    //四个三个
    sigesange,
    //四个三个带四个
    sigesangedaisange,
    //四个三个带八个
    sigesangedailiuge,
    //五个三个
    wugesange,
    //五个三个带五个
    wugesangedaiwuge,
    //六个三个
    liugesange,
    //顺子
    danshun,
    //双顺
    shangshun,
    //对子
    duizi,
    //单个
    dan
}

    判断牌的类型及大小!

   

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
/*
 * 判断牌的类型
*/
public class CardPop : MonoBehaviour
{
    /// <summary>
    /// 判断是否包含大小王
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool ishavewang(int[] data)
    {
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == 52 || data[i] == 53)
            {
                return true;
            }
        }
        return false;
    }
    /// <summary>
    /// 是否带2
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool isdai2(int[] data)
    {
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i]%13==1)
            {
                return true;
            }
        }
        return false;
    }
    /// <summary>
    /// 判断对子 53和52是大王和小王
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool isduizi(int[] data,out int max)
    {
        max = -1;
        if (ishavewang(data))
        {
            return false;
        }
       int temp1 = data[0] % 13;
       int temp2 = data[1] % 13;
       if (temp1 == temp2)
       {
           max = temp1;
           if (temp1 == 0)
           {
               max = 13;
           }
           if (temp1 == 1)
           {
               max = 14;
           }
           return true;
       }
       return false;
    }
    /// <summary>
    /// 双顺
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool isshuangshun(int[] data,out int max)
    {
        max = -1;
        if (ishavewang(data)||isdai2(data))
        {
            return false;
        }
        for (int i = 0; i < data.Length; i += 2)
        {
            if (i == data.Length - 2)
            {
                int temp1 = data[i] % 13;
                int temp2 = data[i + 1] % 13;
                if (temp1 != temp2)
                {
                    return false;
                }
            }
            else
            {
                int temp1 = data[i] % 13;
                int temp2 = data[i + 1] % 13;
                if (temp1 == 0)
                {
                    temp1 = 13;
                }
                if (temp2 == 0)
                {
                    temp2 = 13;
                }
                int temp3 = data[i + 2] % 13;
                if (temp1 != temp2 || temp2 - temp3 != 1)
                {
                    return false;
                }
            }
        }
        max = data[0] % 13;
        return true;
    }
    /// <summary>
    /// 单顺
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool isdanshun(int[] data,out int max)
    {
        max = -1;
        if (ishavewang(data)||isdai2(data))
        {
            return false;
        }
        for (int i = 0; i < data.Length-1; i++)
        {
             int temp1 = data[i] % 13;
             int temp2 = data[i+1] % 13;
             if (temp1 == 0)
             {
                 temp1 = 13;
             }
             if (temp2 == 0)
             {
                 temp2 = 13;
             }
             if (temp1 - temp2 != 1)
             {
                 return false;
             }
        }
        max = data[0] % 13;
        return true;
    }
    /// <summary>
    /// 六个三个
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool isliugesange(int[] data,out int max)
    {
        max = -1;
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == 52 || data[i] == 53)
            {
                continue;
            }
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                if (data[j] == 52 || data[j] == 53)
                {
                    continue;
                }
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        if (count1 == 6)
        {
            for (int i = 0; i < data1.Count; i++)
            {
                if (i != data1.Count - 1)
                {
                    int m1 = data1[i];
                    int m2 = data1[i + 1];
                    if (m1 == 0)
                    {
                        m1 = 13;
                    }
                    if (m2 == 0)
                    {
                        m2 = 13;
                    }
                    if (m1 - m2 != 1)
                    {
                        return false;
                    }
                }
            }
            max = data1[0];
            return true;
        }
        return false;
    }
    /// <summary>
    /// 五个三个带五个
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool iswugesangedaiwuge(int[] data,out int max)
    {
        max = -1;
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            if(data[i]==52||data[i]==53)
            {
                continue;
            }
            int data2 = data[i]%13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                if (data[j] == 52 || data[j] == 53)
                {
                    continue;
                }
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        if (count1 == 5)
        {
            for (int i = 0; i < data1.Count; i++)
            {
                if (i != data1.Count - 1)
                {
                    int m1 = data1[i];
                    int m2 = data1[i + 1];
                    if (m1 == 0)
                    {
                        m1 = 13;
                    }
                    if (m2 == 0)
                    {
                        m2 = 13;
                    }
                    if (m1 - m2 != 1)
                    {
                        return false;
                    }
                }
            }
            max = data1[0];
            return true;
        }
        return false;
    }
    /// <summary>
    /// 五个三个
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool iswugesange(int[] data,out int max)
    {
        max = -1;
        if(ishavewang(data))
        {
            return false;
        }
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == 52 || data[i] == 53)
            {
                continue;
            }
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                if (data[j] == 52 || data[j] == 53)
                {
                    continue;
                }
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        if (count1 == 5)
        {
            for (int i = 0; i < data1.Count; i++)
            {
                if (i != data1.Count - 1)
                {
                    int m1 = data1[i];
                    int m2 = data1[i + 1];
                    if (m1 == 0)
                    {
                        m1 = 13;
                    }
                    if (m2 == 0)
                    {
                        m2 = 13;
                    }
                    if (m1 - m2 != 1)
                    {
                        return false;
                    }
                }
            }
            max = data1[0];
            return true;
        }
        return false;
    }
    /// <summary>
    /// 四个三个带八个
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool issigesangedailiuge(int[] data,out int max)
    {
        max = -1;
        if (ishavewang(data))
        {
            return false;
        }
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        List<int> datat = new List<int>();
        int count2 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            int temp1 = data[i] % 13;
            if (data1.Contains(temp1)||datat.Contains(temp1))
            {
                continue;
            }
            int count22=0;
            for (int j = 0; j < data.Length; j++)
            {
                int temp2 = data[j] % 13;
                if (temp1 == temp2)
                {
                    count22++;
                }
            }
            if (count22 == 2)
            {
                count2++;
                datat.Add(temp1);
            }
        }
        if (count1==4&&count2 == 4)
        {
            for (int i = 0; i < data1.Count; i++)
            {
                if (i != data1.Count - 1)
                {
                    int m1 = data1[i];
                    int m2 = data1[i + 1];
                    if (m1 == 0)
                    {
                        m1 = 13;
                    }
                    if (m2 == 0)
                    {
                        m2 = 13;
                    }
                    if (m1 - m2 != 1)
                    {
                        return false;
                    }
                }
            }
            max = data1[0];
            return true;
        }
        return false;
    }
    /// <summary>
    /// 四个三个带四个
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool issigesangedaisige(int[] data,out int max)
    {
        max = -1;
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == 52 || data[i] == 53)
            {
                continue;
            }
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                if (data[j] == 52 || data[j] == 53)
                {
                    continue;
                }
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        if (count1 == 4)
        {
            for (int i = 0; i < data1.Count; i++)
            {
                if (i != data1.Count - 1)
                {
                    int m1 = data1[i];
                    int m2 = data1[i + 1];
                    if (m1 == 0)
                    {
                        m1 = 13;
                    }
                    if (m2 == 0)
                    {
                        m2 = 13;
                    }
                    if (m1 - m2 != 1)
                    {
                        return false;
                    }
                }
            }
            max = data1[0];
            return true;
        }
        return false;
    }
    /// <summary>
    /// 四个三个
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool issigesange(int[] data,out int max)
    {
        max = -1;
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == 52 || data[i] == 53)
            {
                continue;
            }
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                if (data[j] == 52 || data[j] == 53)
                {
                    continue;
                }
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        if (count1 == 4)
        {
            for (int i = 0; i < data1.Count; i++)
            {
                if (i != data1.Count - 1)
                {
                    int m1 = data1[i];
                    int m2 = data1[i + 1];
                    if (m1 == 0)
                    {
                        m1 = 13;
                    }
                    if (m2 == 0)
                    {
                        m2 = 13;
                    }
                    if (m1 - m2 != 1)
                    {
                        return false;
                    }
                }
            }
            max = data1[0];
            return true;
        }
        return false;
    }
    /// <summary>
    /// 三个三个带六个
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool issangesangedailiuge(int[] data,out int max)
    {
        max = -1;
        if (ishavewang(data))
        {
            return false;
        }
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        List<int> datat = new List<int>();
        int count2 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            int temp1 = data[i] % 13;
            if (data1.Contains(temp1) || datat.Contains(temp1))
            {
                continue;
            }
            int count22 = 0;
            for (int j = 0; j < data.Length; j++)
            {
                int temp2 = data[j] % 13;
                if (temp1 == temp2)
                {
                    count22++;
                }
            }
            if (count22 == 2)
            {
                count2++;
                datat.Add(temp1);
            }
        }
        if (count1 == 3 && count2 == 3)
        {
            for (int i = 0; i < data1.Count; i++)
            {
                if (i != data1.Count - 1)
                {
                    int m1 = data1[i];
                    int m2 = data1[i + 1];
                    if (m1 == 0)
                    {
                        m1 = 13;
                    }
                    if (m2 == 0)
                    {
                        m2 = 13;
                    }
                    if (m1 - m2 != 1)
                    {
                        return false;
                    }
                }
            }
            max = data1[0];
            return true;
        }
        return false;
    }
    /// <summary>
    /// 三个三个带三个
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool issangesangedaisange(int[] data,out int max)
    {
        max = -1;
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == 52 || data[i] == 53)
            {
                continue;
            }
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                if (data[j] == 52 || data[j] == 53)
                {
                    continue;
                }
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        if (count1 == 3)
        {
            for (int i = 0; i < data1.Count; i++)
            {
                if (i != data1.Count - 1)
                {
                    int m1 = data1[i];
                    int m2 = data1[i + 1];
                    if (m1 == 0)
                    {
                        m1 = 13;
                    }
                    if (m2 == 0)
                    {
                        m2 = 13;
                    }
                    if (m1 - m2 != 1)
                    {
                        return false;
                    }
                }
            }
            max = data1[0];
            return true;
        }
        return false;
    }
    /// <summary>
    /// 三个三个
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool issangesange(int[] data,out int max)
    {
        max = -1;
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == 52 || data[i] == 53)
            {
                continue;
            }
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                if (data[j] == 52 || data[j] == 53)
                {
                    continue;
                }
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        if (count1 == 3)
        {
            for (int i = 0; i < data1.Count; i++)
            {
                if (i != data1.Count - 1)
                {
                    int m1 = data1[i];
                    int m2 = data1[i + 1];
                    if (m1 == 0)
                    {
                        m1 = 13;
                    }
                    if (m2 == 0)
                    {
                        m2 = 13;
                    }
                    if (m1 - m2 != 1)
                    {
                        return false;
                    }
                }
            }
            max = data1[0];
            return true;
        }
        return false;
    }
    /// <summary>
    /// 两个三个带四个
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool islianggesangedaisige(int[] data,out int max)
    {
        max = -1;
        if (ishavewang(data))
        {
            return false;
        }
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        List<int> datat = new List<int>();
        int count2 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            int temp1 = data[i] % 13;
            if (data1.Contains(temp1) || datat.Contains(temp1))
            {
                continue;
            }
            int count22 = 0;
            for (int j = 0; j < data.Length; j++)
            {
                int temp2 = data[j] % 13;
                if (temp1 == temp2)
                {
                    count22++;
                }
            }
            if (count22 == 2)
            {
                count2++;
                datat.Add(temp1);
            }
        }
        if (count1 == 2 && count2 == 2)
        {
            for (int i = 0; i < data1.Count; i++)
            {
                if (i != data1.Count - 1)
                {
                    int m1 = data1[i];
                    int m2 = data1[i + 1];
                    if (m1 == 0)
                    {
                        m1 = 13;
                    }
                    if (m2 == 0)
                    {
                        m2 = 13;
                    }
                    if (m1 - m2 != 1)
                    {
                        return false;
                    }
                }
            }
            max = data1[0];
            return true;
        }
        return false;
    }
    /// <summary>
    /// 两个三个带两个
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool islianggesangedailiangge(int[] data,out int max)
    {
        max = -1;
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == 52 || data[i] == 53)
            {
                continue;
            }
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                if (data[j] == 52 || data[j] == 53)
                {
                    continue;
                }
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        if (count1 == 2)
        {
            for (int i = 0; i < data1.Count; i++)
            {
                if (i != data1.Count - 1)
                {
                    int m1 = data1[i];
                    int m2 = data1[i + 1];
                    if (m1 == 0)
                    {
                        m1 = 13;
                    }
                    if (m2 == 0)
                    {
                        m2 = 13;
                    }
                    if (m1 - m2 != 1)
                    {
                        return false;
                    }
                }
            }
            max = data1[0];
            return true;
        }
        return false;
    }
    /// <summary>
    /// 两个三个
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool islianggesange(int[] data,out int max)
    {
        max = -1;
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == 52 || data[i] == 53)
            {
                continue;
            }
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                if (data[j] == 52 || data[j] == 53)
                {
                    continue;
                }
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        if (count1 == 2)
        {
            for (int i = 0; i < data1.Count; i++)
            {
                if (i != data1.Count - 1)
                {
                    int m1 = data1[i];
                    int m2 = data1[i + 1];
                    if (m1 == 0)
                    {
                        m1 = 13;
                    }
                    if (m2 == 0)
                    {
                        m2 = 13;
                    }
                    if (m1 - m2 != 1)
                    {
                        return false;
                    }
                }
            }
            max = data1[0];
            return true;
        }
        return false;
    }
    /// <summary>
    /// 三带二
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool issandaier(int[] data,out int max)
    {
        max = -1;
        if (ishavewang(data))
        {
            return false;
        }
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        List<int> datat = new List<int>();
        int count2 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            int temp1 = data[i] % 13;
            if (data1.Contains(temp1) || datat.Contains(temp1))
            {
                continue;
            }
            int count22 = 0;
            for (int j = 0; j < data.Length; j++)
            {
                int temp2 = data[j] % 13;
                if (temp1 == temp2)
                {
                    count22++;
                }
            }
            if (count22 == 2)
            {
                count2++;
                datat.Add(temp1);
            }
        }
        if (count1 == 1 && count2 == 1)
        {
            max = data1[0];
            if (data1[0] == 0)
            {
                max = 13;
            }
            if (data1[0] == 1)
            {
                max = 14;
            }
            return true;
        }
        return false;
    }
    /// <summary>
    /// 三带一
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool issandaiyi(int[] data,out int max)
    {
        max = -1;
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == 52 || data[i] == 53)
            {
                continue;
            }
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                if (data[j] == 52 || data[j] == 53)
                {
                    continue;
                }
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        if (count1 == 1)
        {
            max = data[0];
            if (data1[0] == 0)
            {
                max = 13;
            }
            if (data1[0] == 1)
            {
                max = 14;
            }
            return true;
        }
        return false;
    }
    /// <summary>
    /// 三个不带
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool issange(int[] data,out int max)
    {
        max = -1;
        List<int> data1 = new List<int>();
        int count1 = 0;
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == 52 || data[i] == 53)
            {
                continue;
            }
            int data2 = data[i] % 13;
            if (data1.Contains(data2))
            {
                continue;
            }
            int count = 0;
            for (int j = 0; j < data.Length; j++)
            {
                if (data[j] == 52 || data[j] == 53)
                {
                    continue;
                }
                int data3 = data[j] % 13;
                if (data2 == data3)
                {
                    count++;
                }
            }
            if (count == 3)
            {
                data1.Add(data2);
                count1++;
            }
        }
        if (count1 == 1)
        {
            max = data1[0];
            if (data1[0] == 0)
            {
                max = 13;
            }
            if (data1[0] == 1)
            {
                max = 14;
            }
            return true;
        }
        return false;
    }
    /// <summary>
    /// 四带二
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool issidaier(int[] data,out int max)
    {
        max = -1;
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == 52 || data[i] == 53)
            {
                continue;
            }
            int data1 = data[i] % 13;
            int count1=0;
            for (int j = 0; j < data.Length; j++)
            {
                if (data[j] == 52 || data[j] == 53)
                {
                    continue;
                }
                int data2 = data[j] % 13;
                if (data1 == data2)
                {
                    count1++;
                }
            }
            if (count1 == 4)
            {
                max = data1;
                if (data1 == 0)
                {
                    max = 13;
                }
                if (data1 == 1)
                {
                    max = 14;
                }
                return true;
            }
        }
        return false;
    }
    /// <summary>
    /// 炸弹
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool iszhadan(int[] data,out int max)
    {
        max = -1;
        if (ishavewang(data))
        {
            return false;
        }
        int data1 = data[0] % 13;
        int data2 = data[1] % 13;
        int data3 = data[2] % 13;
        int data4 = data[3] % 13;
        if (data1 == data2 && data1 == data3 && data1 == data4)
        {
            max = data1;
            if (data1 == 0)
            {
                max = 13;
            }
            if (data1 == 1)
            {
                max = 14;
            }
            return true;
        }
        return false;
    }
    public bool iswangzha(int[] data,out int max)
    {
        max = 16;
        if (data[0] == 53 && data[1] == 52)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    public bool isok(int[] data,out int max)
    {
        max = -1;
        int temp=-1;
        switch (data.Length)
        {
            case 1:
                if (data[0]%13 == 0)
                {
                    max = 13;
                }
                if (data[0]%13 == 1)
                {
                    max = 14;
                }
                if (data[0] == 52)
                {
                    max = 15;
                }
                if (data[0] == 53)
                {
                    max = 16;
                }
                max = data[0] % 13;
                return true;
                break;
            case 2:
                if (isduizi(data,out temp)||iswangzha(data,out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 3:
                if (issange(data,out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 4:
                if (issandaiyi(data,out temp)||iszhadan(data,out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 5:
                if (issandaier(data,out temp) || isdanshun(data,out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 6:
                if (isdanshun(data,out temp) || isshuangshun(data,out temp) || islianggesange(data,out temp) || issidaier(data,out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 7:
                if (isdanshun(data,out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 8:
                if (isdanshun(data, out temp) || isshuangshun(data, out temp) || islianggesangedailiangge(data, out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 9:
                if (isdanshun(data, out temp) || issangesange(data, out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 10:
                if (isdanshun(data, out temp) || isshuangshun(data, out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 11:
                if (isdanshun(data, out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 12:
                if (isdanshun(data, out temp) || isshuangshun(data, out temp) || issigesange(data, out temp) || issangesangedaisange(data, out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 13:
                if (isdanshun(data, out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 14:
                if (isdanshun(data, out temp) || isshuangshun(data, out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 15:
                if (isdanshun(data, out temp) || iswugesange(data, out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 16:
                if (isshuangshun(data, out temp) || issigesangedaisige(data, out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 18:
                if (isshuangshun(data, out temp) || isliugesange(data, out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            case 20:
                if (isshuangshun(data, out temp))
                {
                    max = temp;
                    return true;
                }
                break;
            default:
                return false;
        }
        return false;
    }
}
原文地址:https://www.cnblogs.com/alongu3d/p/3458680.html