C++麻将游戏算法深入解析

C++麻将游戏算法深入解析
 
 
      这两天为了工具箱的完善,整理了这些年引擎开发的一些资料,无意中发现06年写的一个麻将算法,编译运行了一下,还是有点意思的,拿出来整理一下分享给大家。
 
       麻将是一种大家最喜爱的娱乐活动之一,相信所有人都有接触过。我写的这版算法,是可以吃,碰,杠,还有把牌摸完没有人胡时的皇庄和包听。是用控制台方式来表现的,什么?控制台?
       对,因为是算法的设计,所以用控制台来表现当然最简单了。
 
      当然,在交互时要用文字输入会有少许不便,不过这种形式的游戏可是图形游戏的鼻祖哦~
 
     好,废话不多说了,来说一下设计思路:
 
     对于麻将的一个玩家,都有一个牌墙的管理,这里封装了一副牌墙的各种算法,这个类我命名为CMJ。
     另外还有一个洗牌类,负责洗牌和发牌。这个类为CMJManage。
 
     我们先来看一下CMJ类。
CMJ.h:
 
[cpp]  
#ifndef _CMJ_H  
#define _CMJ_H  
//============================================  
//Author:Honghaier  
//Date:2006-12-20  
//QQ:285421210  
//============================================  
#include < windows.h>  
#include <iostream>  
#include <vector>  
#include <algorithm>  
using namespace std;  
  
  
#define MJPAI_ZFB               0   //中,发,白  
#define MJPAI_FENG              1   //东西南北风  
#define MJPAI_WAN               2   //万  
#define MJPAI_TIAO              3   //条  
#define MJPAI_BING              4   //饼  
#define MJPAI_HUA               5   //花  
  
#define MJPAI_GETPAI            true    //起牌  
#define MJPAI_PUTPAI            false   //打牌  
//节点信息  
struct stPAI  
{  
    int     m_Type;             //牌类型  
    int     m_Value;            //牌字  
  
}  
;  
  
//吃牌顺  
struct stCHI                      
{  
    int     m_Type;             //牌类型  
    int     m_Value1;           //牌字  
    int     m_Value2;           //牌字  
    int     m_Value3;           //牌字  
}  
;  
//  m_Type      m_Value  
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//  
//  0       |   中   1   发2  白                                               
//          |  
//  1       |   东 1 西2  南     北                                    
//          |  
//  2       |   一万  二万  ……  九万  
//          |  
//  3       |   一条  二条  ……  九条                    
//          |  
//  4       |   一饼  二饼  ……  九饼  
//          |  
//  5       |   春       夏       秋       东       竹       兰       梅       菊  
//          |  
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//  
  
  
  
//胡牌信息  
struct stGoodInfo  
{  
    char    m_GoodName[100];            //胡牌术语  
    int     m_GoodValue;                //胡牌番数  
}  
;  
//牌  
class CMJ  
{  
    vector<  int >        m_MyPAIVec[6];      //起的种牌型  
    vector<  int >        m_ChiPAIVec[6];     //吃的种牌型  
    vector<  int >        m_PengPAIVec[6];    //碰的种牌型  
    vector<  int >        m_GangPAIVec[6];    //杠的种牌型  
  
    stPAI               m_LastPAI;          //最后起的牌  
    stGoodInfo          m_GoodInfo;         //胡牌信息  
  
    bool                m_9LBD;             //是否听连宝灯牌型  
    bool                m_13Y;              //是否听十三幺  
    int                 m_MKNum;            //明刻数  
    int                 m_AKNum;            //暗刻数  
    bool                m_4AK;              //是否是听四暗刻  
  
    vector<  stCHI >      m_TempChiPAIVec;    //吃的可选组合  
    vector<  stPAI >      m_TempPengPAIVec;   //碰的可选组合  
    vector<  stPAI >      m_TempGangPAIVec;   //杠的可选组合  
  
public:  
  
    //构造  
    CMJ();  
    //析构  
    ~CMJ();  
    //初始化  
    void            Init();  
    //起牌  
    bool            AddPai(int p_Type,int p_Value);  
    //取得对应的牌在牌墙的索引  
    int             GetPaiIndex(int p_Type,int p_Value);  
    //打牌(参数为对应的牌在牌墙的索引)  
    bool            DelPai(int PaiIndex);  
    //删除牌  
    bool            DelPai(int p_Type,int p_Value);  
    //清空牌  
    void            CleanUp();  
    //取得胡牌信息  
    stGoodInfo      *GetInfo();  
    //检测是否胡牌  
    bool            CheckAllPai(bool GetOrPut);  
    //对所有的牌进行输出  
    void            PrintAllPai();  
    //对一张牌进行输出  
    void            PrintPai(int p_Type,int p_Value);  
    //吃牌  
    bool            CheckChiPai(int p_Type,int p_Value);  
    //吃牌  
    bool            DoChiPai(int p_iIndex,int p_Type,int p_Value);  
    //碰牌  
    bool            CheckPengPai(int p_Type,int p_Value);  
    //碰牌  
    bool            DoPengPai(int p_Type,int p_Value);  
    //杠牌  
    bool            CheckGangPai(int p_Type,int p_Value);  
    //杠牌  
    bool            DoGangPai(int p_Type,int p_Value);  
    //对可吃的组合进行输出  
    void            PrintChiChosePai();  
    //对可碰的组合进行输出  
    void            PrintPengChosePai();  
    //对可杠的组合进行输出  
    void            PrintGangChosePai();  
    //取得吃牌组合数  
    UINT            GetChiChoseNum();  
  
private:  
  
    //检测是否胡牌(张)  
    bool    CheckAAPai(int iValue1,int iValue2);  
    //检测是否三连张  
    bool    CheckABCPai(int iValue1,int iValue2,int iValu3);  
    //检测是否三重张  
    bool    CheckAAAPai(int iValue1,int iValue2,int iValu3);  
    //检测是否四重张  
    bool    CheckAAAAPai(int iValue1,int iValue2,int iValu3,int iValue4);  
    //检测是否三连对  
    bool    CheckAABBCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6);  
    //检测是否三连高压  
    bool    CheckAAABBBCCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9);  
    //检测是否三连刻  
    bool    CheckAAAABBBBCCCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12);  
    //检测是否六连对  
    bool    CheckAABBCCDDEEFFPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12);  
    //带将牌检测=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  
      
    //检测是否胡牌(张)  
    bool    Check5Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5);  
    //检测是否胡牌(张)  
    bool    Check8Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8);  
    //检测是否胡牌(张)  
    bool    Check11Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11);  
    //检测是否胡牌(张)  
    bool    Check14Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12,int iValue13,int iValue14);  
  
    //不带将牌检测-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  
      
    //检测是否胡牌(张)  
    bool    Check3Pai(int iValue1,int iValue2,int iValue3);  
    //检测是否胡牌(张)  
    bool    Check6Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6);  
    //检测是否胡牌(张)  
    bool    Check9Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9);  
    //检测是否胡牌(张)  
    bool    Check12Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12);  
      
  
private:      
    //胡牌判断  
  
    //检测是否胡大四喜  
    bool    CheckD4X_HU();  
    //检则是否胡大三元  
    bool    CheckD3Y_HU();  
    //检测是否胡绿一色  
    bool    CheckL1S_HU();  
    //检测是否胡九莲宝灯  
    bool    Check9LBD_HU();  
    //检测是否胡四杠  
    bool    Check4Gang_HU();  
    //检测是否胡连七对  
    bool    CheckL7D_HU();  
    //检测是否胡十三幺  
    bool    Chekc13Y_HU();  
    //检测是否胡清幺九  
    bool    CheckQY9_HU();  
    //检测是否胡小四喜  
    bool    CheckX4X_HU();  
    //检测是否胡小三元  
    bool    CheckX3Y_HU();  
    //检测是否胡字一色  
    bool    CheckZ1S_HU();  
    //检测是否四暗刻  
    bool    Check4AK_HU();  
    //检测是否一色双龙会  
    bool    Check1S2LH_HU();  
    //检测是否一色四同顺  
    bool    Check1S4TS_HU();  
    //检测是否一色四节高?  
    bool    Check1S4JG_HU();  
    //检测是否一色四步高?  
    bool    Check1S4BG_HU();  
    //检测是否三杠  
    bool    Check3Gang_HU();  
    //检测是否混幺九  
    bool    CheckHY9_HU();  
    //检测是否七对  
    bool    Check7D_HU();  
    //检测是否七星不靠  
    bool    Check7XBK_HU();  
    //检测是否全双刻?  
    bool    CheckQSK_HU();  
    //清一色  
    bool    CheckQ1S_HU();  
    //检测是否一色三同顺  
    bool    Check1S3TS_HU();  
    //检测是否一色三节高  
    bool    Check1S3JG_HU();  
    //检测是否全大  
    bool    CheckQD_HU();  
    //检测是否全中  
    bool    CheckQZ_HU();  
    //检测是否全小  
    bool    CheckQX_HU();  
    //检测是否青龙  
    bool    CheckQL_HU();  
    //检测是否三色双龙会  
    bool    Check3S2LH_HU();  
    //检测是否一色三步高  
    bool    Check1S3BG_HU();  
    //全带五  
    bool    CheckQD5_HU();  
    //三同刻  
    bool    Check3TK_HU();  
    //三暗刻  
    bool    Check3AK_HU();  
    //单钓将  
    bool    CheckDDJ_HU();  
    //检测胡  
    bool    CheckHU();  
private:  
    //听牌判断  
  
    //检测是否听九莲宝灯  
    bool    Check9LBD_TING();  
    //检测是否听十三幺  
    bool    Check13Y_TING();  
    //检测是否听四暗刻  
    bool    Check4AK_TING();  
    //检测是否听牌  
    bool    CheckTING();  
  
}  
;  
  
#endif  
其对应的CPP :
 
[cpp]  
#include "CMJ.h"  
//构造  
CMJ::CMJ()  
{  
    m_9LBD  = false;  
    m_13Y   = false;  
    m_4AK   = false;  
    m_AKNum = 0;  
    m_MKNum = 0;  
}  
  
//析构  
CMJ::~CMJ()  
{  
  
}  
//初始化  
void   CMJ::Init()  
{  
    m_9LBD  = false;  
    m_13Y   = false;  
    m_4AK   = false;  
    m_AKNum = 0;  
    m_MKNum = 0;  
}  
//加入新牌,并排序  
bool    CMJ::AddPai(int p_Type,int p_Value)  
{  
    int iSize = m_MyPAIVec[p_Type].size();  
    bool t_Find = false;  
    vector<  int >::iterator Iter;  
    for(Iter = m_MyPAIVec[p_Type].begin();Iter !=m_MyPAIVec[p_Type].end(); Iter++)  
    {  
        if((*Iter)>p_Value)  
        {  
            m_MyPAIVec[p_Type].insert(Iter,p_Value);  
            t_Find = true;  
            break;  
        }  
          
    }  
      
    if(t_Find==false)  
    {  
        m_MyPAIVec[p_Type].push_back(p_Value);  
    }  
    m_LastPAI.m_Type    = p_Type;  
    m_LastPAI.m_Value   = p_Value;  
  
    return true;  
}  
  
//取得对应的牌在牌墙的索引  
int CMJ::GetPaiIndex(int p_Type,int p_Value)  
{  
    int count = 0;  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[i].begin();Iter !=m_MyPAIVec[i].end(); Iter++)  
        {  
            if(p_Type==i&&(*Iter)==p_Value)  
            {  
                return count;  
            }  
            count++;  
        }  
    }  
    return -1;  
}  
//打牌  
bool    CMJ::DelPai(int PaiIndex)  
{  
    int count = 0;  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[i].begin();Iter !=m_MyPAIVec[i].end(); Iter++)  
        {  
            if(count==PaiIndex)  
            {  
                m_MyPAIVec[i].erase(Iter);  
                return true;  
            }  
            count++;  
        }  
    }  
    return false;  
}  
//删除牌  
bool    CMJ::DelPai(int p_Type,int p_Value)  
{  
    vector<  int >::iterator Iter;  
    for(Iter = m_MyPAIVec[p_Type].begin();Iter !=m_MyPAIVec[p_Type].end(); Iter++)  
    {  
        if((*Iter)==p_Value)  
        {  
            m_MyPAIVec[p_Type].erase(Iter);  
            return true;  
        }  
    }  
    return false;  
}  
//清空牌  
void    CMJ::CleanUp()  
{  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        m_MyPAIVec[i].clear();  
        m_ChiPAIVec[i].clear();  
        m_PengPAIVec[i].clear();  
        m_GangPAIVec[i].clear();  
    }  
}  
//取得胡牌信息  
stGoodInfo      *CMJ::GetInfo()  
{  
    return &m_GoodInfo;  
}  
  
//对所有的牌进行函数调用  
void    CMJ::PrintAllPai()  
{  
    cout<<" ";  
    for(UINT i = 0 ; i < 13 ; i++ )  
    {  
        cout<<i<<"  - ";  
    }  
    cout<<endl;  
    int icount = 0;  
    //箭牌  
    if(m_MyPAIVec[0].empty()==false)  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[0].begin();Iter !=m_MyPAIVec[0].end(); Iter++)  
        {  
            switch(*Iter)  
            {  
            case 1:  
                cout<<"[ 中]";  
                break;  
            case 2:  
                cout<<"[ 发]";  
                break;  
            case 3:  
                cout<<"[ 白]";  
                break;  
  
            }  
            icount++;  
        }  
  
    }  
    cout<<endl;  
    for(UINT i =0 ; i < icount; i++ )  
    {  
        cout<<"     ";  
    }  
    //风牌  
    if(m_MyPAIVec[1].empty()==false)  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[1].begin();Iter !=m_MyPAIVec[1].end(); Iter++)  
        {  
            switch(*Iter)  
            {  
            case 1:  
                cout<<"[ 东]";  
                break;  
            case 2:  
                cout<<"[ 南]";  
                break;  
            case 3:  
                cout<<"[ 西]";  
                break;  
            case 4:  
                cout<<"[ 北]";  
                break;  
            }  
            icount++;  
        }  
    }  
    cout<<endl;  
    for(UINT i =0 ; i < icount; i++ )  
    {  
        cout<<"     ";  
    }  
    //万  
    if(m_MyPAIVec[2].empty()==false)  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[2].begin();Iter !=m_MyPAIVec[2].end(); Iter++)  
        {  
            cout<<"["<<(*Iter)<<"万]";  
            icount++;  
        }  
    }  
    cout<<endl;  
    for(UINT i =0 ; i < icount; i++ )  
    {  
        cout<<"     ";  
    }  
    //条  
    if(m_MyPAIVec[3].empty()==false)  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[3].begin();Iter !=m_MyPAIVec[3].end(); Iter++)  
        {  
            cout<<"["<<(*Iter)<<"条]";  
            icount++;  
        }  
    }  
    cout<<endl;  
    for(UINT i =0 ; i < icount; i++ )  
    {  
        cout<<"     ";  
    }  
    //饼  
    if(m_MyPAIVec[4].empty()==false)  
    {  
        vector<  int >::iterator Iter;  
        for(Iter = m_MyPAIVec[4].begin();Iter !=m_MyPAIVec[4].end(); Iter++)  
        {  
            cout<<"["<<(*Iter)<<"饼]";  
            icount++;  
        }  
    }  
    cout<<endl;  
    for(UINT i =0 ; i < icount; i++ )  
    {  
        cout<<"     ";  
    }  
}  
//对一张牌进行输出  
void CMJ::PrintPai(int p_Type,int p_Value)  
{  
//箭牌  
    if(p_Type==0)  
    {  
        switch(p_Value)  
        {  
        case 1:  
            cout<<"[中]";  
            break;  
        case 2:  
            cout<<"[发]";  
            break;  
        case 3:  
            cout<<"[白]";  
            break;  
        }  
    }  
    //风牌  
    if(p_Type==1)  
    {  
        switch(p_Value)  
        {  
        case 1:  
            cout<<"[东]";  
            break;  
        case 2:  
            cout<<"[南]";  
            break;  
        case 3:  
            cout<<"[西]";  
            break;  
        case 4:  
            cout<<"[北]";  
            break;  
        }  
    }  
    //万  
    if(p_Type==2)  
    {  
        cout<<"["<<p_Value<<"万]";  
    }  
    //条  
    if(p_Type==3)  
    {  
        cout<<"["<<p_Value<<"条]";  
    }  
    //饼  
    if(p_Type==4)  
    {  
        cout<<"["<<p_Value<<"饼]";  
    }  
}  
  
