以此文奠我那些年中无意删除而删除的代码工程,另:本工作室承接棋牌算法研发合作业务,有兴趣可联系本QQ:285421210或微信honghaier_game

欢迎加入红孩儿【麻将研发】群: 605024890

敬请关注微信共众号:红孩儿的游戏开发之路        持续推出“房卡”麻将项目设计技巧,算法等等。



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

这两天为了工具箱的完善,整理了这些年引擎开发的一些资料,无意中发现06年写的一个麻将算法,编译运行了一下,还是有点意思的,拿出来整理一下分享给大家。

麻将是一种大家最喜爱的娱乐活动之一,相信所有人都有接触过。我写的这版算法,是可以吃,碰,杠,还有把牌摸完没有人胡时的皇庄和包听。是用控制台方式来表现的,什么?控制台?

对,因为是算法的设计,所以用控制台来表现当然最简单了。

当然,在交互时要用文字输入会有少许不便,不过这种形式的游戏可是图形游戏的鼻祖哦~

好,废话不多说了,来说一下设计思路:

对于麻将的一个玩家,都有一个牌墙的管理,这里封装了一副牌墙的各种算法,这个类我命名为CMJ。

另外还有一个洗牌类,负责洗牌和发牌。这个类为CMJManage。

我们先来看一下CMJ类。

CMJ.h:

#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 :

#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,已有ABCif( 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,已有ABBCif( 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,已有ABBBCif( 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,已有ABBBBCif( 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,全ABCif(Check3Pai(iValue1,iValue2,iValue3)&&Check6Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;    }//如果是右边两个为将if(CheckAAPai(iValue7,iValue8)){//无AAA,全ABCif(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,全ABCif(Check12Pai(iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12,iValue13,iValue14))return true;return false;}//如果是中间两个为将,左右边为三重张或三连张if(CheckAAPai(iValue4,iValue5)){//无AAA,全ABCif(Check3Pai(iValue1,iValue2,iValue3)&&Check9Pai(iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12,iValue13,iValue14))return true;return false;}//如果是中间两个为将,左右边为三重张或三连张if(CheckAAPai(iValue7,iValue8)){//无AAA,全ABCif(Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6)&&Check6Pai(iValue9,iValue10,iValue11,iValue12,iValue13,iValue14))return true;return false;}//如果是中间两个为将,左右边为三重张或三连张if(CheckAAPai(iValue10,iValue11)){//无AAA,全ABCif(Check3Pai(iValue12,iValue13,iValue14)&&Check9Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;return false;}//如果是右边两个为将,左右边为三重张或三连张if(CheckAAPai(iValue13,iValue14)){//无AAA,全ABCif(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类的实现:

#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;                //麻将数据VECint                m_HZPaiNum;             //黄庄的牌数
public://构造函数CMJManage();//析构函数~CMJManage();//初始化牌void  InitPai(int p_HZPaiNum = 0);//起牌stPAIEx    GetAPai();
private://洗牌void    XiPai();
}
;#endif

对应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函数。

#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;
}

OK,麻将就这样实现了,你可以将其任意修改一下变形成你喜欢的麻将游戏,我很开心这个代码能再次焕发青春,在此谢谢你。

”房卡“麻将研发技巧,尽在”红孩儿的游戏开发之路“,欢迎关注公众号!

随时等你哟~

