麻将游戏算法深入解析
以此文奠我那些年中无意删除而删除的代码工程,另:本工作室承接棋牌算法研发合作业务,有兴趣可联系本QQ:285421210或微信honghaier_game
敬请关注微信共众号:红孩儿的游戏开发之路 持续推出“房卡”麻将项目设计技巧,算法等等。
麻将游戏算法深入解析 (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,麻将就这样实现了,你可以将其任意修改一下变形成你喜欢的麻将游戏,我很开心这个代码能再次焕发青春,在此谢谢你。
”房卡“麻将研发技巧,尽在”红孩儿的游戏开发之路“,欢迎关注公众号!
随时等你哟~
麻将游戏算法深入解析相关推荐
- java语言麻将游戏代码_麻将游戏算法深入解析及实现代码
麻将游戏算法深入解析及实现代码 这两天为了工具箱的完善,整理了这些年引擎开发的一些资料,无意中发现06年写的一个麻将算法,编译运行了一下,还是有点意思的,拿出来整理一下分享给大家. 麻将是一种大家最喜 ...
- C++麻将游戏算法深入解析
C++麻将游戏算法深入解析 这两天为了工具箱的完善,整理了这些年引擎开发的一些资料,无意中发现06年写的一个麻将算法,编译运行了一下,还是有点意思的,拿出来整理一下分享给大家. 麻将是一种大家最喜爱的 ...
- 跳一跳j算法ava代码_麻将游戏算法深入解析及实现代码
麻将游戏算法深入解析及实现代码 这两天为了工具箱的完善,整理了这些年引擎开发的一些资料,无意中发现06年写的一个麻将算法,编译运行了一下,还是有点意思的,拿出来整理一下分享给大家. 麻将是一种大家最喜 ...
- < 每日算法 - Javascript解析:经典弹珠游戏 >
每日算法 - JavaScript解析:弹珠游戏 一.任务描述: > 示例一: >示例二 二.题意解析 三.解决方案: 往期内容
- 3D麻将游戏开发通用算法
通常的3D麻将开发胡牌方式为满足N * ABC + M *DDD +EE 的形式,及存在一个对子(EE),剩余牌均能组成顺子(ABC)或者刻子(DDD). 三国游网络科技专注3D麻将游戏开发多年 专 ...
- 碰撞检测GJK算法论文解析一
碰撞检测GJK算法论文解析一 碰撞检测 Objcet Representation And Distance 1.涉及的概念 2.内容详解 Preliminaries 1.涉及的概念 2.内容详解 碰 ...
- 【180616】VC++开发的麻将游戏
VC++开发的单机版麻将游戏: 游戏中自己设定的类: ---------------------------- 1.玩家自身麻将与处理一个类(CWanjia) 玩家牌的种类(手中的牌,打出的牌,抓的新 ...
- go java 垃圾回收_Go/Java垃圾回收算法对比解析
原标题:Go/Java垃圾回收算法对比解析 导读:GC 是大部分现代语言内置的特性,本文作者针对 Go 语言声称的 10ms 以下的 GC 停顿进行了深入分析,还同 Java 的垃圾收集器做了对比.G ...
- 转盘抽奖php,使用PHP实现转盘抽奖算法案例解析
这次给大家带来使用PHP实现转盘抽奖算法案例解析,使用PHP实现转盘抽奖算法的注意事项有哪些,下面就是实战案例,一起来看一下. 流程: 1.拼装奖项数组 2.计算概率 3.返回中奖情况 代码如下: 中 ...
最新文章
- js实现图片不能显示时使用替换图片显示
- Nginx流媒体支持配置
- 可视化篇(三)———使用Excel绘制动态数据分布饼图
- mysql 表大小_MySQL查看数据库表容量大小的方法示例
- 频段表_VoLTE高低频段覆盖能力研究
- 浅谈Java多线程同步机制之同步块(方法)——synchronized
- Randomize select algorithm 随机选择算法
- PMP读书笔记(第2章)
- python字典返回键值对列表_返回列表Python dict dictionaries Python 数据结构——字典 返回列表...
- 7张图讲透Java垃圾回收算法!学妹直呼666!!!
- 图像处理——DCT变换的学习笔记
- 用Java语言编写的随机彩色验证码
- 如何利用vmware workstation安装linux
- vs2005 生成安装包的时候提示“不可恢复的生成错误”
- poj 1287 Networking prim最小生成树 基础!!!
- Linux进阶之给nginx设置登录用户验证
- java 大学考试_大学java期末考试试题
- 电子初学者需要掌握的几款电子设计软件
- 施乐7855维修手册中文版_GE苏伊士MK-2EPHARM EDI模块维修、清洗、注意事项
- 【HTML】HTML属性
热门文章
- CNN FPGA加速器实现(小型)CNN FPGA加速器实现(小型)
- 全球前十大一致性最好的交易系统之一Aberration(附源码)
- 谁喝水谁养斑马答案C语言,一群斑马一起在河边喝水,意外打造出条码效果,让人有眩晕的视觉...
- opencv颜色识别python_opencv使用HSV颜色空间实现颜色识别
- 用户登录测试用例设计
- templateRef.createEmbeddedView is not a function
- 怎样把任意exe程序注册成windows系统服务
- Sublime的汉化教程
- LayUI 数据表格 分页失效
- Cisco3560交换机密码恢复