//吃牌  
bool    CMJ::CheckChiPai(int p_Type,int p_Value)  
{  
    m_TempChiPAIVec.clear();  
    //饼  
    if(m_MyPAIVec[p_Type].empty()==false)  
    {  
        int iSize = m_MyPAIVec[p_Type].size();  
        if( iSize >= 2)  
        {  
            for(UINT i = 0 ; i < iSize-1 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i]==(p_Value-2))&&(m_MyPAIVec[p_Type][i+1]==(p_Value-1)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value-2;  
                    t_Chi.m_Value2 = p_Value-1;  
                    t_Chi.m_Value3 = p_Value;  
                    m_TempChiPAIVec.push_back(t_Chi);  
  
                }  
                if((m_MyPAIVec[p_Type][i]==(p_Value-1))&&(m_MyPAIVec[p_Type][i+1]==(p_Value+1)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value-1;  
                    t_Chi.m_Value2 = p_Value;  
                    t_Chi.m_Value3 = p_Value+1;  
                    m_TempChiPAIVec.push_back(t_Chi);  
  
                }  
                if((m_MyPAIVec[p_Type][i]==(p_Value+1))&&(m_MyPAIVec[p_Type][i+1]==(p_Value+2)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value;  
                    t_Chi.m_Value2 = p_Value+1;  
                    t_Chi.m_Value3 = p_Value+2;  
                    m_TempChiPAIVec.push_back(t_Chi);  
                }  
            }  
  
        }  
        //假设吃B,已有ABC  
        if( iSize >= 3)  
        {  
            for(UINT i = 1 ; i < iSize-1 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i-1]==(p_Value-1))&&(m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+1]==(p_Value+1)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value-1;  
                    t_Chi.m_Value2 = p_Value;  
                    t_Chi.m_Value3 = p_Value+1;  
                    m_TempChiPAIVec.push_back(t_Chi);  
                }  
            }  
        }  
        //假设吃B,已有ABBC  
        if( iSize >= 4)  
        {  
            for(UINT i = 1 ; i < iSize-2 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i-1]==(p_Value-1))&&(m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+2]==(p_Value+1)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value-1;  
                    t_Chi.m_Value2 = p_Value;  
                    t_Chi.m_Value3 = p_Value+1;  
                    m_TempChiPAIVec.push_back(t_Chi);  
                }  
            }  
        }  
        //假设吃B,已有ABBBC  
        if( iSize >= 5)  
        {  
            for(UINT i = 1 ; i < iSize-3 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i-1]==(p_Value-1))&&(m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+3]==(p_Value+1)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value-1;  
                    t_Chi.m_Value2 = p_Value;  
                    t_Chi.m_Value3 = p_Value+1;  
                    m_TempChiPAIVec.push_back(t_Chi);  
                }  
            }  
        }  
        //假设吃B,已有ABBBBC  
        if( iSize >= 6)  
        {  
            for(UINT i = 1 ; i < iSize-4 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i-1]==(p_Value-1))&&(m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+4]==(p_Value+1)))  
                {  
                    stCHI t_Chi;  
                    t_Chi.m_Type = p_Type;  
                    t_Chi.m_Value1 = p_Value-1;  
                    t_Chi.m_Value2 = p_Value;  
                    t_Chi.m_Value3 = p_Value+1;  
                    m_TempChiPAIVec.push_back(t_Chi);  
                }  
            }  
        }  
        if(m_TempChiPAIVec.size() > 0)  
        {  
            return  true;  
        }  
    }  
    return false;  
}  
//吃牌  
bool CMJ::DoChiPai(int p_iIndex,int p_Type,int p_Value)  
{   
    AddPai(p_Type,p_Value);  
    vector<stCHI>::iterator Iter;  
    int icount = 0;  
    for(Iter = m_TempChiPAIVec.begin(); Iter != m_TempChiPAIVec.end(); Iter++ )  
    {  
        if(icount == p_iIndex)  
        {  
            DelPai((*Iter).m_Type,(*Iter).m_Value1);  
            DelPai((*Iter).m_Type,(*Iter).m_Value2);  
            DelPai((*Iter).m_Type,(*Iter).m_Value3);  
  
            m_ChiPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value1);  
            m_ChiPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value2);  
            m_ChiPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value3);  
  
            return true;  
        }  
        icount++;  
    }  
    return false;  
}  
//对可吃的组合进行输出  
void CMJ::PrintChiChosePai()  
{  
    cout<<"================吃牌组合======================="<<endl;  
    vector<stCHI>::iterator Iter;  
    for(Iter = m_TempChiPAIVec.begin(); Iter != m_TempChiPAIVec.end();Iter++)  
    {  
        //万  
        if((*Iter).m_Type==2)  
        {  
            cout<<"["<<(*Iter).m_Value1<<"万";  
            cout<<""<<(*Iter).m_Value2<<"万";  
            cout<<""<<(*Iter).m_Value3<<"万]";  
        }  
        //条  
        if((*Iter).m_Type==3)  
        {  
            cout<<"["<<(*Iter).m_Value1<<"条";  
            cout<<""<<(*Iter).m_Value2<<"条";  
            cout<<""<<(*Iter).m_Value3<<"条]";  
        }  
        //饼  
        if((*Iter).m_Type==4)  
        {  
            cout<<"["<<(*Iter).m_Value1<<"饼";  
            cout<<""<<(*Iter).m_Value2<<"饼";  
            cout<<""<<(*Iter).m_Value3<<"饼]";  
        }  
    }  
    cout<<endl<<"========================================="<<endl;  
}  
//对可碰的组合进行输出  
void CMJ::PrintPengChosePai()  
{  
    cout<<"=====================碰牌=================="<<endl;  
    vector<stPAI>::iterator Iter;  
    for(Iter = m_TempPengPAIVec.begin(); Iter != m_TempPengPAIVec.end();Iter++)  
    {  
        //万  
        if((*Iter).m_Type==2)  
        {  
            cout<<"["<<(*Iter).m_Value<<"万";  
            cout<<""<<(*Iter).m_Value<<"万";  
            cout<<""<<(*Iter).m_Value<<"万]";  
        }  
        //条  
        if((*Iter).m_Type==3)  
        {  
            cout<<"["<<(*Iter).m_Value<<"条";  
            cout<<""<<(*Iter).m_Value<<"条";  
            cout<<""<<(*Iter).m_Value<<"条]";  
        }  
        //饼  
        if((*Iter).m_Type==4)  
        {  
            cout<<"["<<(*Iter).m_Value<<"饼";  
            cout<<""<<(*Iter).m_Value<<"饼";  
            cout<<""<<(*Iter).m_Value<<"饼]";  
        }  
    }  
    cout<<endl<<"========================================="<<endl;  
}  
//对可杠的组合进行输出  
void CMJ::PrintGangChosePai()  
{  
    cout<<"====================杠牌==================="<<endl;  
    vector<stPAI>::iterator Iter;  
    for(Iter = m_TempGangPAIVec.begin(); Iter != m_TempGangPAIVec.end();Iter++)  
    {  
        //万  
        if((*Iter).m_Type==2)  
        {  
            cout<<"["<<(*Iter).m_Value<<"万";  
            cout<<""<<(*Iter).m_Value<<"万";  
            cout<<""<<(*Iter).m_Value<<"万";  
            cout<<""<<(*Iter).m_Value<<"万]";  
        }  
        //条  
        if((*Iter).m_Type==3)  
        {  
            cout<<"["<<(*Iter).m_Value<<"条";  
            cout<<""<<(*Iter).m_Value<<"条";  
            cout<<""<<(*Iter).m_Value<<"条";  
            cout<<""<<(*Iter).m_Value<<"条]";  
        }  
        //饼  
        if((*Iter).m_Type==4)  
        {  
            cout<<"["<<(*Iter).m_Value<<"饼";  
            cout<<""<<(*Iter).m_Value<<"饼";  
            cout<<""<<(*Iter).m_Value<<"饼";  
            cout<<""<<(*Iter).m_Value<<"饼]";  
        }  
    }  
    cout<<endl<<"========================================="<<endl;  
}  
//取得吃牌组合数  
UINT CMJ::GetChiChoseNum()  
{  
    return m_TempChiPAIVec.size();  
}  
//碰牌  
bool    CMJ::CheckPengPai(int p_Type,int p_Value)  
{  
    m_TempPengPAIVec.clear();  
    //饼  
    if(m_MyPAIVec[p_Type].empty()==false)  
    {  
        int iSize = m_MyPAIVec[p_Type].size();  
        if( iSize >= 2)  
        {  
            for(UINT i = 0 ; i < iSize-1 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+1]==p_Value))  
                {  
                    stPAI t_Peng;  
                    t_Peng.m_Type   = p_Type;  
                    t_Peng.m_Value  = p_Value;  
                    m_TempPengPAIVec.push_back(t_Peng);  
                    break;  
                }  
            }  
        }  
        if(m_TempPengPAIVec.size() > 0)  
        {  
            return true;  
        }  
    }  
    return false;  
}  
//碰牌  
bool    CMJ::DoPengPai(int p_Type,int p_Value)  
{  
    AddPai(p_Type,p_Value);  
    vector<stPAI>::iterator Iter;  
    for(Iter = m_TempPengPAIVec.begin(); Iter != m_TempPengPAIVec.end(); Iter++ )  
    {  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
  
        m_PengPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
        m_PengPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
        m_PengPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
        return true;  
    }  
    return false;  
}  
//杠牌  
bool    CMJ::CheckGangPai(int p_Type,int p_Value)  
{     
    m_TempGangPAIVec.clear();  
    //饼  
    if(m_MyPAIVec[p_Type].empty()==false)  
    {  
        int iSize = m_MyPAIVec[p_Type].size();  
        if( iSize >= 3)  
        {  
            for(UINT i = 0 ; i < iSize-2 ;  i++ )  
            {  
                if((m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+1]==p_Value)&&(m_MyPAIVec[p_Type][i+2]==p_Value))  
                {  
                    stPAI t_Gang;  
                    t_Gang.m_Type   = p_Type;  
                    t_Gang.m_Value  = p_Value;  
                    m_TempGangPAIVec.push_back(t_Gang);  
                    break;  
                }  
            }  
        }  
        if(m_TempGangPAIVec.size() > 0)  
        {  
            return true;  
        }  
    }  
    return false;  
}  
//杠牌  
bool    CMJ::DoGangPai(int p_Type,int p_Value)  
{  
    AddPai(p_Type,p_Value);  
    vector<stPAI>::iterator Iter;  
    for(Iter = m_TempGangPAIVec.begin(); Iter != m_TempGangPAIVec.end(); Iter++ )  
    {  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
        DelPai((*Iter).m_Type,(*Iter).m_Value);  
  
        //排序放入  
        if(m_GangPAIVec[(*Iter).m_Type].empty())  
        {  
            m_GangPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
            m_GangPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
            m_GangPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
            m_GangPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);  
        }  
        else  
        {  
                vector<int>::iterator Iter2;  
                for(Iter2 = m_GangPAIVec[(*Iter).m_Type].begin(); Iter2 != m_GangPAIVec[(*Iter).m_Type].end(); Iter2++ )  
                {  
                    if((*Iter2)>(*Iter).m_Value)  
                    {  
                        m_GangPAIVec[(*Iter).m_Type].insert(Iter2,(*Iter).m_Value);  
                        m_GangPAIVec[(*Iter).m_Type].insert(Iter2,(*Iter).m_Value);  
                        m_GangPAIVec[(*Iter).m_Type].insert(Iter2,(*Iter).m_Value);  
                        m_GangPAIVec[(*Iter).m_Type].insert(Iter2,(*Iter).m_Value);  
                        break;  
                    }  
                }  
        }  
        return true;  
    }  
    return false;  
}  
//检测是否胡牌  
bool    CMJ::CheckAllPai(bool GetOrPut)  
{  
    if(GetOrPut == MJPAI_GETPAI)  
    {  
        //检查大四喜  
        if(CheckD4X_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"大四喜");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查大三元  
        if(CheckD3Y_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"大三元");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查绿一色  
        if(CheckL1S_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"绿一色");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查九莲宝灯  
        if(Check9LBD_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"九莲宝灯");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查四杠  
        if(Check4Gang_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"四杠");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查连七对  
        if(CheckL7D_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"连七对");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查十三幺  
        if(Chekc13Y_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"十三幺");  
            m_GoodInfo.m_GoodValue = 88;  
            return true;  
        }  
        //检查清幺九  
        if(CheckQY9_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"清幺九");  
            m_GoodInfo.m_GoodValue = 64;  
            return true;  
        }  
        //检查小四喜  
        if(CheckX4X_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"小四喜");  
            m_GoodInfo.m_GoodValue = 64;  
            return true;  
        }  
        //检查小三元  
        if(CheckX3Y_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"小三元");  
            m_GoodInfo.m_GoodValue = 64;  
            return true;  
        }  
        //检测是否四暗刻  
        if(Check4AK_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"四暗刻");  
            m_GoodInfo.m_GoodValue = 64;  
            return true;  
        }  
        //检测是否一色双龙会  
        if(Check1S2LH_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色双龙会");  
            m_GoodInfo.m_GoodValue = 64;  
            return true;  
        }  
        //检测是否一色四同顺  
        if(Check1S4TS_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色四同顺");  
            m_GoodInfo.m_GoodValue = 48;  
            return true;  
        }  
        //检测是否一色四节高  
        if(Check1S4JG_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色四节高");  
            m_GoodInfo.m_GoodValue = 48;  
            return true;  
        }  
        //检测是否一色四步高  
        if(Check1S4BG_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色四步高");  
            m_GoodInfo.m_GoodValue = 32;  
            return true;  
        }  
        //检测是否三杠  
        if(Check3Gang_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"三杠");  
            m_GoodInfo.m_GoodValue = 32;  
            return true;  
        }  
          
        //检测是否七对  
        if(Check7D_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"七对");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否七星不靠  
        if(Check7XBK_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"七星不靠");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否全双刻  
        if(CheckQSK_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"全双刻");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否清一色  
        if(CheckQ1S_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"清一色");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否一色三同顺  
        if(Check1S3TS_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色三同顺");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否一色三节高  
        if(Check1S3JG_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色三节高");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否全大  
        if(CheckQD_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"全大");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否全中  
        if(CheckQZ_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"全中");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否全小  
        if(CheckQX_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"全小");  
            m_GoodInfo.m_GoodValue = 24;  
            return true;  
        }  
        //检测是否青龙  
        if(CheckQL_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"青龙");  
            m_GoodInfo.m_GoodValue = 16;  
            return true;  
        }  
        //检测是否三色双龙会  
        if(Check3S2LH_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"三色双龙会");  
            m_GoodInfo.m_GoodValue = 16;  
            return true;  
        }  
        //检测是否一色三步高  
        if(Check1S3BG_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"一色三步高");  
            m_GoodInfo.m_GoodValue = 16;  
            return true;  
        }  
      
        //检测是否单调将  
        if(CheckDDJ_HU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"单调将");  
            m_GoodInfo.m_GoodValue = 1;  
            return true;  
        }  
  
        //检测是否平胡  
        if(CheckHU())  
        {  
            strcpy(m_GoodInfo.m_GoodName,"平胡");  
            m_GoodInfo.m_GoodValue = 1;  
            return true;  
        }  
  
    }         
    else  
    {  
        //判断是否听连宝灯  
        m_9LBD = Check9LBD_TING();   
        if(m_9LBD)return true;  
        //判断是否听幺  
        m_13Y  = Check13Y_TING();  
        if(m_13Y)return true;  
        //判断是否四暗刻  
        m_4AK  = Check4AK_TING();  
        if(m_4AK)return true;  
        //检测是否听头  
        return CheckTING();  
    }  
    return false;  
}  
  