麻将游戏算法深入解析相关推荐

  1. java语言麻将游戏代码_麻将游戏算法深入解析及实现代码

    麻将游戏算法深入解析及实现代码 这两天为了工具箱的完善,整理了这些年引擎开发的一些资料,无意中发现06年写的一个麻将算法,编译运行了一下,还是有点意思的,拿出来整理一下分享给大家. 麻将是一种大家最喜 ...

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

    C++麻将游戏算法深入解析 这两天为了工具箱的完善,整理了这些年引擎开发的一些资料,无意中发现06年写的一个麻将算法,编译运行了一下,还是有点意思的,拿出来整理一下分享给大家. 麻将是一种大家最喜爱的 ...

  3. 跳一跳j算法ava代码_麻将游戏算法深入解析及实现代码

    麻将游戏算法深入解析及实现代码 这两天为了工具箱的完善,整理了这些年引擎开发的一些资料,无意中发现06年写的一个麻将算法,编译运行了一下,还是有点意思的,拿出来整理一下分享给大家. 麻将是一种大家最喜 ...

  4. < 每日算法 - Javascript解析:经典弹珠游戏 >

    每日算法 - JavaScript解析:弹珠游戏 一.任务描述: > 示例一: >示例二 二.题意解析 三.解决方案: 往期内容

  5. 3D麻将游戏开发通用算法

    通常的3D麻将开发胡牌方式为满足N * ABC + M *DDD +EE 的形式,及存在一个对子(EE),剩余牌均能组成顺子(ABC)或者刻子(DDD). 三国游网络科技专注3D麻将游戏开发多年  专 ...

  6. 碰撞检测GJK算法论文解析一

    碰撞检测GJK算法论文解析一 碰撞检测 Objcet Representation And Distance 1.涉及的概念 2.内容详解 Preliminaries 1.涉及的概念 2.内容详解 碰 ...

  7. 【180616】VC++开发的麻将游戏

    VC++开发的单机版麻将游戏: 游戏中自己设定的类: ---------------------------- 1.玩家自身麻将与处理一个类(CWanjia) 玩家牌的种类(手中的牌,打出的牌,抓的新 ...

  8. go java 垃圾回收_Go/Java垃圾回收算法对比解析

    原标题:Go/Java垃圾回收算法对比解析 导读:GC 是大部分现代语言内置的特性,本文作者针对 Go 语言声称的 10ms 以下的 GC 停顿进行了深入分析,还同 Java 的垃圾收集器做了对比.G ...

  9. 转盘抽奖php,使用PHP实现转盘抽奖算法案例解析

    这次给大家带来使用PHP实现转盘抽奖算法案例解析,使用PHP实现转盘抽奖算法的注意事项有哪些,下面就是实战案例,一起来看一下. 流程: 1.拼装奖项数组 2.计算概率 3.返回中奖情况 代码如下: 中 ...

最新文章

  1. js实现图片不能显示时使用替换图片显示
  2. Nginx流媒体支持配置
  3. 可视化篇(三)———使用Excel绘制动态数据分布饼图
  4. mysql 表大小_MySQL查看数据库表容量大小的方法示例
  5. 频段表_VoLTE高低频段覆盖能力研究
  6. 浅谈Java多线程同步机制之同步块(方法)——synchronized
  7. Randomize select algorithm 随机选择算法
  8. PMP读书笔记(第2章)
  9. python字典返回键值对列表_返回列表Python dict dictionaries Python 数据结构——字典 返回列表...
  10. 7张图讲透Java垃圾回收算法!学妹直呼666!!!
  11. 图像处理——DCT变换的学习笔记
  12. 用Java语言编写的随机彩色验证码
  13. 如何利用vmware workstation安装linux
  14. vs2005 生成安装包的时候提示“不可恢复的生成错误”
  15. poj 1287 Networking prim最小生成树 基础!!!
  16. Linux进阶之给nginx设置登录用户验证
  17. java 大学考试_大学java期末考试试题
  18. 电子初学者需要掌握的几款电子设计软件
  19. 施乐7855维修手册中文版_GE苏伊士MK-2EPHARM EDI模块维修、清洗、注意事项
  20. 【HTML】HTML属性

热门文章

  1. CNN FPGA加速器实现(小型)CNN FPGA加速器实现(小型)
  2. 全球前十大一致性最好的交易系统之一Aberration(附源码)
  3. 谁喝水谁养斑马答案C语言,一群斑马一起在河边喝水,意外打造出条码效果,让人有眩晕的视觉...
  4. opencv颜色识别python_opencv使用HSV颜色空间实现颜色识别
  5. 用户登录测试用例设计
  6. templateRef.createEmbeddedView is not a function
  7. 怎样把任意exe程序注册成windows系统服务
  8. Sublime的汉化教程
  9. LayUI 数据表格 分页失效
  10. Cisco3560交换机密码恢复