//检测是否胡牌(张)  
inline bool CMJ::CheckAAPai(int iValue1,int iValue2)  
{  
    if(iValue1 == iValue2)return true;  
    return false;  
}  
  
//检测是否三连张  
inline bool CMJ::CheckABCPai(int iValue1,int iValue2,int iValue3)  
{  
    if(iValue1 == (iValue2-1)&&iValue2 == (iValue3-1))return true;  
    return false;  
}  
  
//检测是否三重张  
inline bool CMJ::CheckAAAPai(int iValue1,int iValue2,int iValue3)  
{  
    if(iValue1 == iValue2&&iValue2 == iValue3)return true;  
    return false;  
}  
  
//检测是否四重张  
inline bool CMJ::CheckAAAAPai(int iValue1,int iValue2,int iValue3,int iValue4)  
{  
    if(iValue1 == iValue2&&iValue2 == iValue3&&iValue3 == iValue4)return true;  
    return false;  
}  
//检测是否三连对  
inline bool CMJ::CheckAABBCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6)  
{  
    if(iValue1 == iValue2&&iValue3 == iValue4&&iValue5 == iValue6)  
    {  
        if((iValue1 == iValue3-1)&&(iValue3 == iValue5-1))  
        {  
            return true;  
        }  
    }  
    return false;     
}  
//检测是否三连高压  
inline bool CMJ::CheckAAABBBCCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9)  
{  
    if((iValue1 == iValue2&&iValue2 == iValue3)&&(iValue4 == iValue5&&iValue5 == iValue6)&&(iValue7 == iValue8&&iValue8 == iValue9))  
    {  
        if((iValue1 == iValue4-1)&&(iValue4 == iValue7-1))  
        {  
            return true;  
        }  
    }  
    return false;  
}  
//检测是否三连刻  
inline bool CMJ::CheckAAAABBBBCCCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12)  
{  
    if((iValue1 == iValue2&&iValue2 == iValue3&&iValue3 == iValue4)&&(iValue5 == iValue6&&iValue6 == iValue7&&iValue7 == iValue8)&&(iValue9 == iValue10&&iValue10 == iValue11&&iValue11 == iValue12))  
    {  
        if((iValue1 == iValue5-1)&&(iValue5 == iValue9-1))  
        {  
            return true;  
        }  
    }  
    return false;  
}  
//检测是否六连对  
inline bool CMJ::CheckAABBCCDDEEFFPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12)  
{  
    if(iValue1 == iValue2&&iValue3 == iValue4&&iValue5 == iValue6&&iValue7 == iValue8&&iValue9 == iValue10&&iValue11 == iValue12)  
    {  
        if((iValue1 == iValue3-1)&&(iValue3 == iValue5-1)&&(iValue5 == iValue7-1)&&(iValue7 == iValue9-1)&&(iValue9 == iValue11-1))  
        {  
            return true;  
        }  
    }  
    return false;  
}  
  
//检测是否胡牌(张)  
bool    CMJ::Check5Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5)  
{  
    //如果是左边两个为将,右边为三重张或三连张  
    if(CheckAAPai(iValue1,iValue2))  
    {  
        if(Check3Pai(iValue3,iValue4,iValue5))return true;  
  
    }  
    //如果中间两个为将  
    if(CheckAAAPai(iValue2,iValue3,iValue4))  
    {  
        if(CheckABCPai(iValue1,iValue4,iValue5))return true;  
    }  
    //如果是左边两个为将,右边为三重张或三连张  
    if(CheckAAPai(iValue4,iValue5))  
    {  
        if(Check3Pai(iValue1,iValue2,iValue3))return true;  
    }  
  
    return false;  
}  
//检测是否胡牌(张)  
bool    CMJ::Check8Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8)  
{  
    //如果是左边两个为将,右边为三重张或三连张  
    if(CheckAAPai(iValue1,iValue2))  
    {  
        return Check6Pai(iValue3,iValue4,iValue5,iValue6,iValue7,iValue8);  
    }  
  
    //如果是中间两个为将,左右边为三重张或三连张  
    if(CheckAAPai(iValue4,iValue5))  
    {  
        if(Check3Pai(iValue1,iValue2,iValue3)&&Check3Pai(iValue6,iValue7,iValue8))return true;  
    }  
  
    //如果是右边两个为将,左边为三重张或三连张  
    if(CheckAAPai(iValue7,iValue8))  
    {  
        return Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6);  
    }  
  
    return false;  
}  
//检测是否胡牌(张)  
bool    CMJ::Check11Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11)  
{  
    //如果是左边两个为将  
    if(CheckAAPai(iValue1,iValue2))  
    {  
        return Check9Pai(iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11);      
    }  
  
    //如果是中间两个为将  
    if(CheckAAPai(iValue4,iValue5))  
    {  
        //无AAA,全ABC  
        if(Check3Pai(iValue1,iValue2,iValue3)&&Check6Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;    
    }  
  
    //如果是右边两个为将  
    if(CheckAAPai(iValue7,iValue8))  
    {  
        //无AAA,全ABC  
        if(Check3Pai(iValue9,iValue10,iValue11)&&Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6))return true;  
    }  
  
    //如果是右边两个为将  
    if(CheckAAPai(iValue10,iValue11))  
    {  
        return Check9Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9);  
    }  
    return false;  
}  
//检测是否胡牌(张)  
bool    CMJ::Check14Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12,int iValue13,int iValue14)  
{  
    //如果是左边两个为将,右边为三重张或三连张  
    if(CheckAAPai(iValue1,iValue2))  
    {  
        //无AAA,全ABC  
        if(Check12Pai(iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12,iValue13,iValue14))return true;  
        return false;  
    }  
  
    //如果是中间两个为将,左右边为三重张或三连张  
    if(CheckAAPai(iValue4,iValue5))  
    {  
        //无AAA,全ABC  
        if(Check3Pai(iValue1,iValue2,iValue3)&&Check9Pai(iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12,iValue13,iValue14))return true;  
        return false;  
    }  
  
    //如果是中间两个为将,左右边为三重张或三连张  
    if(CheckAAPai(iValue7,iValue8))  
    {  
        //无AAA,全ABC  
        if(Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6)&&Check6Pai(iValue9,iValue10,iValue11,iValue12,iValue13,iValue14))return true;  
        return false;  
    }  
  
    //如果是中间两个为将,左右边为三重张或三连张  
    if(CheckAAPai(iValue10,iValue11))  
    {  
        //无AAA,全ABC  
        if(Check3Pai(iValue12,iValue13,iValue14)&&Check9Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;  
        return false;  
    }  
  
    //如果是右边两个为将,左右边为三重张或三连张  
    if(CheckAAPai(iValue13,iValue14))  
    {  
        //无AAA,全ABC  
        if(Check12Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12))return true;  
    }  
    return false;  
}  
//检测是否胡牌(张)  
bool    CMJ::Check3Pai(int iValue1,int iValue2,int iValue3)  
{  
    if(CheckABCPai(iValue1,iValue2,iValue3))return true;  
    if(CheckAAAPai(iValue1,iValue2,iValue3))return true;  
    return false;  
}  
//检测是否胡牌(张)  
bool    CMJ::Check6Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6)  
{  
    if(Check3Pai(iValue1,iValue2,iValue3)&&Check3Pai(iValue4,iValue5,iValue6))return true;  
    if(Check3Pai(iValue1,iValue2,iValue3)&&Check3Pai(iValue4,iValue5,iValue6))return true;  
    //三连对  
    if(CheckAABBCCPai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6))return true;  
    //第一张牌四连张  
    if(CheckAAAAPai(iValue2,iValue3,iValue4,iValue5))  
    {  
        if(CheckABCPai(iValue1,iValue2,iValue6))return true;  
    }  
    return false;  
}  
  
//检测是否胡牌(张)  
bool    CMJ::Check9Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9)  
{  
    if(CheckABCPai(iValue1,iValue2,iValue3)&&Check6Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;  
    if(CheckAAAPai(iValue1,iValue2,iValue3)&&Check6Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;  
    if(CheckABCPai(iValue7,iValue8,iValue9)&&Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6))return true;  
    if(CheckAAAPai(iValue7,iValue8,iValue9)&&Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6))return true;  
  
    return false;  
}  
  
//检测是否胡牌(张)  
bool    CMJ::Check12Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12)  
{  
    if(CheckABCPai(iValue1,iValue2,iValue3)&&Check9Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12))return true;  
    if(CheckAAAPai(iValue1,iValue2,iValue3)&&Check9Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12))return true;  
    if(CheckABCPai(iValue10,iValue11,iValue12)&&Check9Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;  
    if(CheckAAAPai(iValue10,iValue11,iValue12)&&Check9Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;  
    if(Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6)&&Check6Pai(iValue7,iValue8,iValue9,iValue10,iValue11,iValue12))return true;  
  
    return false;  
}  
//检测是否是大四喜  
bool    CMJ::CheckD4X_HU()  
{  
    //东西南北四杠  
    if(m_GangPAIVec[1].size()==16)  
    {  
        //将牌  
        for(int i = 0 ; i < 6 ; i++ )  
        {  
            if(m_MyPAIVec[i].size()==2)  
            {  
                //如果是将  
                if(m_MyPAIVec[i][0] == m_MyPAIVec[i][1])  
                {  
                    return true;  
                }  
            }  
        }  
    }  
    return false;  
  
}  
      
//检则是否是大三元  
bool    CMJ::CheckD3Y_HU()  
{  
    //中发白三杠  
    if(m_GangPAIVec[0].size()==12)  
    {  
        //将牌  
        for(int i = 0 ; i < 6 ; i++ )  
        {  
            if(m_MyPAIVec[i].size()==2)  
            {  
                //如果是将  
                if(m_MyPAIVec[i][0] == m_MyPAIVec[i][1])  
                {  
                    return true;  
                }  
            }  
        }  
    }  
    return false;  
}  
  
//检测是否绿一色  
bool    CMJ::CheckL1S_HU()  
{  
    //只准有发财和条  
    if(m_MyPAIVec[1].size()>0)return false;  
    if(m_MyPAIVec[2].size()>0)return false;  
    if(m_MyPAIVec[4].size()>0)return false;  
    if(m_MyPAIVec[5].size()>0)return false;  
    if(m_ChiPAIVec[1].size()>0)return false;  
    if(m_ChiPAIVec[2].size()>0)return false;  
    if(m_ChiPAIVec[4].size()>0)return false;  
    if(m_ChiPAIVec[5].size()>0)return false;  
    if(m_PengPAIVec[1].size()>0)return false;  
    if(m_PengPAIVec[2].size()>0)return false;  
    if(m_PengPAIVec[4].size()>0)return false;  
    if(m_PengPAIVec[5].size()>0)return false;  
    if(m_GangPAIVec[1].size()>0)return false;  
    if(m_GangPAIVec[2].size()>0)return false;  
    if(m_GangPAIVec[4].size()>0)return false;  
    if(m_GangPAIVec[5].size()>0)return false;  
    //对发财  
    if(m_MyPAIVec[0].size() ==2)  
    {  
        if(m_MyPAIVec[0][0]==2&&m_MyPAIVec[0][1]==2)  
        {  
            for(int i = 1 ;i < 6 ; i++)  
            {  
                if(i==3)continue;  
                if(m_MyPAIVec[i].size()>0)return false;  
                if(m_ChiPAIVec[i].size()>0)return false;  
                if(m_PengPAIVec[i].size()>0)return false;  
                if(m_GangPAIVec[i].size()>0)return false;  
            }  
            //吃  
            int iSize = m_ChiPAIVec[3].size();  
            if(iSize>0)  
            {  
                vector<  int >::iterator Iter;  
                for(Iter = m_ChiPAIVec[3].begin();Iter != m_ChiPAIVec[3].end();Iter++ )  
                {  
                    if((*Iter)==1)return false;  
                    if((*Iter)==5)return false;  
                    if((*Iter)==7)return false;  
                    if((*Iter)==9)return false;  
                }  
            }  
            //碰  
            iSize = m_PengPAIVec[3].size();  
            if(iSize>0)  
            {  
                vector<  int >::iterator Iter;  
                for(Iter = m_PengPAIVec[3].begin();Iter != m_PengPAIVec[3].end();Iter++ )  
                {  
                    if((*Iter)==1)return false;  
                    if((*Iter)==5)return false;  
                    if((*Iter)==7)return false;  
                    if((*Iter)==9)return false;  
                }  
            }  
            //杠  
            iSize = m_GangPAIVec[3].size();  
            if(iSize>0)  
            {  
                vector<  int >::iterator Iter;  
                for(Iter = m_GangPAIVec[3].begin();Iter != m_GangPAIVec[3].end();Iter++ )  
                {  
                    if((*Iter)==1)return false;  
                    if((*Iter)==5)return false;  
                    if((*Iter)==7)return false;  
                    if((*Iter)==9)return false;  
                }  
            }  
            //起  
            iSize = m_MyPAIVec[3].size();  
            if(iSize>0)  
            {  
                vector<  int >::iterator Iter;  
                for(Iter = m_MyPAIVec[3].begin();Iter != m_MyPAIVec[3].end();Iter++ )  
                {  
                    if((*Iter)==1)return false;  
                    if((*Iter)==5)return false;  
                    if((*Iter)==7)return false;  
                    if((*Iter)==9)return false;  
                }  
  
            }  
        }  
    }  
    else  
    {  
        return false;  
    }  
    //如果有三张  
    if(m_MyPAIVec[3].size() == 3)  
    {  
        if(Check3Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2]))return true;  
    }  
    //如果有六张  
    if(m_MyPAIVec[3].size() == 6)  
    {  
        if(Check6Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5]))return true;  
    }  
    //九张  
    if(m_MyPAIVec[3].size() == 9)  
    {  
        if(Check9Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8]))return true;  
    }  
    //十二张  
    if(m_MyPAIVec[3].size() == 12)  
    {  
        if(Check12Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8],m_MyPAIVec[3][9],m_MyPAIVec[3][10],m_MyPAIVec[3][11]))return true;  
    }  
    return  false;  
}  
  
//检测是否九莲宝灯(胡)  
bool    CMJ::Check9LBD_HU()  
{  
    if(m_9LBD)//如果已经成九连宝灯牌型  
    {  
        if(m_MyPAIVec[2].size()==14)return true;  
        if(m_MyPAIVec[3].size()==14)return true;  
        if(m_MyPAIVec[4].size()==14)return true;  
    }  
    return false;  
}  
//检测是否九莲宝灯牌型(听)  
bool    CMJ::Check9LBD_TING()  
{  
    for(UINT i = 2 ; i < 5 ; i++ )  
    {  
        if(m_MyPAIVec[i].size()==13)  
        {  
            if(m_MyPAIVec[i][0]==1&&m_MyPAIVec[i][1]==1&&m_MyPAIVec[i][2]==1)  
            {  
                if(m_MyPAIVec[i][3]==2&&m_MyPAIVec[i][4]==3&&m_MyPAIVec[i][5]==4&&m_MyPAIVec[i][6]==5&&m_MyPAIVec[i][7]==6&&m_MyPAIVec[i][8]==7&&m_MyPAIVec[i][9]==8)  
                {  
                    if(m_MyPAIVec[i][10]==9&&m_MyPAIVec[i][11]==9&&m_MyPAIVec[i][12]==9)  
                    {  
                        return true;  
                    }  
                }  
            }  
        }  
    }  
  
    return false;  
}  
//检测是否是四杠  
bool    CMJ::Check4Gang_HU()  
{  
    int iSize = 0;  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        iSize = m_GangPAIVec[i].size();  
    }  
  
    if(iSize == 16)  
    {  
        //将牌  
        for(int i = 0 ; i < 6 ; i++ )  
        {  
            //如果是将  
            if(CheckAAPai(m_MyPAIVec[i][0],m_MyPAIVec[i][1]))  
            {  
                return true;  
            }  
        }  
          
    }  
    return false;  
}  
  
//检测是否连七对  
bool    CMJ::CheckL7D_HU()  
{     
    for(UINT i = 2 ; i < 5 ; i++ )  
    {  
        if(m_MyPAIVec[i].size()==14)  
        {  
            if(m_MyPAIVec[i][0]==1&&m_MyPAIVec[i][1]==1&&m_MyPAIVec[i][2]==2&&m_MyPAIVec[i][3]==2&&m_MyPAIVec[i][4]==3&&m_MyPAIVec[i][5]==3&&m_MyPAIVec[i][6]==4&&m_MyPAIVec[i][7]==4&&m_MyPAIVec[i][8]==5&&m_MyPAIVec[i][9]==5&&m_MyPAIVec[i][10]==6&&m_MyPAIVec[i][11]==6&&m_MyPAIVec[i][12]==7&&m_MyPAIVec[i][13]==7)  
            {  
                return true;  
            }  
            if(m_MyPAIVec[i][0]==2&&m_MyPAIVec[i][1]==2&&m_MyPAIVec[i][2]==3&&m_MyPAIVec[i][3]==3&&m_MyPAIVec[i][4]==4&&m_MyPAIVec[i][5]==4&&m_MyPAIVec[i][6]==5&&m_MyPAIVec[i][7]==5&&m_MyPAIVec[i][8]==6&&m_MyPAIVec[i][9]==6&&m_MyPAIVec[i][10]==7&&m_MyPAIVec[i][11]==7&&m_MyPAIVec[i][12]==8&&m_MyPAIVec[i][13]==8)  
            {  
                return true;  
            }  
            if(m_MyPAIVec[i][0]==3&&m_MyPAIVec[i][1]==3&&m_MyPAIVec[i][2]==4&&m_MyPAIVec[i][3]==4&&m_MyPAIVec[i][4]==5&&m_MyPAIVec[i][5]==5&&m_MyPAIVec[i][6]==6&&m_MyPAIVec[i][7]==6&&m_MyPAIVec[i][8]==7&&m_MyPAIVec[i][9]==7&&m_MyPAIVec[i][10]==8&&m_MyPAIVec[i][11]==8&&m_MyPAIVec[i][12]==9&&m_MyPAIVec[i][13]==9)  
            {  
                return true;  
            }  
        }  
    }  
  
    return false;  
}  
  
//检测是否胡十三幺  
bool    CMJ::Chekc13Y_HU()  
{  
    if(m_13Y)  
    {  
        bool        i13YSize[13] ;  
        for(UINT i = 0 ; i < 13 ; i++ )  
        {  
            i13YSize[i]=false;  
        }  
        //中发白  
        vector<int>::iterator Iter;  
        for(Iter = m_MyPAIVec[0].begin();Iter != m_MyPAIVec[0].end(); Iter++ )  
        {  
            if((*Iter)==1)  
            {  
                i13YSize[0]=true;  
            }  
            if((*Iter)==2)  
            {  
                i13YSize[1]=true;  
            }  
            if((*Iter)==3)  
            {  
                i13YSize[2]=true;  
            }  
        }  
        //东南西北风  
        for(Iter = m_MyPAIVec[1].begin();Iter != m_MyPAIVec[1].end(); Iter++ )  
        {  
            if((*Iter)==1)  
            {  
                i13YSize[3]=true;  
            }  
            if((*Iter)==2)  
            {  
                i13YSize[4]=true;  
            }  
            if((*Iter)==3)  
            {  
                i13YSize[5]=true;  
            }  
            if((*Iter)==4)  
            {  
                i13YSize[6]=true;  
            }  
        }  
        //一九万  
        for(Iter = m_MyPAIVec[2].begin();Iter != m_MyPAIVec[2].end(); Iter++ )  
        {  
            if((*Iter)==1)  
            {  
                i13YSize[7]=true;  
            }  
            if((*Iter)==9)  
            {  
                i13YSize[8]=true;  
            }  
        }  
  
        //一九条  
        for(Iter = m_MyPAIVec[3].begin();Iter != m_MyPAIVec[3].end(); Iter++ )  
        {  
            if((*Iter)==1)  
            {  
                i13YSize[9]=true;  
            }  
            if((*Iter)==9)  
            {  
                i13YSize[10]=true;  
            }  
        }  
  
        //一九饼  
        for(Iter = m_MyPAIVec[4].begin();Iter != m_MyPAIVec[4].end(); Iter++ )  
        {  
            if((*Iter)==1)  
            {  
                i13YSize[11]=true;  
            }  
            if((*Iter)==9)  
            {  
                i13YSize[12]=true;  
            }  
        }  
        int icount = 0;  
        for(UINT i = 0 ; i < 13 ; i++ )  
        {  
            if(i13YSize[i]==true)  
            {  
                icount++;  
            }  
        }  
        if(icount == 13)return true;  
  
    }  
    return false;  
}  
//检测是否清幺九  
bool    CMJ::CheckQY9_HU()  
{     
    int iSize = 0;  
    int iCount = 0;  
    for(UINT i = 2 ; i < 5 ; i++ )  
    {  
        iSize = m_GangPAIVec[i].size();  
        iCount += iSize;  
        for(UINT j = 0 ; j < iSize ; j++ )  
        {  
            if(m_GangPAIVec[i][j]!=1||m_GangPAIVec[i][j]!=9)return false;  
        }  
    }  
  
    if(iCount == 12)  
    {  
        if(m_MyPAIVec[2].size()==2)  
        {  
            if(m_MyPAIVec[2][0]==1&&m_MyPAIVec[2][1]==1)return true;  
            if(m_MyPAIVec[2][0]==9&&m_MyPAIVec[2][1]==9)return true;  
        }  
  
        if(m_MyPAIVec[3].size()==3)  
        {  
            if(m_MyPAIVec[3][0]==1&&m_MyPAIVec[3][1]==1)return true;  
            if(m_MyPAIVec[3][0]==9&&m_MyPAIVec[3][1]==9)return true;  
        }  
  
        if(m_MyPAIVec[4].size()==4)  
        {  
            if(m_MyPAIVec[4][0]==1&&m_MyPAIVec[4][1]==1)return true;  
            if(m_MyPAIVec[4][0]==9&&m_MyPAIVec[4][1]==9)return true;  
        }  
    }  
  
    return false;  
  
}  
//检测是否胡小四喜  
bool    CMJ::CheckX4X_HU()  
{  
    //东西南北四杠  
    if(m_GangPAIVec[1].size()==12)  
    {  
        //将牌的位置  
        int iJiangPos = -1;  
        //将牌  
        for(int i = 0 ; i < 6 ; i++ )  
        {  
            if(m_MyPAIVec[i].size()==5)  
            {  
                  
                if(Check5Pai(m_MyPAIVec[i][0],m_MyPAIVec[i][1],m_MyPAIVec[i][2],m_MyPAIVec[i][3],m_MyPAIVec[i][4]))  
                {  
                    return true;  
                }  
            }  
            if(m_MyPAIVec[i].size()==2)  
            {  
                //如果是将  
                if(CheckAAPai(m_MyPAIVec[i][0],m_MyPAIVec[i][1]))  
                {  
                    iJiangPos = i;  
                    break;  
                }  
            }  
        }  
        //  
        if(iJiangPos>0)  
        {  
            for(int i = 0 ; i < 6 ; i++ )  
            {  
                if(i!=iJiangPos)  
                {  
                    if((m_MyPAIVec[i].size()==3))  
                    {  
                        if(Check3Pai(m_MyPAIVec[i][0],m_MyPAIVec[i][1],m_MyPAIVec[i][2]))return true;  
                    }  
                }  
            }  
        }  
    }  
    return false;  
}  
//检测是否胡小三元  
bool    CMJ::CheckX3Y_HU()  
{  
    //东西南北四杠  
    if(m_GangPAIVec[0].size()==8)  
    {     
        if(m_MyPAIVec[0].size()==5)  
        {  
            if(Check5Pai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2],m_MyPAIVec[0][3],m_MyPAIVec[0][4]))  
            {  
                return true;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else if(m_MyPAIVec[0].size()==2)  
        {  
            //如果是将  
            if(CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1])==false)  
            {  
                return false;  
            }  
        }  
        else  
        {  
            return false;  
        }  
        return CheckHU();  
  
    }  
    return false;  
}  
//检测是否胡字一色  
bool    CMJ::CheckZ1S_HU()  
{     
    //只准有字  
    if(m_MyPAIVec[2].size()>0)return false;  
    if(m_MyPAIVec[3].size()>0)return false;  
    if(m_MyPAIVec[4].size()>0)return false;  
    if(m_MyPAIVec[5].size()>0)return false;  
    if(m_ChiPAIVec[2].size()>0)return false;  
    if(m_ChiPAIVec[3].size()>0)return false;  
    if(m_ChiPAIVec[4].size()>0)return false;  
    if(m_ChiPAIVec[5].size()>0)return false;  
    if(m_PengPAIVec[2].size()>0)return false;  
    if(m_PengPAIVec[3].size()>0)return false;  
    if(m_PengPAIVec[4].size()>0)return false;  
    if(m_PengPAIVec[5].size()>0)return false;  
    if(m_GangPAIVec[2].size()>0)return false;  
    if(m_GangPAIVec[3].size()>0)return false;  
    if(m_GangPAIVec[4].size()>0)return false;  
    if(m_GangPAIVec[5].size()>0)return false;  
    int iSize = m_MyPAIVec[0].size();  
    if(iSize > 0)  
    {  
        if(iSize == 2)  
        {  
            if(m_MyPAIVec[0][0]==m_MyPAIVec[0][1])  
            {  
                iSize = m_MyPAIVec[1].size();  
                if(iSize == 0)return true;  
                if(iSize == 3)  
                {  
                    if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2]))return true;  
                }  
            }  
        }  
  
    }  
    return false;  
}  
//检测是否四暗刻  
bool    CMJ::Check4AK_HU()  
{  
    if(m_4AK)  
    {  
        //将牌  
        for(int i = 0 ; i < 6 ; i++ )  
        {  
            if(m_MyPAIVec[i].size()==2)  
            {  
                //如果是将  
                if(m_MyPAIVec[i][0] == m_MyPAIVec[i][1])  
                {  
                    return true;  
                }  
            }  
        }  
    }  
    return false;  
}     
//检测是否一色双龙会  
bool    CMJ::Check1S2LH_HU()  
{  
    //万,条,饼  
    for(UINT i = 0 ; i <= 4; i++ )  
    {  
        int iType = i;  
        if(m_MyPAIVec[iType].size()==14)  
        {  
  
            if(m_MyPAIVec[iType][0]==1&&m_MyPAIVec[iType][1]==1)  
            {  
  
            }  
            else  
            {  
                return false;  
            }  
            if(m_MyPAIVec[iType][2]==2&&m_MyPAIVec[iType][3]==2)  
            {  
  
            }  
            else  
            {  
                return false;  
            }  
            if(m_MyPAIVec[iType][4]==3&&m_MyPAIVec[iType][5]==3)  
            {  
  
            }  
            else  
            {  
                return false;  
            }  
            if(m_MyPAIVec[iType][6]==5&&m_MyPAIVec[iType][7]==5)  
            {  
  
            }  
            else  
            {  
                return false;  
            }  
            if(m_MyPAIVec[iType][8]==7&&m_MyPAIVec[iType][9]==7)  
            {  
  
            }  
            else  
            {  
                return false;  
            }  
            if(m_MyPAIVec[iType][10]==8&&m_MyPAIVec[iType][11]==8)  
            {  
  
            }  
            else  
            {  
                return false;  
            }  
            if(m_MyPAIVec[iType][12]==9&&m_MyPAIVec[iType][13]==9)  
            {  
  
            }  
            else  
            {  
                return false;  
            }  
  
            return true;  
        }  
    }  
    return false;  
}  
  
//检测是否一色四同顺  
bool    CMJ::Check1S4TS_HU()  
{  
    //万,条,饼  
    for(UINT i = 0 ; i <= 4; i++ )  
    {  
        int iType = i;  
        //吃过的顺  
        int iSize1  =  m_ChiPAIVec[iType].size();  
        //剩余牌墙中的顺  
        int iSize2  =  m_MyPAIVec[iType].size();  
        //万  
        if(iSize1 + iSize2 >= 12)  
        {  
            //无吃的顺  
            if(iSize1==0)  
            {  
                if(iSize2==12)  
                {  
                    //三连暗杠成顺  
                    if(CheckAAAABBBBCCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11]))return CheckHU();  
                    return false;  
                }  
                if(iSize2==14)  
                {  
                    //三连暗杠成顺  
                    if((m_MyPAIVec[iType][12]==(m_MyPAIVec[iType][13]))&&CheckAAAABBBBCCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11]))return true;  
                    //三连暗杠成顺  
                    if((m_MyPAIVec[iType][0]==(m_MyPAIVec[iType][1]))&&CheckAAAABBBBCCCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11],m_MyPAIVec[iType][12],m_MyPAIVec[iType][13]))return true;  
                    return false;  
                }  
            }  
            //吃到一个顺  
            if(iSize1==3)  
            {  
                if(iSize2==9)  
                {  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])  
                        {  
                            return CheckHU();  
                        }  
                    }  
                    return false;  
                }  
                if(iSize2==11)  
                {  
  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8]))  
                    {  
                        if(m_MyPAIVec[iType][9]==m_MyPAIVec[iType][10]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])  
                        {  
                            return true;  
                        }  
                    }  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))  
                    {  
                        if(m_MyPAIVec[iType][0]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][8])  
                        {  
                            return true;  
                        }  
                    }  
  
                    return false;  
                }  
            }  
            //吃到二个顺  
            if(iSize1==6)  
            {  
                if(iSize2==6)  
                {  
                    //三连对  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][4])  
                            {  
                                return CheckHU();  
                            }  
                        }  
                    }  
                    return false;  
                }  
                if(iSize2==8)  
                {  
                    //三连对  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5]))  
                    {  
                        if(m_MyPAIVec[iType][6]==m_MyPAIVec[iType][7]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][4])  
                            {  
                                return true;  
                            }  
  
                        }  
                    }  
  
                    //三连对  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7]))  
                    {  
                        if(m_MyPAIVec[iType][0]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][6])  
                            {  
                                return true;  
                            }  
                        }  
                    }  
  
                    return false;  
                }  
            }  
            //吃到三个顺  
            if(iSize1==9)  
            {  
                if(iSize2==3)  
                {  
                    //顺子  
                    if(CheckABCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][2])  
                            {  
                                if(m_ChiPAIVec[iType][6]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][7]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][8]==m_MyPAIVec[iType][2])  
                                {                 
                                    return CheckHU();  
                                }  
                            }  
                        }  
                    }  
                    return false;  
                }  
                if(iSize2==5)  
                {  
                    //顺子  
                    if(CheckABCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))  
                    {  
                        if(m_MyPAIVec[iType][3]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][2])  
                            {  
                                if(m_ChiPAIVec[iType][6]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][7]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][8]==m_MyPAIVec[iType][2])  
                                {     
                                    return true;  
                                }  
                            }  
                        }  
                    }  
  
                    //顺子  
                    if(CheckABCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4]))  
                    {  
                        if(m_MyPAIVec[iType][0]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][4])  
                            {  
                                if(m_ChiPAIVec[iType][6]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][7]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][8]==m_MyPAIVec[iType][4])  
                                {     
                                    return true;  
                                }  
  
                            }  
                        }  
                    }  
                    return false;  
                }  
            }  
  
            //吃到三连顺  
            if(iSize1==12)  
            {  
                if((m_ChiPAIVec[iType][0]==m_ChiPAIVec[iType][3])&&(m_ChiPAIVec[iType][3]==m_ChiPAIVec[iType][6])&&(m_ChiPAIVec[iType][6]==m_ChiPAIVec[iType][9]))  
                {  
                    return CheckHU();  
                }  
                return false;  
            }  
        }  
  
    }  
    return false;  
}  
  
//检测是否一色四节高  
bool    CMJ::Check1S4JG_HU()  
{  
    //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++)  
    {  
        int iType = i;  
        if(m_GangPAIVec[iType].size()==16)  
        {  
            if((m_GangPAIVec[iType][0]==m_GangPAIVec[iType][4]-1)&&(m_GangPAIVec[iType][4]==m_GangPAIVec[iType][8]-1)&&(m_GangPAIVec[iType][8]==m_GangPAIVec[iType][12]-1))  
            {  
                return CheckHU();  
            }  
        }  
    }  
    return false;  
}  
//检测是否一色四步高  
bool    CMJ::Check1S4BG_HU()  
{  
    /*//万 
    if(m_GangPAIVec[2].size()==16) 
    { 
        if((m_GangPAIVec[2][0]==m_GangPAIVec[2][4]-1)&&(m_GangPAIVec[2][4]==m_GangPAIVec[2][8]-1)&&(m_GangPAIVec[2][8]==m_GangPAIVec[2][12]-1)) 
        { 
            return CheckHU(); 
        } 
    }*/  
    return false;  
}  
//检测是否三杠  
bool    CMJ::Check3Gang_HU()  
{  
    int iSize = 0;  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        iSize = m_GangPAIVec[i].size();  
    }  
  
    if(iSize == 12)  
    {  
        //将牌  
        return CheckHU();  
          
    }  
    return false;  
}  
//检测是否混幺九  
bool    CMJ::CheckHY9_HU()  
{  
    return false;  
}  
//检测是否七对  
bool    CMJ::Check7D_HU()  
{  
    int iDoubleNum = 0 ;  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        UINT iSize = m_MyPAIVec[i].size();  
        if(iSize%2 ==1||iSize==0)return false;//如果是奇数肯定不是对  
        for(UINT j = 0 ; j < iSize-1 ; j++)  
        {  
            if(m_MyPAIVec[i][j]==m_MyPAIVec[i][j+1])  
            {  
                iDoubleNum++;  
                j++;  
            }  
        }  
    }  
    if(iDoubleNum==7)return true;  
    return false;  
}  
//检测是否七星不靠  
bool    CMJ::Check7XBK_HU()  
{  
    bool        bIs7XBK[14] ;  
    for(UINT i = 0 ; i < 14 ; i++ )  
    {  
        bIs7XBK[i]=false;  
    }  
    //中发白  
    vector<int>::iterator Iter;  
    if(m_MyPAIVec[0].size()!=3)return false;  
    for(Iter = m_MyPAIVec[0].begin();Iter != m_MyPAIVec[0].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            bIs7XBK[7]=true;  
        }  
        if((*Iter)==2)  
        {  
            bIs7XBK[8]=true;  
        }  
        if((*Iter)==3)  
        {  
            bIs7XBK[9]=true;  
        }  
    }  
    //东南西北风  
    if(m_MyPAIVec[1].size()!=4)return false;  
    for(Iter = m_MyPAIVec[1].begin();Iter != m_MyPAIVec[1].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            bIs7XBK[10]=true;  
        }  
        if((*Iter)==2)  
        {  
            bIs7XBK[11]=true;  
        }  
        if((*Iter)==3)  
        {  
            bIs7XBK[12]=true;  
        }  
        if((*Iter)==4)  
        {  
            bIs7XBK[13]=true;  
        }  
    }  
    //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++)  
    {  
        if(m_MyPAIVec[i].size()==3)  
        {  
            if(m_MyPAIVec[i][0]==1&&m_MyPAIVec[i][1]==4&&m_MyPAIVec[i][2]==7)  
            {  
                bIs7XBK[0]=true;  
                bIs7XBK[3]=true;  
                bIs7XBK[6]=true;  
            }  
        }  
        else if(m_MyPAIVec[2].size()==2)  
        {  
            if(m_MyPAIVec[i][0]==2&&m_MyPAIVec[i][1]==5)  
            {  
                bIs7XBK[1]=true;  
                bIs7XBK[4]=true;  
            }  
            else if(m_MyPAIVec[i][0]==3&&m_MyPAIVec[i][1]==6)  
            {  
                bIs7XBK[2]=true;  
                bIs7XBK[5]=true;  
            }  
        }  
        else  
        {  
            return false;  
        }  
    }  
    bool t_Result = true;  
    for(UINT i = 0 ; i < 14 ; i++ )  
    {  
        if(bIs7XBK[i]==false)t_Result=false;  
    }  
    if(t_Result)return true;  
  
    for(UINT i = 2 ; i <= 4 ; i++)  
    {  
        if(m_MyPAIVec[i].size()==3)  
        {  
            if(m_MyPAIVec[i][0]==2&&m_MyPAIVec[i][1]==5&&m_MyPAIVec[i][2]==8)  
            {  
                bIs7XBK[0]=true;  
                bIs7XBK[3]=true;  
                bIs7XBK[6]=true;  
            }  
        }  
        else if(m_MyPAIVec[2].size()==2)  
        {  
            if(m_MyPAIVec[i][0]==3&&m_MyPAIVec[i][1]==6)  
            {  
                bIs7XBK[1]=true;  
                bIs7XBK[4]=true;  
            }  
            else if(m_MyPAIVec[i][0]==4&&m_MyPAIVec[i][1]==7)  
            {  
                bIs7XBK[2]=true;  
                bIs7XBK[5]=true;  
            }  
        }  
        else  
        {  
            return false;  
        }  
    }  
    t_Result = true;  
    for(UINT i = 0 ; i < 14 ; i++ )  
    {  
        if(bIs7XBK[i]==false)t_Result=false;  
    }  
    if(t_Result)return true;  
  
    for(UINT i = 2 ; i <= 4 ; i++)  
    {  
        if(m_MyPAIVec[i].size()==3)  
        {  
            if(m_MyPAIVec[i][0]==3&&m_MyPAIVec[i][1]==6&&m_MyPAIVec[i][2]==9)  
            {  
                bIs7XBK[0]=true;  
                bIs7XBK[3]=true;  
                bIs7XBK[6]=true;  
            }  
        }  
        else if(m_MyPAIVec[2].size()==2)  
        {  
            if(m_MyPAIVec[i][0]==4&&m_MyPAIVec[i][1]==7)  
            {  
                bIs7XBK[1]=true;  
                bIs7XBK[4]=true;  
            }  
            else if(m_MyPAIVec[i][0]==5&&m_MyPAIVec[i][1]==8)  
            {  
                bIs7XBK[2]=true;  
                bIs7XBK[5]=true;  
            }  
        }  
        else  
        {  
            return false;  
        }  
    }  
  
    t_Result = true;  
    for(UINT i = 0 ; i < 14 ; i++ )  
    {  
        if(bIs7XBK[i]==false)t_Result=false;  
    }  
    if(t_Result)return true;  
  
    return false;  
}  
//检测是否全双刻  
bool    CMJ::CheckQSK_HU()  
{  
    //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++)  
    {  
        int iType = i;  
        if(m_GangPAIVec[iType].size()==16)  
        {  
            if(m_GangPAIVec[iType][0]==2&&m_GangPAIVec[iType][4]==4&&m_GangPAIVec[iType][8]==6&&m_GangPAIVec[iType][12]==8)  
            {  
                return CheckHU();  
            }  
        }  
    }  
    return false;  
}  
//清一色  
bool    CMJ::CheckQ1S_HU()  
{  
  
    if(m_MyPAIVec[0].empty()==false)return false;  
    if(m_MyPAIVec[1].empty()==false)return false;  
    if(m_ChiPAIVec[0].empty()==false)return false;  
    if(m_ChiPAIVec[1].empty()==false)return false;  
    if(m_PengPAIVec[0].empty()==false)return false;  
    if(m_PengPAIVec[1].empty()==false)return false;  
    if(m_GangPAIVec[0].empty()==false)return false;  
    if(m_GangPAIVec[1].empty()==false)return false;  
    //清万  
    if(m_MyPAIVec[2].empty()==false)  
    {  
        if(m_MyPAIVec[3].empty()==false)return false;  
        if(m_MyPAIVec[4].empty()==false)return false;  
        if(m_ChiPAIVec[3].empty()==false)return false;  
        if(m_ChiPAIVec[4].empty()==false)return false;  
        if(m_PengPAIVec[3].empty()==false)return false;  
        if(m_PengPAIVec[4].empty()==false)return false;  
        if(m_GangPAIVec[3].empty()==false)return false;  
        if(m_GangPAIVec[4].empty()==false)return false;  
        return CheckHU();  
    }  
    //清条  
    if(m_MyPAIVec[3].empty()==false)  
    {  
        if(m_MyPAIVec[2].empty()==false)return false;  
        if(m_MyPAIVec[4].empty()==false)return false;  
        if(m_ChiPAIVec[2].empty()==false)return false;  
        if(m_ChiPAIVec[4].empty()==false)return false;  
        if(m_PengPAIVec[2].empty()==false)return false;  
        if(m_PengPAIVec[4].empty()==false)return false;  
        if(m_GangPAIVec[2].empty()==false)return false;  
        if(m_GangPAIVec[4].empty()==false)return false;  
        return CheckHU();  
    }  
    //清饼  
    if(m_MyPAIVec[4].empty()==false)  
    {  
        if(m_MyPAIVec[2].empty()==false)return false;  
        if(m_MyPAIVec[3].empty()==false)return false;  
        if(m_ChiPAIVec[2].empty()==false)return false;  
        if(m_ChiPAIVec[3].empty()==false)return false;  
        if(m_PengPAIVec[2].empty()==false)return false;  
        if(m_PengPAIVec[3].empty()==false)return false;  
        if(m_GangPAIVec[2].empty()==false)return false;  
        if(m_GangPAIVec[3].empty()==false)return false;  
        return CheckHU();  
    }  
    return false;  
}  
//检测是否一色三同顺  
bool    CMJ::Check1S3TS_HU()  
{  
    //万条饼  
    for(UINT i = 2 ; i <= 4 ; i++ )  
    {  
        int iType = i;  
        //吃过的顺  
        int iSize1  =  m_ChiPAIVec[iType].size();  
        //剩余牌墙中的顺  
        int iSize2  =  m_MyPAIVec[iType].size();  
        if(iSize1 + iSize2 >= 9)  
        {  
            //无吃的顺  
            if(iSize1==0)  
            {  
                if(iSize2==9)  
                {  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8]))  
                    {  
                        return CheckHU();  
                    }  
                    return false;  
                }  
                if(iSize2==11)  
                {  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&CheckAAPai(m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))  
                    {  
                        return true;  
                    }  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10])&&CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1]))  
                    {  
                        return true;  
                    }  
                    return false;  
                }  
                if(iSize2==12)  
                {  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&Check3Pai(m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11]))  
                    {  
                        return CheckHU();  
                    }  
                    //三连高压  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11])&&Check3Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))  
                    {  
                        return CheckHU();  
                    }     
                    return false;  
                }  
                if(iSize2==14)  
                {  
                    //三连顺(前)  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&Check5Pai(m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11],m_MyPAIVec[iType][12],m_MyPAIVec[iType][13]))  
                    {  
                        return true;  
                    }  
                    //三连顺(中)  
                    if(CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1])&&CheckAAABBBCCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10])&&Check3Pai(m_MyPAIVec[iType][11],m_MyPAIVec[iType][12],m_MyPAIVec[iType][13]))  
                    {  
                        return true;  
                    }     
                    //三连顺(中)  
                    if(Check3Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2])&&CheckAAABBBCCCPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11])&&CheckAAPai(m_MyPAIVec[iType][12],m_MyPAIVec[iType][13]))  
                    {  
                        return true;  
                    }     
                    //三连顺(后)  
                    if(CheckAAABBBCCCPai(m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11],m_MyPAIVec[iType][12],m_MyPAIVec[iType][13])&&Check5Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4]))  
                    {  
                        return true;  
                    }  
                    return false;  
                }  
            }  
            //吃到一个顺  
            if(iSize1==3)  
            {  
                if(iSize2==6)  
                {  
                    //三连对  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])  
                        {  
                            return CheckHU();  
                        }  
                    }  
                }  
                if(iSize2==8)  
                {  
                    //三连对(前)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5])&&CheckAAPai(m_MyPAIVec[iType][6],m_MyPAIVec[iType][7]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            return true;  
                        }  
                    }  
                    //三连对(后)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7])&&CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])  
                        {  
                            return true;  
                        }  
                    }  
                }  
                if(iSize2==9)  
                {  
                    //三连对(前)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5])&&Check3Pai(m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            return CheckHU();  
                        }  
                    }  
                    //三连对(后)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&Check3Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][7])  
                        {  
                            return CheckHU();  
                        }  
                    }  
                }  
                if(iSize2==11)  
                {  
                    //三连对(前)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5])&&Check5Pai(m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            return true;  
                        }  
                    }  
                    //三连对(中)  
                    if(CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1])&&CheckAABBCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7])&&Check3Pai(m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])  
                        {  
                            return true;  
                        }  
                    }  
                    //三连对(中)  
                    if(Check3Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2])&&CheckAABBCCPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&CheckAAPai(m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][7])  
                        {  
                            return true;  
                        }  
                    }  
                    //三连对(前)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10])&&Check5Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][7]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][9])  
                        {  
                            return true;  
                        }  
                    }  
                }  
            }  
            //吃到二个顺  
            if(iSize1==6)  
            {  
                if(iSize2==3)  
                {  
                    //顺子  
                    if(CheckABCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][2])  
                            {  
                                return CheckHU();  
                            }  
                        }  
                    }  
                }  
                if(iSize2==5)  
                {  
                    //顺子(前)  
                    if(CheckABCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2])&&CheckAAPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][2])  
                            {  
                                return true;  
                            }  
                        }  
                    }  
                    //顺子(后)  
                    if(CheckABCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4])&&CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][4])  
                            {  
                                return true;  
                            }  
                        }  
                    }  
                }  
                if(iSize2==6)  
                {  
                    //三连对  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][5])  
                            {  
                                return CheckHU();  
                            }  
                        }  
                    }  
                }  
                if(iSize2==8)  
                {  
                    //三连对(前)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5])&&CheckAAPai(m_MyPAIVec[iType][6],m_MyPAIVec[iType][7]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][5])  
                            {  
                                return true;  
                            }  
                        }  
                    }  
                    //三连对(后)  
                    if(CheckAABBCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7])&&CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1]))  
                    {  
                        if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])  
                        {  
                            if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][7])  
                            {  
                                return true;  
                            }  
                        }  
                    }  
                }  
            }  
            //吃到三个顺  
            if(iSize1==9)  
            {  
                if((m_ChiPAIVec[2][0]==m_ChiPAIVec[iType][3])&&(m_ChiPAIVec[iType][3]==m_ChiPAIVec[iType][6]))  
                {  
                    return CheckHU();  
                }  
            }  
        }  
    }  
    return false;  
}  
//检测是否一色三节高  
bool    CMJ::Check1S3JG_HU()  
{  
    //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++)  
    {  
        int iType = i;  
        if(m_GangPAIVec[iType].size()==12)  
        {  
            if((m_GangPAIVec[iType][0]==m_GangPAIVec[iType][4]-1)&&(m_GangPAIVec[iType][4]==m_GangPAIVec[iType][8]-1))  
            {  
                return CheckHU();  
            }  
        }  
    }  
    return false;  
}  
//检测是否全大  
bool    CMJ::CheckQD_HU()  
{  
    //剑牌,风牌  
    if(m_MyPAIVec[0].empty()==false)return false;  
    if(m_MyPAIVec[1].empty()==false)return false;  
    if(m_ChiPAIVec[0].empty()==false)return false;  
    if(m_ChiPAIVec[1].empty()==false)return false;  
    if(m_PengPAIVec[0].empty()==false)return false;  
    if(m_PengPAIVec[1].empty()==false)return false;  
    if(m_GangPAIVec[0].empty()==false)return false;  
    if(m_GangPAIVec[1].empty()==false)return false;  
      
    //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++ )  
    {  
        if(m_MyPAIVec[i].empty()==false)  
        {  
            //剩余牌墙  
            int iSize = m_MyPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_MyPAIVec[i][j]<7)return false;  
            }  
            //吃  
            iSize = m_ChiPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_ChiPAIVec[i][j]<7)return false;  
            }  
            //碰  
            iSize = m_PengPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_PengPAIVec[i][j]<7)return false;  
            }  
            //杠  
            iSize = m_GangPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_GangPAIVec[i][j]<7)return false;  
            }  
        }  
    }  
    return CheckHU();  
}  
  
//检测是否全中  
bool    CMJ::CheckQZ_HU()  
{  
//剑牌,风牌  
    if(m_MyPAIVec[0].empty()==false)return false;  
    if(m_MyPAIVec[1].empty()==false)return false;  
    if(m_ChiPAIVec[0].empty()==false)return false;  
    if(m_ChiPAIVec[1].empty()==false)return false;  
    if(m_PengPAIVec[0].empty()==false)return false;  
    if(m_PengPAIVec[1].empty()==false)return false;  
    if(m_GangPAIVec[0].empty()==false)return false;  
    if(m_GangPAIVec[1].empty()==false)return false;  
      
    //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++ )  
    {  
        if(m_MyPAIVec[i].empty()==false)  
        {  
            //剩余牌墙  
            int iSize = m_MyPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_MyPAIVec[i][j]<4)return false;  
                if(m_MyPAIVec[i][j]>6)return false;  
            }  
            //吃  
            iSize = m_ChiPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_ChiPAIVec[i][j]<4)return false;  
                if(m_ChiPAIVec[i][j]>6)return false;  
            }  
            //碰  
            iSize = m_PengPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_PengPAIVec[i][j]<4)return false;  
                if(m_PengPAIVec[i][j]>6)return false;  
            }  
            //杠  
            iSize = m_GangPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_GangPAIVec[i][j]<4)return false;  
                if(m_GangPAIVec[i][j]>6)return false;  
            }  
        }  
    }  
    return CheckHU();  
}  
  
//检测是否全小  
bool    CMJ::CheckQX_HU()  
{  
    //剑牌,风牌  
    if(m_MyPAIVec[0].empty()==false)return false;  
    if(m_MyPAIVec[1].empty()==false)return false;  
    if(m_ChiPAIVec[0].empty()==false)return false;  
    if(m_ChiPAIVec[1].empty()==false)return false;  
    if(m_PengPAIVec[0].empty()==false)return false;  
    if(m_PengPAIVec[1].empty()==false)return false;  
    if(m_GangPAIVec[0].empty()==false)return false;  
    if(m_GangPAIVec[1].empty()==false)return false;  
      
    //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++ )  
    {  
        if(m_MyPAIVec[i].empty()==false)  
        {  
            //剩余牌墙  
            int iSize = m_MyPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_MyPAIVec[i][j]>3)return false;  
            }  
            //吃  
            iSize = m_ChiPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_ChiPAIVec[i][j]>3)return false;  
            }  
            //碰  
            iSize = m_PengPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_PengPAIVec[i][j]>3)return false;  
            }  
            //杠  
            iSize = m_GangPAIVec[i].size();  
            for( UINT j = 0 ; j < iSize ; j++ )  
            {  
                if(m_GangPAIVec[i][j]>3)return false;  
            }  
        }  
    }  
    return CheckHU();  
}  
//检测是否青龙  
bool    CMJ::CheckQL_HU()  
{  
    //花色  
    int iColorNum = 0;  
    //万,条,饼  
    for(UINT i = 2 ; i <= 4 ; i++ )  
    {  
        if(m_MyPAIVec[i].empty()==false)  
        {  
            iColorNum++;  
  
            if(m_MyPAIVec[i].size()==9)  
            {  
                for(UINT j = 0 ;j < 9 ;j++)  
                {  
                    if(m_MyPAIVec[i][j] != j)return false;  
                }  
            }  
        }  
    }  
    if(iColorNum==1)return CheckHU();  
    return false;  
}  
//检测是否三色双龙会  
bool    CMJ::Check3S2LH_HU()  
{  
    //五万为双龙  
    if(m_MyPAIVec[2].size()==2)  
    {  
        //双龙  
        if(m_MyPAIVec[2][0]==5&&m_MyPAIVec[2][1]==5)  
        {  
            //老少副  
            if(m_MyPAIVec[3].size()==6&&m_MyPAIVec[4].size()==6)  
            {  
                if(m_MyPAIVec[3][0]==1&&m_MyPAIVec[3][1]==2&&m_MyPAIVec[3][2]==3&&m_MyPAIVec[3][3]==7&&m_MyPAIVec[3][4]==8&&m_MyPAIVec[3][5]==9)  
                {  
                    if(m_MyPAIVec[4][0]==1&&m_MyPAIVec[4][1]==2&&m_MyPAIVec[4][2]==3&&m_MyPAIVec[4][3]==7&&m_MyPAIVec[4][4]==8&&m_MyPAIVec[4][5]==9)  
                    {  
                        return true;  
                    }  
                }  
            }  
        }  
    }  
  
    //五条为双龙  
    if(m_MyPAIVec[3].size()==2)  
    {  
        //双龙  
        if(m_MyPAIVec[3][0]==5&&m_MyPAIVec[3][1]==5)  
        {  
            //老少副  
            if(m_MyPAIVec[2].size()==6&&m_MyPAIVec[4].size()==6)  
            {  
                if(m_MyPAIVec[2][0]==1&&m_MyPAIVec[2][1]==2&&m_MyPAIVec[2][2]==3&&m_MyPAIVec[2][3]==7&&m_MyPAIVec[2][4]==8&&m_MyPAIVec[2][5]==9)  
                {  
                    if(m_MyPAIVec[4][0]==1&&m_MyPAIVec[4][1]==2&&m_MyPAIVec[4][2]==3&&m_MyPAIVec[4][3]==7&&m_MyPAIVec[4][4]==8&&m_MyPAIVec[4][5]==9)  
                    {  
                        return true;  
                    }  
                }  
            }  
        }  
    }  
  
    //五饼为双龙  
    if(m_MyPAIVec[4].size()==2)  
    {  
        //双龙  
        if(m_MyPAIVec[4][0]==5&&m_MyPAIVec[4][1]==5)  
        {  
            //老少副  
            if(m_MyPAIVec[2].size()==6&&m_MyPAIVec[3].size()==6)  
            {  
                if(m_MyPAIVec[2][0]==1&&m_MyPAIVec[2][1]==2&&m_MyPAIVec[2][2]==3&&m_MyPAIVec[2][3]==7&&m_MyPAIVec[2][4]==8&&m_MyPAIVec[2][5]==9)  
                {  
                    if(m_MyPAIVec[3][0]==1&&m_MyPAIVec[3][1]==2&&m_MyPAIVec[3][2]==3&&m_MyPAIVec[3][3]==7&&m_MyPAIVec[3][4]==8&&m_MyPAIVec[3][5]==9)  
                    {  
                        return true;  
                    }  
                }  
            }  
        }  
    }  
    return false;  
}  
  
//检测是否一色三步高  
bool    CMJ::Check1S3BG_HU()  
{  
    return false;  
}  
//全带五  
bool    CMJ::CheckQD5_HU()  
{  
    //剑牌,风牌  
    if(m_MyPAIVec[0].empty()==false)return false;  
    if(m_MyPAIVec[1].empty()==false)return false;  
    if(m_ChiPAIVec[0].empty()==false)return false;  
    if(m_ChiPAIVec[1].empty()==false)return false;  
    if(m_PengPAIVec[0].empty()==false)return false;  
    if(m_PengPAIVec[1].empty()==false)return false;  
    if(m_GangPAIVec[0].empty()==false)return false;  
    if(m_GangPAIVec[1].empty()==false)return false;  
    return false;  
}  
//三同刻  
bool    CMJ::Check3TK_HU()  
{  
    /*if(m_GangPAIVec[2].size()==4) 
    { 
        //万,条,饼 
        for(UINT i = 3 ; i <= 4 ; i++ ) 
        { 
            if(m_GangPAIVec[i].size()==4) 
            { 
                if(m_GangPAIVec[2][0]!=m_GangPAIVec[i][0]) 
                { 
                    return false; 
                } 
            } 
        }        
    }*/  
    return false;  
  
}  
//三暗刻  
bool    CMJ::Check3AK_HU()  
{  
    return false;  
}  
//单钓将  
bool    CMJ::CheckDDJ_HU()  
{  
    int count = 0;  
    for(UINT i = 0 ; i < 6 ; i++ )  
    {  
        count += m_MyPAIVec[i].size();  
    }  
    if(count==2)  
    {  
        if(m_MyPAIVec[m_LastPAI.m_Type].size()==2)  
        {  
            if(m_MyPAIVec[m_LastPAI.m_Type][0]==m_MyPAIVec[m_LastPAI.m_Type][1])return true;  
        }  
    }  
    return false;  
}  
//检测是否听十三幺  
bool    CMJ::Check13Y_TING()  
{  
    bool        i13YSize[13] ;  
    for(UINT i = 0 ; i < 13 ; i++ )  
    {  
        i13YSize[i]=false;  
    }  
    //中发白  
    vector<int>::iterator Iter;  
    for(Iter = m_MyPAIVec[0].begin();Iter != m_MyPAIVec[0].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            i13YSize[0]=true;  
        }  
        if((*Iter)==2)  
        {  
            i13YSize[1]=true;  
        }  
        if((*Iter)==3)  
        {  
            i13YSize[2]=true;  
        }  
    }  
    //东南西北风  
    for(Iter = m_MyPAIVec[1].begin();Iter != m_MyPAIVec[1].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            i13YSize[3]=true;  
        }  
        if((*Iter)==2)  
        {  
            i13YSize[4]=true;  
        }  
        if((*Iter)==3)  
        {  
            i13YSize[5]=true;  
        }  
        if((*Iter)==4)  
        {  
            i13YSize[6]=true;  
        }  
    }  
    //一九万  
    for(Iter = m_MyPAIVec[2].begin();Iter != m_MyPAIVec[2].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            i13YSize[7]=true;  
        }  
        if((*Iter)==9)  
        {  
            i13YSize[8]=true;  
        }  
    }  
  
    //一九条  
    for(Iter = m_MyPAIVec[3].begin();Iter != m_MyPAIVec[3].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            i13YSize[9]=true;  
        }  
        if((*Iter)==9)  
        {  
            i13YSize[10]=true;  
        }  
    }  
      
    //一九饼  
    for(Iter = m_MyPAIVec[4].begin();Iter != m_MyPAIVec[4].end(); Iter++ )  
    {  
        if((*Iter)==1)  
        {  
            i13YSize[11]=true;  
        }  
        if((*Iter)==9)  
        {  
            i13YSize[12]=true;  
        }  
    }  
    int icount = 0;  
    for(UINT i = 0 ; i < 13 ; i++ )  
    {  
        if(i13YSize[i]==true)  
        {  
            icount++;  
        }  
    }  
    if(icount >=12)return true;  
    return  false;  
}  
//检测是否听四暗刻  
bool    CMJ::Check4AK_TING()  
{  
    if(m_AKNum==4)return true;  
    return false;  
}  
//检测胡  
bool    CMJ::CheckHU()  
{  
    bool t_Ok = false;  
    int iJiangNum = 0;  
  
    int iSize = m_MyPAIVec[0].size();  
    if(iSize>0)  
    {  
        //中发白  
        if(iSize==2)  
        {  
            if(!CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==3)  
        {  
            if(!CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==5)  
        {  
            if(CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1])&&CheckAAAPai(m_MyPAIVec[0][2],m_MyPAIVec[0][3],m_MyPAIVec[0][4]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4]))  
            {  
                iJiangNum++ ;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else if(iSize==8)  
        {  
            if(CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1])&&CheckAAAPai(m_MyPAIVec[0][2],m_MyPAIVec[0][3],m_MyPAIVec[0][4])&&CheckAAAPai(m_MyPAIVec[0][5],m_MyPAIVec[0][6],m_MyPAIVec[0][7]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4])&&CheckAAAPai(m_MyPAIVec[0][5],m_MyPAIVec[0][6],m_MyPAIVec[0][7]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4],m_MyPAIVec[0][5])&&CheckAAPai(m_MyPAIVec[0][6],m_MyPAIVec[0][7]))  
            {  
                iJiangNum++ ;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else if(iSize==11)  
        {  
            if(CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1])&&CheckAAAPai(m_MyPAIVec[0][2],m_MyPAIVec[0][3],m_MyPAIVec[0][4])&&CheckAAAPai(m_MyPAIVec[0][5],m_MyPAIVec[0][6],m_MyPAIVec[0][7])&&CheckAAAPai(m_MyPAIVec[0][8],m_MyPAIVec[0][9],m_MyPAIVec[0][10]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4])&&CheckAAAPai(m_MyPAIVec[0][5],m_MyPAIVec[0][6],m_MyPAIVec[0][7])&&CheckAAAPai(m_MyPAIVec[0][8],m_MyPAIVec[0][9],m_MyPAIVec[0][10]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4],m_MyPAIVec[0][5])&&CheckAAPai(m_MyPAIVec[0][6],m_MyPAIVec[0][7])&&CheckAAAPai(m_MyPAIVec[0][8],m_MyPAIVec[0][9],m_MyPAIVec[0][10]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4],m_MyPAIVec[0][5])&&CheckAAAPai(m_MyPAIVec[0][6],m_MyPAIVec[0][7],m_MyPAIVec[0][8])&&CheckAAPai(m_MyPAIVec[0][9],m_MyPAIVec[0][10]))  
            {  
                iJiangNum++ ;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else  
        {  
            return false;  
        }  
  
    }  
    //东南西北  
    iSize = m_MyPAIVec[1].size();  
    if(iSize>0)  
    {  
        if(iSize==2)  
        {  
            if(!CheckAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==3)  
        {  
            if(!CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2]))  
            {  
                return false;  
            }     
        }  
        else if(iSize==5)  
        {  
            if(CheckAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1])&&CheckAAAPai(m_MyPAIVec[1][2],m_MyPAIVec[1][3],m_MyPAIVec[1][4]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4]))  
            {  
                iJiangNum++ ;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else if(iSize==8)  
        {  
            if(CheckAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1])&&CheckAAAPai(m_MyPAIVec[1][2],m_MyPAIVec[1][3],m_MyPAIVec[1][4])&&CheckAAAPai(m_MyPAIVec[1][5],m_MyPAIVec[1][6],m_MyPAIVec[1][7]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4])&&CheckAAAPai(m_MyPAIVec[1][5],m_MyPAIVec[1][6],m_MyPAIVec[1][7]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4],m_MyPAIVec[1][5])&&CheckAAPai(m_MyPAIVec[1][6],m_MyPAIVec[1][7]))  
            {  
                iJiangNum++ ;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else if(iSize==11)  
        {  
            if(CheckAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1])&&CheckAAAPai(m_MyPAIVec[1][2],m_MyPAIVec[1][3],m_MyPAIVec[1][4])&&CheckAAAPai(m_MyPAIVec[1][5],m_MyPAIVec[1][6],m_MyPAIVec[1][7])&&CheckAAAPai(m_MyPAIVec[1][8],m_MyPAIVec[1][9],m_MyPAIVec[1][10]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4])&&CheckAAAPai(m_MyPAIVec[1][5],m_MyPAIVec[1][6],m_MyPAIVec[1][7])&&CheckAAAPai(m_MyPAIVec[1][8],m_MyPAIVec[1][9],m_MyPAIVec[1][10]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4],m_MyPAIVec[1][5])&&CheckAAPai(m_MyPAIVec[1][6],m_MyPAIVec[1][7])&&CheckAAAPai(m_MyPAIVec[1][8],m_MyPAIVec[1][9],m_MyPAIVec[1][10]))  
            {  
                iJiangNum++ ;  
            }  
            else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4],m_MyPAIVec[1][5])&&CheckAAAPai(m_MyPAIVec[1][6],m_MyPAIVec[1][7],m_MyPAIVec[1][8])&&CheckAAPai(m_MyPAIVec[1][9],m_MyPAIVec[1][10]))  
            {  
                iJiangNum++ ;  
            }  
            else  
            {  
                return false;  
            }  
        }  
        else  
        {  
            return false;  
        }  
    }  
    //万  
    iSize = m_MyPAIVec[2].size();  
    if(iSize>0)  
    {  
        if(iSize==2)  
        {  
            if(!CheckAAPai(m_MyPAIVec[2][0],m_MyPAIVec[2][1]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==3)  
        {  
            if(!CheckAAAPai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2]))  
            {  
                if(!CheckABCPai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2]))  
                {  
                    return false;  
                }  
            }  
        }  
        else if(iSize==5)  
        {  
            if(!Check5Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==6)  
        {  
            if(!Check6Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==8)  
        {  
            if(!Check8Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==9)  
        {  
            if(!Check9Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7],m_MyPAIVec[2][8]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==11)  
        {  
            if(!Check11Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7],m_MyPAIVec[2][8],m_MyPAIVec[2][9],m_MyPAIVec[2][10]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==12)  
        {  
            if(!Check12Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7],m_MyPAIVec[2][8],m_MyPAIVec[2][9],m_MyPAIVec[2][10],m_MyPAIVec[2][11]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==14)  
        {  
            if(!Check14Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7],m_MyPAIVec[2][8],m_MyPAIVec[2][9],m_MyPAIVec[2][10],m_MyPAIVec[2][11],m_MyPAIVec[2][12],m_MyPAIVec[2][13]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else  
        {  
            return false;  
        }  
    }  
  
    //条  
    iSize = m_MyPAIVec[3].size();  
    if(iSize>0)  
    {  
        if(iSize==2)  
        {  
            if(!CheckAAPai(m_MyPAIVec[3][0],m_MyPAIVec[3][1]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==3)  
        {  
            if(!CheckAAAPai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2]))  
            {  
                if(!CheckABCPai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2]))  
                {  
                    return false;  
                }  
            }  
        }  
        else if(iSize==5)  
        {  
            if(!Check5Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==6)  
        {  
            if(!Check6Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==8)  
        {  
            if(!Check8Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==9)  
        {  
            if(!Check9Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==11)  
        {  
            if(!Check11Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8],m_MyPAIVec[3][9],m_MyPAIVec[3][10]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==12)  
        {  
            if(!Check12Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8],m_MyPAIVec[3][9],m_MyPAIVec[3][10],m_MyPAIVec[3][11]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==14)  
        {  
            if(!Check14Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8],m_MyPAIVec[3][9],m_MyPAIVec[3][10],m_MyPAIVec[3][11],m_MyPAIVec[3][12],m_MyPAIVec[3][13]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else  
        {  
            return false;  
        }  
  
    }  
  
    //饼  
    iSize = m_MyPAIVec[4].size();  
    if(iSize>0)  
    {  
        if(iSize==2)  
        {  
            if(!CheckAAPai(m_MyPAIVec[4][0],m_MyPAIVec[4][1]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==3)  
        {  
            if(!CheckAAAPai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2]))  
            {  
                if(!CheckABCPai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2]))  
                {  
                    return false;  
                }  
            }  
        }  
        else if(iSize==5)  
        {  
            if(!Check5Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==6)  
        {  
            if(!Check6Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==8)  
        {  
            if(!Check8Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==9)  
        {  
            if(!Check9Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7],m_MyPAIVec[4][8]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==11)  
        {  
            if(!Check11Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7],m_MyPAIVec[4][8],m_MyPAIVec[4][9],m_MyPAIVec[4][10]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else if(iSize==12)  
        {  
            if(!Check12Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7],m_MyPAIVec[4][8],m_MyPAIVec[4][9],m_MyPAIVec[4][10],m_MyPAIVec[4][11]))  
            {  
                return false;  
            }  
        }  
        else if(iSize==14)  
        {  
            if(!Check14Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7],m_MyPAIVec[4][8],m_MyPAIVec[4][9],m_MyPAIVec[4][10],m_MyPAIVec[4][11],m_MyPAIVec[4][12],m_MyPAIVec[4][13]))  
            {  
                return false;  
            }  
            else  
            {  
                iJiangNum++ ;  
            }  
        }  
        else  
        {  
            return false;  
        }  
    }  
  
    if(iJiangNum==1)return true;  
    return false;  
}  
//检测听  
bool    CMJ::CheckTING()  
{  
    //剑牌  
    for(UINT j = 0 ; j < 9 ;j++ )  
    {  
        //起牌  
        AddPai(0,j+1);  
        if(CheckAllPai(MJPAI_GETPAI))  
        {  
            int iPaiIndex = GetPaiIndex(0,j+1);  
            DelPai(iPaiIndex);  
            return true;  
        }  
        else  
        {  
            int iPaiIndex = GetPaiIndex(0,j+1);  
            DelPai(iPaiIndex);  
        }  
    }  
    //风牌  
    for(UINT j = 0 ; j < 9 ;j++ )  
    {  
        //起牌  
        AddPai(1,j+1);  
        if(CheckAllPai(MJPAI_GETPAI))  
        {  
            int iPaiIndex = GetPaiIndex(1,j+1);  
            DelPai(iPaiIndex);  
            return true;  
        }  
        else  
        {  
            int iPaiIndex = GetPaiIndex(1,j+1);  
            DelPai(iPaiIndex);  
        }  
    }  
    for(UINT i = 2 ; i < 5 ;i++ )  
    {  
        for(UINT j = 0 ; j < 9 ;j++ )  
        {  
            //起牌  
            AddPai(i,j+1);  
            if(CheckAllPai(MJPAI_GETPAI))  
            {  
                int iPaiIndex = GetPaiIndex(i,j+1);  
                DelPai(iPaiIndex);  
                return true;  
            }  
            else  
            {  
                int iPaiIndex = GetPaiIndex(i,j+1);  
                DelPai(iPaiIndex);  
            }  
        }  
    }  
    return false;  
}  
 
 
    怎么样,代码写的还算清晰吧。喝口水,休息一下,再看一下CMJManage类的实现:
[cpp] 
#ifndef _CMJMANAGE_H  
#define _CMJMANAGE_H  
#include "CMJ.h"  
//剩余牌墙信息  
//扩展  
struct stPAIEx  
{  
    stPAI   m_NewPai;                       //起的新牌  
    int     m_PaiNum;                       //剩余牌数  
    bool    m_IsHZ;                         //是否黄庄  
}  
;  
  
//麻将管理器  
class CMJManage  
{  
    vector<stPAI> m_MJVec;                //麻将数据VEC  
    int             m_HZPaiNum;             //黄庄的牌数  
public:  
  
    //构造函数  
    CMJManage();  
    //析构函数  
    ~CMJManage();  
    //初始化牌  
    void    InitPai(int p_HZPaiNum = 0);  
    //起牌  
    stPAIEx GetAPai();  
private:  
    //洗牌  
    void    XiPai();  
}  
;  
  
#endif  
 
对应CPP:
[cpp]  
#include "CMJManage.h"  
      
//构造函数  
CMJManage::CMJManage()  
{  
    m_HZPaiNum = 0;  
}  
//析构函数  
CMJManage::~CMJManage()  
{  
      
}  
  
//初始化牌  
void    CMJManage::InitPai(int p_HZPaiNum)  
{  
    m_HZPaiNum = p_HZPaiNum;  
    m_MJVec.clear();  
    //中发白  
    for(UINT i = 1 ; i <= 3 ; i++)  
    {  
        stPAI t_Pai;  
        t_Pai.m_Type = 0;  
        t_Pai.m_Value = i;  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
    }  
    //东南西北  
    for(UINT i = 1 ; i <= 4 ; i++)  
    {  
        stPAI t_Pai;  
        t_Pai.m_Type = 1;  
        t_Pai.m_Value = i;  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
    }  
    //万  
    for(UINT i = 1 ; i <= 9 ; i++)  
    {  
        stPAI t_Pai;  
        t_Pai.m_Type = 2;  
        t_Pai.m_Value = i;  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
    }  
    //条  
    for(UINT i = 1 ; i <= 9 ; i++)  
    {  
        stPAI t_Pai;  
        t_Pai.m_Type = 3;  
        t_Pai.m_Value = i;  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
    }  
    //饼  
    for(UINT i = 1 ; i <= 9 ; i++)  
    {  
        stPAI t_Pai;  
        t_Pai.m_Type = 4;  
        t_Pai.m_Value = i;  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
        m_MJVec.push_back(t_Pai);  
    }  
    XiPai();  
}  
  
//洗牌  
void    CMJManage::XiPai()  
{  
    srand( GetTickCount() );  
    random_shuffle(m_MJVec.begin(),m_MJVec.end());  
}  
      
//起牌  
stPAIEx CMJManage::GetAPai()  
{  
    //如果所有牌都起完了  
      
    stPAIEx t_Pai;  
    t_Pai.m_NewPai.m_Type  = m_MJVec.back().m_Type;  
    t_Pai.m_NewPai.m_Value = m_MJVec.back().m_Value;  
    t_Pai.m_PaiNum = m_MJVec.size()-1;  
    if(t_Pai.m_PaiNum ==m_HZPaiNum)  
    {  
        t_Pai.m_IsHZ = true;  
    }  
    else  
    {  
        t_Pai.m_IsHZ = false;  
    }  
    //扔去一个  
    m_MJVec.pop_back();  
    return t_Pai;  
}  
 
 
    看,洗牌发牌类也搞定了,下面我们来将其在控制台上运行起来,打开控制台的main函数。
[cpp]  
#include "AI\\CMJ.h"  
#include "AI\\CMJManage.h"  
  
#include <windows.h>  
#include <iostream>  
using namespace std;  
  
  
int _tmain(int argc, _TCHAR* argv[])  
{  
    //其它三个玩家  
    CMJ             t_OtherPlayer[3];  
    //我  
    CMJ             t_MyPlayer;  
    //洗牌器  
    CMJManage       t_MJManage;  
    //分数  
    int             t_Score = 0;  
GameStart:  
  
    //初始化及洗牌  
    t_MJManage.InitPai();//初始化  
    t_MyPlayer.CleanUp();  
    for(UINT i = 0 ; i < 3; i++ )  
    {  
        t_OtherPlayer[i].CleanUp();  
    }  
    cout<<"洗牌完成"<<endl;  
    cout<<"起牌:========================================================"<<endl;  
    for(UINT i = 0 ; i < 13 ; i++)  
    {  
  
        stPAIEx t_Pai = t_MJManage.GetAPai();  
        t_MyPlayer.AddPai(t_Pai.m_NewPai.m_Type,t_Pai.m_NewPai.m_Value);  
  
        for(UINT j = 0 ; j < 3; j++ )  
        {  
            stPAIEx t_Pai2 = t_MJManage.GetAPai();  
            t_OtherPlayer[j].AddPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
        }  
    }  
    t_MyPlayer.Init();  
    for(UINT j = 0 ; j < 3; j++ )  
    {  
        t_OtherPlayer[j].Init();  
    }  
    //打牌循环  
    bool t_Finish   = false;  
    bool t_Ting     = false;  
    while(t_Finish == false)  
    {  
  
        t_MyPlayer.PrintAllPai();  
        cout<<endl;  
        cout<<"起牌:========================================================"<<endl;  
        stPAIEx t_Pai = t_MJManage.GetAPai();     
      
        //刷新我方牌墙  
        t_MyPlayer.PrintPai(t_Pai.m_NewPai.m_Type,t_Pai.m_NewPai.m_Value);  
        cout<<endl;  
        //如果没有听头  
        if(t_Ting == false)  
        {  
            cout<<"要还是打?Y/N";  
            char t_Result;  
            cin>>t_Result;  
            if(t_Result =='Y'||t_Result=='y')  
            {  
                //起牌  
                t_MyPlayer.AddPai(t_Pai.m_NewPai.m_Type,t_Pai.m_NewPai.m_Value);  
                //起牌后胡牌判断  
                t_Finish = t_MyPlayer.CheckAllPai(MJPAI_GETPAI);  
                if(t_Finish)  
                {  
                    printf("胡啦!!!:%s-%d",t_MyPlayer.GetInfo()->m_GoodName,t_MyPlayer.GetInfo()->m_GoodValue);  
                    ::_sleep(1000);  
                }  
                else  
                {  
                    if(t_Pai.m_NewPai.m_Type == -1)//如果起牌数已达到上限  
                    {  
                        cout<<endl;  
                        cout<<"黄庄了!!!!!!!!!!!!!"<<endl;  
                        break;  
                    }  
  
                    t_MyPlayer.PrintAllPai();  
                    cout<<endl;  
OUTPai:  
                    cout<<"请打牌(输入牌序号)";  
                    int PaiIndex;  
                    cin>>PaiIndex;  
                    if(t_MyPlayer.DelPai(PaiIndex)==false)  
                    {  
                        cout<<"没有此牌"<<endl;  
                        goto OUTPai;  
                    }  
                    //==============================牌面刷新================================================  
                    cout<<"牌面刷新============================"<<endl;  
                    t_MyPlayer.PrintAllPai();  
                    cout<<endl;  
                    //==============================================================================  
  
                    //======================包听========================================================  
                    if(t_MyPlayer.CheckAllPai(MJPAI_PUTPAI))  
                    {  
  
                        char t_BTing;  
                        cout<<"要包听吗?:(Y/N)";  
                        cin>>t_BTing;  
                        if(t_BTing=='y'||t_BTing=='Y')  
                        {  
                            t_Ting = true;  
                        }  
                    }  
                    //==============================================================================  
  
                }  
            }  
            else  
            {  
                    //======================包听========================================================  
                    if(t_MyPlayer.CheckAllPai(MJPAI_PUTPAI))  
                    {  
  
                        char t_BTing;  
                        cout<<"要包听吗?:(Y/N)";  
                        cin>>t_BTing;  
                        if(t_BTing=='y'||t_BTing=='Y')  
                        {  
                            t_Ting = true;  
                        }  
                    }  
                    //==============================================================================  
            }  
        }  
        else  
        {  
                  
                t_MyPlayer.AddPai(t_Pai.m_NewPai.m_Type,t_Pai.m_NewPai.m_Value);  
                //起牌  
                int iPaiIndex = t_MyPlayer.GetPaiIndex(t_Pai.m_NewPai.m_Type,t_Pai.m_NewPai.m_Value);  
                if(iPaiIndex>=0)  
                {  
                    //起牌后胡牌判断  
                    t_Finish = t_MyPlayer.CheckAllPai(MJPAI_GETPAI);  
                    if(t_Finish)  
                    {  
                        cout<<endl;  
                        printf("胡啦!!!:%s-合计%d番",t_MyPlayer.GetInfo()->m_GoodName,t_MyPlayer.GetInfo()->m_GoodValue);  
                        t_Score += t_MyPlayer.GetInfo()->m_GoodValue;  
                        ::_sleep(1000);  
                        break;  
                    }  
                    else  
                    {  
                        t_MyPlayer.DelPai(iPaiIndex);  
                        cout<<"打牌";  
                        t_MyPlayer.PrintPai(t_Pai.m_NewPai.m_Type,t_Pai.m_NewPai.m_Value);  
                        cout<<endl;  
                        ::_sleep(1000);  
                    }  
                }  
                else  
                {  
                    cout<<"程序出错!"<<endl;  
                }  
  
        }  
        cout<<endl;  
        //其它玩家起牌出牌  
        for(UINT j = 0 ; j < 3; j++ )  
        {  
            stPAIEx t_Pai2 = t_MJManage.GetAPai();  
            if(j==0)  
            {  
                cout<<"南家起牌出牌:";  
                t_MyPlayer.PrintPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                cout<<endl;  
                ::_sleep(1000);  
            }  
            if(j==1)  
            {  
                cout<<"西家起牌出牌:";  
                t_MyPlayer.PrintPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                cout<<endl;  
                ::_sleep(1000);  
            }  
            if(j==2)  
            {  
                cout<<"北家起牌出牌:";  
                t_MyPlayer.PrintPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                cout<<endl;  
                ::_sleep(1000);  
            }  
              
            char t_Result;  
            if(t_Ting == false)  
            {  
                if(t_Pai2.m_IsHZ)//如果起牌数已达到上限  
                {  
                    cout<<endl;  
                    cout<<"黄庄了!!!!!!!!!!!!!"<<endl;  
                    t_Finish = true;  
                    break;  
                }  
  
                bool t_Check = false;  
                //检查吃牌  
                if(t_MyPlayer.CheckChiPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value))  
                {  
                    if(t_Check==false)  
                    {  
                        cout<<"请选择:";  
                    }  
                    cout<<"(吃)";  
                    t_Check = true;  
                }  
                //检查碰牌  
                if(t_MyPlayer.CheckPengPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value))  
                {  
                    if(t_Check==false)  
                    {  
                        cout<<"请选择:";  
                    }  
                    cout<<"(碰)";  
                    t_Check = true;  
                }  
                //检查杠牌  
                if(t_MyPlayer.CheckGangPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value))  
                {  
                    if(t_Check==false)  
                    {  
                        cout<<"请选择:";  
                    }  
                    cout<<"(杠)";  
                    t_Check = true;  
                }  
                //起牌  
                t_MyPlayer.AddPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                //起牌后胡牌判断  
                if(t_MyPlayer.CheckAllPai(MJPAI_GETPAI))  
                {  
                    if(t_Check==false)  
                    {  
                        cout<<"请选择:";  
                    }  
                    cout<<"(胡)";  
                    t_Check = true;  
                }     
                int iPaiIndex = t_MyPlayer.GetPaiIndex(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                t_MyPlayer.DelPai(iPaiIndex);  
                //如果查到  
                if(t_Check)  
                {  
                    cout<<endl;  
                    cin>>t_Result;  
                }  
                else  
                {  
                    //返回循环  
                    continue;  
                }  
            }  
            else  
            {  
                t_Result = '4';  
            }  
            //吃牌  
            if(t_Result =='1')  
            {  
                t_MyPlayer.PrintChiChosePai();  
  
                int index = 0;  
                //如果吃牌组合大于  
                if(t_MyPlayer.GetChiChoseNum()>1)  
                {  
                    cout<<"请输入组合号:"<<endl;  
                    cin>>index;  
                }  
                t_MyPlayer.DoChiPai(index,t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
  
                //==============================================================================  
                cout<<"牌面刷新============================"<<endl;  
                t_MyPlayer.PrintAllPai();  
                cout<<endl;  
                //==============================================================================  
  
OUTPai2:  
                cout<<"请打牌(输入牌序号)";  
                int PaiIndex;  
                cin>>PaiIndex;  
                if(t_MyPlayer.DelPai(PaiIndex)==false)  
                {  
                    cout<<"没有此牌"<<endl;  
                    goto OUTPai2;  
                }  
  
                //=================================牌面刷新=============================================  
                cout<<"牌面刷新============================"<<endl;  
                t_MyPlayer.PrintAllPai();  
                cout<<endl;  
                //==============================================================================  
                //======================包听========================================================  
                if(t_MyPlayer.CheckAllPai(MJPAI_PUTPAI))  
                {  
  
                    char t_BTing;  
                    cout<<"要包听吗?:(Y/N)";  
                    cin>>t_BTing;  
                    if(t_BTing=='y'||t_BTing=='Y')  
                    {  
                        t_Ting = true;  
                    }  
                }  
                //==============================================================================  
                //该我下家  
                j = -1;  
          
            }  
            else if(t_Result =='2')//碰牌  
            {  
  
                t_MyPlayer.PrintPengChosePai();  
                t_MyPlayer.DoPengPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                //==============================================================================  
                cout<<"牌面刷新============================"<<endl;  
                t_MyPlayer.PrintAllPai();  
                cout<<endl;  
                //==============================================================================  
OUTPai3:  
                cout<<"请打牌(输入牌序号)";  
                int PaiIndex;  
                cin>>PaiIndex;  
                if(t_MyPlayer.DelPai(PaiIndex)==false)  
                {  
                    cout<<"没有此牌"<<endl;  
                    goto OUTPai3;  
                }  
                //==========================牌面刷新====================================================  
                cout<<"牌面刷新============================"<<endl;  
                t_MyPlayer.PrintAllPai();  
                cout<<endl;  
                //==============================================================================  
                //======================包听========================================================  
                if(t_MyPlayer.CheckAllPai(MJPAI_PUTPAI))  
                {  
  
                    char t_BTing;  
                    cout<<"要包听吗?:(Y/N)";  
                    cin>>t_BTing;  
                    if(t_BTing=='y'||t_BTing=='Y')  
                    {  
                        t_Ting = true;  
                    }  
                }  
                //==============================================================================  
                j = -1;  
      
            }  
            else if(t_Result =='3')//杠牌  
            {  
  
                t_MyPlayer.PrintGangChosePai();  
                t_MyPlayer.DoGangPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                cout<<"起杠底牌"<<endl;  
                t_MyPlayer.AddPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                //==============================================================================  
                cout<<"牌面刷新============================"<<endl;  
                t_MyPlayer.PrintAllPai();  
                cout<<endl;  
                //==============================================================================  
                stPAIEx t_Pai2 = t_MJManage.GetAPai();  
                  
                //起牌后胡牌判断  
                t_Finish = t_MyPlayer.CheckAllPai(MJPAI_GETPAI);  
                if(t_Finish)  
                {  
                    cout<<"杠底花吗?(Y/N)"<<endl;  
                    char t_Result;  
                    cin>>t_Result;  
                    if(t_Result =='Y'||t_Result=='y')  
                    {  
                        cout<<endl;  
                        printf("胡啦!!!:%s-%d",t_MyPlayer.GetInfo()->m_GoodName,t_MyPlayer.GetInfo()->m_GoodValue);  
                        t_Score += t_MyPlayer.GetInfo()->m_GoodValue;  
                        ::_sleep(1000);  
                        break;  
                    }  
                }  
  
                if(t_Pai2.m_IsHZ)//如果起牌数已达到上限  
                {  
                    cout<<"黄庄了!!!!!!!!!!!!!"<<endl;  
                    t_Finish = true;  
                    break;  
                }  
  
OUTPai4:  
                cout<<"请打牌(输入牌序号)";  
                int PaiIndex;  
                cin>>PaiIndex;  
                if(t_MyPlayer.DelPai(PaiIndex)==false)  
                {  
                    cout<<"没有此牌"<<endl;  
                    goto OUTPai4;  
                }  
                //===========================牌面刷新===================================================  
                cout<<"牌面刷新============================"<<endl;  
                t_MyPlayer.PrintAllPai();  
                cout<<endl;  
                //==============================================================================  
                //======================包听========================================================  
                if(t_MyPlayer.CheckAllPai(MJPAI_PUTPAI))  
                {  
  
                    char t_BTing;  
                    cout<<"要包听吗?:(Y/N)";  
                    cin>>t_BTing;  
                    if(t_BTing=='y'||t_BTing=='Y')  
                    {  
                        t_Ting = true;  
                    }  
                }  
                //==============================================================================  
                //该我下家  
                j = -1;  
  
            }  
            else if(t_Result =='4')//胡牌  
            {  
                //起牌  
                t_MyPlayer.AddPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                //起牌后胡牌判断  
                t_Finish = t_MyPlayer.CheckAllPai(MJPAI_GETPAI);  
                if(t_Finish)  
                {  
                    printf("胡啦!!!:%s-合计%d番",t_MyPlayer.GetInfo()->m_GoodName,t_MyPlayer.GetInfo()->m_GoodValue);  
                    t_Score += t_MyPlayer.GetInfo()->m_GoodValue;  
                    ::_sleep(1000);  
                    break;  
                }  
                else  
                {  
                    if(t_Pai2.m_IsHZ)//如果起牌数已达到上限  
                    {  
                        cout<<"黄庄了!!!!!!!!!!!!!"<<endl;  
                        t_Finish = true;  
                        break;  
                    }  
                    //起牌  
                    int iPaiIndex = t_MyPlayer.GetPaiIndex(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);  
                    cout<<endl;  
                    t_MyPlayer.DelPai(iPaiIndex);  
                }  
            }  
              
        }  
  
  
    }  
    cout<<"我的分数:"<<t_Score<<endl;  
    ::_sleep(3000);   
    goto GameStart;//重新开始一局  
  
    return 0;  
}  
 

你可能感兴趣的:(C++麻将游戏算法深入解析)