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

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




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


 

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

 

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

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

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


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

 

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

 

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

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

 

     我们先来看一下CMJ类。

CMJ.h:

#ifndef _CMJ_H
#define _CMJ_H
//============================================
//Author:Honghaier
//Date:2006-12-20
//============================================
#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,已有ABC
if( iSize >= 3)
{
for(UINT i = 1 ; i < iSize-1 ; i++ )
{
if((m_MyPAIVec[p_Type][i-1]==(p_Value-1))&&(m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+1]==(p_Value+1)))
{
stCHI t_Chi;
t_Chi.m_Type = p_Type;
t_Chi.m_Value1 = p_Value-1;
t_Chi.m_Value2 = p_Value;
t_Chi.m_Value3 = p_Value+1;
m_TempChiPAIVec.push_back(t_Chi);
}
}
}
//假设吃B,已有ABBC
if( iSize >= 4)
{
for(UINT i = 1 ; i < iSize-2 ; i++ )
{
if((m_MyPAIVec[p_Type][i-1]==(p_Value-1))&&(m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+2]==(p_Value+1)))
{
stCHI t_Chi;
t_Chi.m_Type = p_Type;
t_Chi.m_Value1 = p_Value-1;
t_Chi.m_Value2 = p_Value;
t_Chi.m_Value3 = p_Value+1;
m_TempChiPAIVec.push_back(t_Chi);
}
}
}
//假设吃B,已有ABBBC
if( iSize >= 5)
{
for(UINT i = 1 ; i < iSize-3 ; i++ )
{
if((m_MyPAIVec[p_Type][i-1]==(p_Value-1))&&(m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+3]==(p_Value+1)))
{
stCHI t_Chi;
t_Chi.m_Type = p_Type;
t_Chi.m_Value1 = p_Value-1;
t_Chi.m_Value2 = p_Value;
t_Chi.m_Value3 = p_Value+1;
m_TempChiPAIVec.push_back(t_Chi);
}
}
}
//假设吃B,已有ABBBBC
if( iSize >= 6)
{
for(UINT i = 1 ; i < iSize-4 ; i++ )
{
if((m_MyPAIVec[p_Type][i-1]==(p_Value-1))&&(m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+4]==(p_Value+1)))
{
stCHI t_Chi;
t_Chi.m_Type = p_Type;
t_Chi.m_Value1 = p_Value-1;
t_Chi.m_Value2 = p_Value;
t_Chi.m_Value3 = p_Value+1;
m_TempChiPAIVec.push_back(t_Chi);
}
}
}
if(m_TempChiPAIVec.size() > 0)
{
return true;
}
}
return false;
}
//吃牌
bool CMJ::DoChiPai(int p_iIndex,int p_Type,int p_Value)
{
AddPai(p_Type,p_Value);
vector<stCHI>::iterator Iter;
int icount = 0;
for(Iter = m_TempChiPAIVec.begin(); Iter != m_TempChiPAIVec.end(); Iter++ )
{
if(icount == p_iIndex)
{
DelPai((*Iter).m_Type,(*Iter).m_Value1);
DelPai((*Iter).m_Type,(*Iter).m_Value2);
DelPai((*Iter).m_Type,(*Iter).m_Value3);

m_ChiPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value1);
m_ChiPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value2);
m_ChiPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value3);

return true;
}
icount++;
}
return false;
}
//对可吃的组合进行输出
void CMJ::PrintChiChosePai()
{
cout<<"================吃牌组合======================="<<endl;
vector<stCHI>::iterator Iter;
for(Iter = m_TempChiPAIVec.begin(); Iter != m_TempChiPAIVec.end();Iter++)
{
//万
if((*Iter).m_Type==2)
{
cout<<"["<<(*Iter).m_Value1<<"万";
cout<<""<<(*Iter).m_Value2<<"万";
cout<<""<<(*Iter).m_Value3<<"万]";
}
//条
if((*Iter).m_Type==3)
{
cout<<"["<<(*Iter).m_Value1<<"条";
cout<<""<<(*Iter).m_Value2<<"条";
cout<<""<<(*Iter).m_Value3<<"条]";
}
//饼
if((*Iter).m_Type==4)
{
cout<<"["<<(*Iter).m_Value1<<"饼";
cout<<""<<(*Iter).m_Value2<<"饼";
cout<<""<<(*Iter).m_Value3<<"饼]";
}
}
cout<<endl<<"========================================="<<endl;
}
//对可碰的组合进行输出
void CMJ::PrintPengChosePai()
{
cout<<"=====================碰牌=================="<<endl;
vector<stPAI>::iterator Iter;
for(Iter = m_TempPengPAIVec.begin(); Iter != m_TempPengPAIVec.end();Iter++)
{
//万
if((*Iter).m_Type==2)
{
cout<<"["<<(*Iter).m_Value<<"万";
cout<<""<<(*Iter).m_Value<<"万";
cout<<""<<(*Iter).m_Value<<"万]";
}
//条
if((*Iter).m_Type==3)
{
cout<<"["<<(*Iter).m_Value<<"条";
cout<<""<<(*Iter).m_Value<<"条";
cout<<""<<(*Iter).m_Value<<"条]";
}
//饼
if((*Iter).m_Type==4)
{
cout<<"["<<(*Iter).m_Value<<"饼";
cout<<""<<(*Iter).m_Value<<"饼";
cout<<""<<(*Iter).m_Value<<"饼]";
}
}
cout<<endl<<"========================================="<<endl;
}
//对可杠的组合进行输出
void CMJ::PrintGangChosePai()
{
cout<<"====================杠牌==================="<<endl;
vector<stPAI>::iterator Iter;
for(Iter = m_TempGangPAIVec.begin(); Iter != m_TempGangPAIVec.end();Iter++)
{
//万
if((*Iter).m_Type==2)
{
cout<<"["<<(*Iter).m_Value<<"万";
cout<<""<<(*Iter).m_Value<<"万";
cout<<""<<(*Iter).m_Value<<"万";
cout<<""<<(*Iter).m_Value<<"万]";
}
//条
if((*Iter).m_Type==3)
{
cout<<"["<<(*Iter).m_Value<<"条";
cout<<""<<(*Iter).m_Value<<"条";
cout<<""<<(*Iter).m_Value<<"条";
cout<<""<<(*Iter).m_Value<<"条]";
}
//饼
if((*Iter).m_Type==4)
{
cout<<"["<<(*Iter).m_Value<<"饼";
cout<<""<<(*Iter).m_Value<<"饼";
cout<<""<<(*Iter).m_Value<<"饼";
cout<<""<<(*Iter).m_Value<<"饼]";
}
}
cout<<endl<<"========================================="<<endl;
}
//取得吃牌组合数
UINT CMJ::GetChiChoseNum()
{
return m_TempChiPAIVec.size();
}
//碰牌
bool CMJ::CheckPengPai(int p_Type,int p_Value)
{
m_TempPengPAIVec.clear();
//饼
if(m_MyPAIVec[p_Type].empty()==false)
{
int iSize = m_MyPAIVec[p_Type].size();
if( iSize >= 2)
{
for(UINT i = 0 ; i < iSize-1 ; i++ )
{
if((m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+1]==p_Value))
{
stPAI t_Peng;
t_Peng.m_Type = p_Type;
t_Peng.m_Value = p_Value;
m_TempPengPAIVec.push_back(t_Peng);
break;
}
}
}
if(m_TempPengPAIVec.size() > 0)
{
return true;
}
}
return false;
}
//碰牌
bool CMJ::DoPengPai(int p_Type,int p_Value)
{
AddPai(p_Type,p_Value);
vector<stPAI>::iterator Iter;
for(Iter = m_TempPengPAIVec.begin(); Iter != m_TempPengPAIVec.end(); Iter++ )
{
DelPai((*Iter).m_Type,(*Iter).m_Value);
DelPai((*Iter).m_Type,(*Iter).m_Value);
DelPai((*Iter).m_Type,(*Iter).m_Value);

m_PengPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);
m_PengPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);
m_PengPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);
return true;
}
return false;
}
//杠牌
bool CMJ::CheckGangPai(int p_Type,int p_Value)
{
m_TempGangPAIVec.clear();
//饼
if(m_MyPAIVec[p_Type].empty()==false)
{
int iSize = m_MyPAIVec[p_Type].size();
if( iSize >= 3)
{
for(UINT i = 0 ; i < iSize-2 ; i++ )
{
if((m_MyPAIVec[p_Type][i]==p_Value)&&(m_MyPAIVec[p_Type][i+1]==p_Value)&&(m_MyPAIVec[p_Type][i+2]==p_Value))
{
stPAI t_Gang;
t_Gang.m_Type = p_Type;
t_Gang.m_Value = p_Value;
m_TempGangPAIVec.push_back(t_Gang);
break;
}
}
}
if(m_TempGangPAIVec.size() > 0)
{
return true;
}
}
return false;
}
//杠牌
bool CMJ::DoGangPai(int p_Type,int p_Value)
{
AddPai(p_Type,p_Value);
vector<stPAI>::iterator Iter;
for(Iter = m_TempGangPAIVec.begin(); Iter != m_TempGangPAIVec.end(); Iter++ )
{
DelPai((*Iter).m_Type,(*Iter).m_Value);
DelPai((*Iter).m_Type,(*Iter).m_Value);
DelPai((*Iter).m_Type,(*Iter).m_Value);
DelPai((*Iter).m_Type,(*Iter).m_Value);

//排序放入
if(m_GangPAIVec[(*Iter).m_Type].empty())
{
m_GangPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);
m_GangPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);
m_GangPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);
m_GangPAIVec[(*Iter).m_Type].push_back((*Iter).m_Value);
}
else
{
vector<int>::iterator Iter2;
for(Iter2 = m_GangPAIVec[(*Iter).m_Type].begin(); Iter2 != m_GangPAIVec[(*Iter).m_Type].end(); Iter2++ )
{
if((*Iter2)>(*Iter).m_Value)
{
m_GangPAIVec[(*Iter).m_Type].insert(Iter2,(*Iter).m_Value);
m_GangPAIVec[(*Iter).m_Type].insert(Iter2,(*Iter).m_Value);
m_GangPAIVec[(*Iter).m_Type].insert(Iter2,(*Iter).m_Value);
m_GangPAIVec[(*Iter).m_Type].insert(Iter2,(*Iter).m_Value);
break;
}
}
}
return true;
}
return false;
}
//检测是否胡牌
bool CMJ::CheckAllPai(bool GetOrPut)
{
if(GetOrPut == MJPAI_GETPAI)
{
//检查大四喜
if(CheckD4X_HU())
{
strcpy(m_GoodInfo.m_GoodName,"大四喜");
m_GoodInfo.m_GoodValue = 88;
return true;
}
//检查大三元
if(CheckD3Y_HU())
{
strcpy(m_GoodInfo.m_GoodName,"大三元");
m_GoodInfo.m_GoodValue = 88;
return true;
}
//检查绿一色
if(CheckL1S_HU())
{
strcpy(m_GoodInfo.m_GoodName,"绿一色");
m_GoodInfo.m_GoodValue = 88;
return true;
}
//检查九莲宝灯
if(Check9LBD_HU())
{
strcpy(m_GoodInfo.m_GoodName,"九莲宝灯");
m_GoodInfo.m_GoodValue = 88;
return true;
}
//检查四杠
if(Check4Gang_HU())
{
strcpy(m_GoodInfo.m_GoodName,"四杠");
m_GoodInfo.m_GoodValue = 88;
return true;
}
//检查连七对
if(CheckL7D_HU())
{
strcpy(m_GoodInfo.m_GoodName,"连七对");
m_GoodInfo.m_GoodValue = 88;
return true;
}
//检查十三幺
if(Chekc13Y_HU())
{
strcpy(m_GoodInfo.m_GoodName,"十三幺");
m_GoodInfo.m_GoodValue = 88;
return true;
}
//检查清幺九
if(CheckQY9_HU())
{
strcpy(m_GoodInfo.m_GoodName,"清幺九");
m_GoodInfo.m_GoodValue = 64;
return true;
}
//检查小四喜
if(CheckX4X_HU())
{
strcpy(m_GoodInfo.m_GoodName,"小四喜");
m_GoodInfo.m_GoodValue = 64;
return true;
}
//检查小三元
if(CheckX3Y_HU())
{
strcpy(m_GoodInfo.m_GoodName,"小三元");
m_GoodInfo.m_GoodValue = 64;
return true;
}
//检测是否四暗刻
if(Check4AK_HU())
{
strcpy(m_GoodInfo.m_GoodName,"四暗刻");
m_GoodInfo.m_GoodValue = 64;
return true;
}
//检测是否一色双龙会
if(Check1S2LH_HU())
{
strcpy(m_GoodInfo.m_GoodName,"一色双龙会");
m_GoodInfo.m_GoodValue = 64;
return true;
}
//检测是否一色四同顺
if(Check1S4TS_HU())
{
strcpy(m_GoodInfo.m_GoodName,"一色四同顺");
m_GoodInfo.m_GoodValue = 48;
return true;
}
//检测是否一色四节高
if(Check1S4JG_HU())
{
strcpy(m_GoodInfo.m_GoodName,"一色四节高");
m_GoodInfo.m_GoodValue = 48;
return true;
}
//检测是否一色四步高
if(Check1S4BG_HU())
{
strcpy(m_GoodInfo.m_GoodName,"一色四步高");
m_GoodInfo.m_GoodValue = 32;
return true;
}
//检测是否三杠
if(Check3Gang_HU())
{
strcpy(m_GoodInfo.m_GoodName,"三杠");
m_GoodInfo.m_GoodValue = 32;
return true;
}

//检测是否七对
if(Check7D_HU())
{
strcpy(m_GoodInfo.m_GoodName,"七对");
m_GoodInfo.m_GoodValue = 24;
return true;
}
//检测是否七星不靠
if(Check7XBK_HU())
{
strcpy(m_GoodInfo.m_GoodName,"七星不靠");
m_GoodInfo.m_GoodValue = 24;
return true;
}
//检测是否全双刻
if(CheckQSK_HU())
{
strcpy(m_GoodInfo.m_GoodName,"全双刻");
m_GoodInfo.m_GoodValue = 24;
return true;
}
//检测是否清一色
if(CheckQ1S_HU())
{
strcpy(m_GoodInfo.m_GoodName,"清一色");
m_GoodInfo.m_GoodValue = 24;
return true;
}
//检测是否一色三同顺
if(Check1S3TS_HU())
{
strcpy(m_GoodInfo.m_GoodName,"一色三同顺");
m_GoodInfo.m_GoodValue = 24;
return true;
}
//检测是否一色三节高
if(Check1S3JG_HU())
{
strcpy(m_GoodInfo.m_GoodName,"一色三节高");
m_GoodInfo.m_GoodValue = 24;
return true;
}
//检测是否全大
if(CheckQD_HU())
{
strcpy(m_GoodInfo.m_GoodName,"全大");
m_GoodInfo.m_GoodValue = 24;
return true;
}
//检测是否全中
if(CheckQZ_HU())
{
strcpy(m_GoodInfo.m_GoodName,"全中");
m_GoodInfo.m_GoodValue = 24;
return true;
}
//检测是否全小
if(CheckQX_HU())
{
strcpy(m_GoodInfo.m_GoodName,"全小");
m_GoodInfo.m_GoodValue = 24;
return true;
}
//检测是否青龙
if(CheckQL_HU())
{
strcpy(m_GoodInfo.m_GoodName,"青龙");
m_GoodInfo.m_GoodValue = 16;
return true;
}
//检测是否三色双龙会
if(Check3S2LH_HU())
{
strcpy(m_GoodInfo.m_GoodName,"三色双龙会");
m_GoodInfo.m_GoodValue = 16;
return true;
}
//检测是否一色三步高
if(Check1S3BG_HU())
{
strcpy(m_GoodInfo.m_GoodName,"一色三步高");
m_GoodInfo.m_GoodValue = 16;
return true;
}

//检测是否单调将
if(CheckDDJ_HU())
{
strcpy(m_GoodInfo.m_GoodName,"单调将");
m_GoodInfo.m_GoodValue = 1;
return true;
}

//检测是否平胡
if(CheckHU())
{
strcpy(m_GoodInfo.m_GoodName,"平胡");
m_GoodInfo.m_GoodValue = 1;
return true;
}

}
else
{
//判断是否听连宝灯
m_9LBD = Check9LBD_TING();
if(m_9LBD)return true;
//判断是否听幺
m_13Y = Check13Y_TING();
if(m_13Y)return true;
//判断是否四暗刻
m_4AK = Check4AK_TING();
if(m_4AK)return true;
//检测是否听头
return CheckTING();
}
return false;
}

//检测是否胡牌(张)
inline bool CMJ::CheckAAPai(int iValue1,int iValue2)
{
if(iValue1 == iValue2)return true;
return false;
}

//检测是否三连张
inline bool CMJ::CheckABCPai(int iValue1,int iValue2,int iValue3)
{
if(iValue1 == (iValue2-1)&&iValue2 == (iValue3-1))return true;
return false;
}

//检测是否三重张
inline bool CMJ::CheckAAAPai(int iValue1,int iValue2,int iValue3)
{
if(iValue1 == iValue2&&iValue2 == iValue3)return true;
return false;
}

//检测是否四重张
inline bool CMJ::CheckAAAAPai(int iValue1,int iValue2,int iValue3,int iValue4)
{
if(iValue1 == iValue2&&iValue2 == iValue3&&iValue3 == iValue4)return true;
return false;
}
//检测是否三连对
inline bool CMJ::CheckAABBCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6)
{
if(iValue1 == iValue2&&iValue3 == iValue4&&iValue5 == iValue6)
{
if((iValue1 == iValue3-1)&&(iValue3 == iValue5-1))
{
return true;
}
}
return false;
}
//检测是否三连高压
inline bool CMJ::CheckAAABBBCCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9)
{
if((iValue1 == iValue2&&iValue2 == iValue3)&&(iValue4 == iValue5&&iValue5 == iValue6)&&(iValue7 == iValue8&&iValue8 == iValue9))
{
if((iValue1 == iValue4-1)&&(iValue4 == iValue7-1))
{
return true;
}
}
return false;
}
//检测是否三连刻
inline bool CMJ::CheckAAAABBBBCCCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12)
{
if((iValue1 == iValue2&&iValue2 == iValue3&&iValue3 == iValue4)&&(iValue5 == iValue6&&iValue6 == iValue7&&iValue7 == iValue8)&&(iValue9 == iValue10&&iValue10 == iValue11&&iValue11 == iValue12))
{
if((iValue1 == iValue5-1)&&(iValue5 == iValue9-1))
{
return true;
}
}
return false;
}
//检测是否六连对
inline bool CMJ::CheckAABBCCDDEEFFPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12)
{
if(iValue1 == iValue2&&iValue3 == iValue4&&iValue5 == iValue6&&iValue7 == iValue8&&iValue9 == iValue10&&iValue11 == iValue12)
{
if((iValue1 == iValue3-1)&&(iValue3 == iValue5-1)&&(iValue5 == iValue7-1)&&(iValue7 == iValue9-1)&&(iValue9 == iValue11-1))
{
return true;
}
}
return false;
}

//检测是否胡牌(张)
bool CMJ::Check5Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5)
{
//如果是左边两个为将,右边为三重张或三连张
if(CheckAAPai(iValue1,iValue2))
{
if(Check3Pai(iValue3,iValue4,iValue5))return true;

}
//如果中间两个为将
if(CheckAAAPai(iValue2,iValue3,iValue4))
{
if(CheckABCPai(iValue1,iValue4,iValue5))return true;
}
//如果是左边两个为将,右边为三重张或三连张
if(CheckAAPai(iValue4,iValue5))
{
if(Check3Pai(iValue1,iValue2,iValue3))return true;
}

return false;
}
//检测是否胡牌(张)
bool CMJ::Check8Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8)
{
//如果是左边两个为将,右边为三重张或三连张
if(CheckAAPai(iValue1,iValue2))
{
return Check6Pai(iValue3,iValue4,iValue5,iValue6,iValue7,iValue8);
}

//如果是中间两个为将,左右边为三重张或三连张
if(CheckAAPai(iValue4,iValue5))
{
if(Check3Pai(iValue1,iValue2,iValue3)&&Check3Pai(iValue6,iValue7,iValue8))return true;
}

//如果是右边两个为将,左边为三重张或三连张
if(CheckAAPai(iValue7,iValue8))
{
return Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6);
}

return false;
}
//检测是否胡牌(张)
bool CMJ::Check11Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11)
{
//如果是左边两个为将
if(CheckAAPai(iValue1,iValue2))
{
return Check9Pai(iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11);
}

//如果是中间两个为将
if(CheckAAPai(iValue4,iValue5))
{
//无AAA,全ABC
if(Check3Pai(iValue1,iValue2,iValue3)&&Check6Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;
}

//如果是右边两个为将
if(CheckAAPai(iValue7,iValue8))
{
//无AAA,全ABC
if(Check3Pai(iValue9,iValue10,iValue11)&&Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6))return true;
}

//如果是右边两个为将
if(CheckAAPai(iValue10,iValue11))
{
return Check9Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9);
}
return false;
}
//检测是否胡牌(张)
bool CMJ::Check14Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12,int iValue13,int iValue14)
{
//如果是左边两个为将,右边为三重张或三连张
if(CheckAAPai(iValue1,iValue2))
{
//无AAA,全ABC
if(Check12Pai(iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12,iValue13,iValue14))return true;
return false;
}

//如果是中间两个为将,左右边为三重张或三连张
if(CheckAAPai(iValue4,iValue5))
{
//无AAA,全ABC
if(Check3Pai(iValue1,iValue2,iValue3)&&Check9Pai(iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12,iValue13,iValue14))return true;
return false;
}

//如果是中间两个为将,左右边为三重张或三连张
if(CheckAAPai(iValue7,iValue8))
{
//无AAA,全ABC
if(Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6)&&Check6Pai(iValue9,iValue10,iValue11,iValue12,iValue13,iValue14))return true;
return false;
}

//如果是中间两个为将,左右边为三重张或三连张
if(CheckAAPai(iValue10,iValue11))
{
//无AAA,全ABC
if(Check3Pai(iValue12,iValue13,iValue14)&&Check9Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;
return false;
}

//如果是右边两个为将,左右边为三重张或三连张
if(CheckAAPai(iValue13,iValue14))
{
//无AAA,全ABC
if(Check12Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12))return true;
}
return false;
}
//检测是否胡牌(张)
bool CMJ::Check3Pai(int iValue1,int iValue2,int iValue3)
{
if(CheckABCPai(iValue1,iValue2,iValue3))return true;
if(CheckAAAPai(iValue1,iValue2,iValue3))return true;
return false;
}
//检测是否胡牌(张)
bool CMJ::Check6Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6)
{
if(Check3Pai(iValue1,iValue2,iValue3)&&Check3Pai(iValue4,iValue5,iValue6))return true;
if(Check3Pai(iValue1,iValue2,iValue3)&&Check3Pai(iValue4,iValue5,iValue6))return true;
//三连对
if(CheckAABBCCPai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6))return true;
//第一张牌四连张
if(CheckAAAAPai(iValue2,iValue3,iValue4,iValue5))
{
if(CheckABCPai(iValue1,iValue2,iValue6))return true;
}
return false;
}

//检测是否胡牌(张)
bool CMJ::Check9Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9)
{
if(CheckABCPai(iValue1,iValue2,iValue3)&&Check6Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;
if(CheckAAAPai(iValue1,iValue2,iValue3)&&Check6Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;
if(CheckABCPai(iValue7,iValue8,iValue9)&&Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6))return true;
if(CheckAAAPai(iValue7,iValue8,iValue9)&&Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6))return true;

return false;
}

//检测是否胡牌(张)
bool CMJ::Check12Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12)
{
if(CheckABCPai(iValue1,iValue2,iValue3)&&Check9Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12))return true;
if(CheckAAAPai(iValue1,iValue2,iValue3)&&Check9Pai(iValue4,iValue5,iValue6,iValue7,iValue8,iValue9,iValue10,iValue11,iValue12))return true;
if(CheckABCPai(iValue10,iValue11,iValue12)&&Check9Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;
if(CheckAAAPai(iValue10,iValue11,iValue12)&&Check9Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6,iValue7,iValue8,iValue9))return true;
if(Check6Pai(iValue1,iValue2,iValue3,iValue4,iValue5,iValue6)&&Check6Pai(iValue7,iValue8,iValue9,iValue10,iValue11,iValue12))return true;

return false;
}
//检测是否是大四喜
bool CMJ::CheckD4X_HU()
{
//东西南北四杠
if(m_GangPAIVec[1].size()==16)
{
//将牌
for(int i = 0 ; i < 6 ; i++ )
{
if(m_MyPAIVec[i].size()==2)
{
//如果是将
if(m_MyPAIVec[i][0] == m_MyPAIVec[i][1])
{
return true;
}
}
}
}
return false;

}

//检则是否是大三元
bool CMJ::CheckD3Y_HU()
{
//中发白三杠
if(m_GangPAIVec[0].size()==12)
{
//将牌
for(int i = 0 ; i < 6 ; i++ )
{
if(m_MyPAIVec[i].size()==2)
{
//如果是将
if(m_MyPAIVec[i][0] == m_MyPAIVec[i][1])
{
return true;
}
}
}
}
return false;
}

//检测是否绿一色
bool CMJ::CheckL1S_HU()
{
//只准有发财和条
if(m_MyPAIVec[1].size()>0)return false;
if(m_MyPAIVec[2].size()>0)return false;
if(m_MyPAIVec[4].size()>0)return false;
if(m_MyPAIVec[5].size()>0)return false;
if(m_ChiPAIVec[1].size()>0)return false;
if(m_ChiPAIVec[2].size()>0)return false;
if(m_ChiPAIVec[4].size()>0)return false;
if(m_ChiPAIVec[5].size()>0)return false;
if(m_PengPAIVec[1].size()>0)return false;
if(m_PengPAIVec[2].size()>0)return false;
if(m_PengPAIVec[4].size()>0)return false;
if(m_PengPAIVec[5].size()>0)return false;
if(m_GangPAIVec[1].size()>0)return false;
if(m_GangPAIVec[2].size()>0)return false;
if(m_GangPAIVec[4].size()>0)return false;
if(m_GangPAIVec[5].size()>0)return false;
//对发财
if(m_MyPAIVec[0].size() ==2)
{
if(m_MyPAIVec[0][0]==2&&m_MyPAIVec[0][1]==2)
{
for(int i = 1 ;i < 6 ; i++)
{
if(i==3)continue;
if(m_MyPAIVec[i].size()>0)return false;
if(m_ChiPAIVec[i].size()>0)return false;
if(m_PengPAIVec[i].size()>0)return false;
if(m_GangPAIVec[i].size()>0)return false;
}
//吃
int iSize = m_ChiPAIVec[3].size();
if(iSize>0)
{
vector< int >::iterator Iter;
for(Iter = m_ChiPAIVec[3].begin();Iter != m_ChiPAIVec[3].end();Iter++ )
{
if((*Iter)==1)return false;
if((*Iter)==5)return false;
if((*Iter)==7)return false;
if((*Iter)==9)return false;
}
}
//碰
iSize = m_PengPAIVec[3].size();
if(iSize>0)
{
vector< int >::iterator Iter;
for(Iter = m_PengPAIVec[3].begin();Iter != m_PengPAIVec[3].end();Iter++ )
{
if((*Iter)==1)return false;
if((*Iter)==5)return false;
if((*Iter)==7)return false;
if((*Iter)==9)return false;
}
}
//杠
iSize = m_GangPAIVec[3].size();
if(iSize>0)
{
vector< int >::iterator Iter;
for(Iter = m_GangPAIVec[3].begin();Iter != m_GangPAIVec[3].end();Iter++ )
{
if((*Iter)==1)return false;
if((*Iter)==5)return false;
if((*Iter)==7)return false;
if((*Iter)==9)return false;
}
}
//起
iSize = m_MyPAIVec[3].size();
if(iSize>0)
{
vector< int >::iterator Iter;
for(Iter = m_MyPAIVec[3].begin();Iter != m_MyPAIVec[3].end();Iter++ )
{
if((*Iter)==1)return false;
if((*Iter)==5)return false;
if((*Iter)==7)return false;
if((*Iter)==9)return false;
}

}
}
}
else
{
return false;
}
//如果有三张
if(m_MyPAIVec[3].size() == 3)
{
if(Check3Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2]))return true;
}
//如果有六张
if(m_MyPAIVec[3].size() == 6)
{
if(Check6Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5]))return true;
}
//九张
if(m_MyPAIVec[3].size() == 9)
{
if(Check9Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8]))return true;
}
//十二张
if(m_MyPAIVec[3].size() == 12)
{
if(Check12Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8],m_MyPAIVec[3][9],m_MyPAIVec[3][10],m_MyPAIVec[3][11]))return true;
}
return false;
}

//检测是否九莲宝灯(胡)
bool CMJ::Check9LBD_HU()
{
if(m_9LBD)//如果已经成九连宝灯牌型
{
if(m_MyPAIVec[2].size()==14)return true;
if(m_MyPAIVec[3].size()==14)return true;
if(m_MyPAIVec[4].size()==14)return true;
}
return false;
}
//检测是否九莲宝灯牌型(听)
bool CMJ::Check9LBD_TING()
{
for(UINT i = 2 ; i < 5 ; i++ )
{
if(m_MyPAIVec[i].size()==13)
{
if(m_MyPAIVec[i][0]==1&&m_MyPAIVec[i][1]==1&&m_MyPAIVec[i][2]==1)
{
if(m_MyPAIVec[i][3]==2&&m_MyPAIVec[i][4]==3&&m_MyPAIVec[i][5]==4&&m_MyPAIVec[i][6]==5&&m_MyPAIVec[i][7]==6&&m_MyPAIVec[i][8]==7&&m_MyPAIVec[i][9]==8)
{
if(m_MyPAIVec[i][10]==9&&m_MyPAIVec[i][11]==9&&m_MyPAIVec[i][12]==9)
{
return true;
}
}
}
}
}

return false;
}
//检测是否是四杠
bool CMJ::Check4Gang_HU()
{
int iSize = 0;
for(UINT i = 0 ; i < 6 ; i++ )
{
iSize = m_GangPAIVec[i].size();
}

if(iSize == 16)
{
//将牌
for(int i = 0 ; i < 6 ; i++ )
{
//如果是将
if(CheckAAPai(m_MyPAIVec[i][0],m_MyPAIVec[i][1]))
{
return true;
}
}

}
return false;
}

//检测是否连七对
bool CMJ::CheckL7D_HU()
{
for(UINT i = 2 ; i < 5 ; i++ )
{
if(m_MyPAIVec[i].size()==14)
{
if(m_MyPAIVec[i][0]==1&&m_MyPAIVec[i][1]==1&&m_MyPAIVec[i][2]==2&&m_MyPAIVec[i][3]==2&&m_MyPAIVec[i][4]==3&&m_MyPAIVec[i][5]==3&&m_MyPAIVec[i][6]==4&&m_MyPAIVec[i][7]==4&&m_MyPAIVec[i][8]==5&&m_MyPAIVec[i][9]==5&&m_MyPAIVec[i][10]==6&&m_MyPAIVec[i][11]==6&&m_MyPAIVec[i][12]==7&&m_MyPAIVec[i][13]==7)
{
return true;
}
if(m_MyPAIVec[i][0]==2&&m_MyPAIVec[i][1]==2&&m_MyPAIVec[i][2]==3&&m_MyPAIVec[i][3]==3&&m_MyPAIVec[i][4]==4&&m_MyPAIVec[i][5]==4&&m_MyPAIVec[i][6]==5&&m_MyPAIVec[i][7]==5&&m_MyPAIVec[i][8]==6&&m_MyPAIVec[i][9]==6&&m_MyPAIVec[i][10]==7&&m_MyPAIVec[i][11]==7&&m_MyPAIVec[i][12]==8&&m_MyPAIVec[i][13]==8)
{
return true;
}
if(m_MyPAIVec[i][0]==3&&m_MyPAIVec[i][1]==3&&m_MyPAIVec[i][2]==4&&m_MyPAIVec[i][3]==4&&m_MyPAIVec[i][4]==5&&m_MyPAIVec[i][5]==5&&m_MyPAIVec[i][6]==6&&m_MyPAIVec[i][7]==6&&m_MyPAIVec[i][8]==7&&m_MyPAIVec[i][9]==7&&m_MyPAIVec[i][10]==8&&m_MyPAIVec[i][11]==8&&m_MyPAIVec[i][12]==9&&m_MyPAIVec[i][13]==9)
{
return true;
}
}
}

return false;
}

//检测是否胡十三幺
bool CMJ::Chekc13Y_HU()
{
if(m_13Y)
{
bool i13YSize[13] ;
for(UINT i = 0 ; i < 13 ; i++ )
{
i13YSize[i]=false;
}
//中发白
vector<int>::iterator Iter;
for(Iter = m_MyPAIVec[0].begin();Iter != m_MyPAIVec[0].end(); Iter++ )
{
if((*Iter)==1)
{
i13YSize[0]=true;
}
if((*Iter)==2)
{
i13YSize[1]=true;
}
if((*Iter)==3)
{
i13YSize[2]=true;
}
}
//东南西北风
for(Iter = m_MyPAIVec[1].begin();Iter != m_MyPAIVec[1].end(); Iter++ )
{
if((*Iter)==1)
{
i13YSize[3]=true;
}
if((*Iter)==2)
{
i13YSize[4]=true;
}
if((*Iter)==3)
{
i13YSize[5]=true;
}
if((*Iter)==4)
{
i13YSize[6]=true;
}
}
//一九万
for(Iter = m_MyPAIVec[2].begin();Iter != m_MyPAIVec[2].end(); Iter++ )
{
if((*Iter)==1)
{
i13YSize[7]=true;
}
if((*Iter)==9)
{
i13YSize[8]=true;
}
}

//一九条
for(Iter = m_MyPAIVec[3].begin();Iter != m_MyPAIVec[3].end(); Iter++ )
{
if((*Iter)==1)
{
i13YSize[9]=true;
}
if((*Iter)==9)
{
i13YSize[10]=true;
}
}

//一九饼
for(Iter = m_MyPAIVec[4].begin();Iter != m_MyPAIVec[4].end(); Iter++ )
{
if((*Iter)==1)
{
i13YSize[11]=true;
}
if((*Iter)==9)
{
i13YSize[12]=true;
}
}
int icount = 0;
for(UINT i = 0 ; i < 13 ; i++ )
{
if(i13YSize[i]==true)
{
icount++;
}
}
if(icount == 13)return true;

}
return false;
}
//检测是否清幺九
bool CMJ::CheckQY9_HU()
{
int iSize = 0;
int iCount = 0;
for(UINT i = 2 ; i < 5 ; i++ )
{
iSize = m_GangPAIVec[i].size();
iCount += iSize;
for(UINT j = 0 ; j < iSize ; j++ )
{
if(m_GangPAIVec[i][j]!=1||m_GangPAIVec[i][j]!=9)return false;
}
}

if(iCount == 12)
{
if(m_MyPAIVec[2].size()==2)
{
if(m_MyPAIVec[2][0]==1&&m_MyPAIVec[2][1]==1)return true;
if(m_MyPAIVec[2][0]==9&&m_MyPAIVec[2][1]==9)return true;
}

if(m_MyPAIVec[3].size()==3)
{
if(m_MyPAIVec[3][0]==1&&m_MyPAIVec[3][1]==1)return true;
if(m_MyPAIVec[3][0]==9&&m_MyPAIVec[3][1]==9)return true;
}

if(m_MyPAIVec[4].size()==4)
{
if(m_MyPAIVec[4][0]==1&&m_MyPAIVec[4][1]==1)return true;
if(m_MyPAIVec[4][0]==9&&m_MyPAIVec[4][1]==9)return true;
}
}

return false;

}
//检测是否胡小四喜
bool CMJ::CheckX4X_HU()
{
//东西南北四杠
if(m_GangPAIVec[1].size()==12)
{
//将牌的位置
int iJiangPos = -1;
//将牌
for(int i = 0 ; i < 6 ; i++ )
{
if(m_MyPAIVec[i].size()==5)
{

if(Check5Pai(m_MyPAIVec[i][0],m_MyPAIVec[i][1],m_MyPAIVec[i][2],m_MyPAIVec[i][3],m_MyPAIVec[i][4]))
{
return true;
}
}
if(m_MyPAIVec[i].size()==2)
{
//如果是将
if(CheckAAPai(m_MyPAIVec[i][0],m_MyPAIVec[i][1]))
{
iJiangPos = i;
break;
}
}
}
//
if(iJiangPos>0)
{
for(int i = 0 ; i < 6 ; i++ )
{
if(i!=iJiangPos)
{
if((m_MyPAIVec[i].size()==3))
{
if(Check3Pai(m_MyPAIVec[i][0],m_MyPAIVec[i][1],m_MyPAIVec[i][2]))return true;
}
}
}
}
}
return false;
}
//检测是否胡小三元
bool CMJ::CheckX3Y_HU()
{
//东西南北四杠
if(m_GangPAIVec[0].size()==8)
{
if(m_MyPAIVec[0].size()==5)
{
if(Check5Pai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2],m_MyPAIVec[0][3],m_MyPAIVec[0][4]))
{
return true;
}
else
{
return false;
}
}
else if(m_MyPAIVec[0].size()==2)
{
//如果是将
if(CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1])==false)
{
return false;
}
}
else
{
return false;
}
return CheckHU();

}
return false;
}
//检测是否胡字一色
bool CMJ::CheckZ1S_HU()
{
//只准有字
if(m_MyPAIVec[2].size()>0)return false;
if(m_MyPAIVec[3].size()>0)return false;
if(m_MyPAIVec[4].size()>0)return false;
if(m_MyPAIVec[5].size()>0)return false;
if(m_ChiPAIVec[2].size()>0)return false;
if(m_ChiPAIVec[3].size()>0)return false;
if(m_ChiPAIVec[4].size()>0)return false;
if(m_ChiPAIVec[5].size()>0)return false;
if(m_PengPAIVec[2].size()>0)return false;
if(m_PengPAIVec[3].size()>0)return false;
if(m_PengPAIVec[4].size()>0)return false;
if(m_PengPAIVec[5].size()>0)return false;
if(m_GangPAIVec[2].size()>0)return false;
if(m_GangPAIVec[3].size()>0)return false;
if(m_GangPAIVec[4].size()>0)return false;
if(m_GangPAIVec[5].size()>0)return false;
int iSize = m_MyPAIVec[0].size();
if(iSize > 0)
{
if(iSize == 2)
{
if(m_MyPAIVec[0][0]==m_MyPAIVec[0][1])
{
iSize = m_MyPAIVec[1].size();
if(iSize == 0)return true;
if(iSize == 3)
{
if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2]))return true;
}
}
}

}
return false;
}
//检测是否四暗刻
bool CMJ::Check4AK_HU()
{
if(m_4AK)
{
//将牌
for(int i = 0 ; i < 6 ; i++ )
{
if(m_MyPAIVec[i].size()==2)
{
//如果是将
if(m_MyPAIVec[i][0] == m_MyPAIVec[i][1])
{
return true;
}
}
}
}
return false;
}
//检测是否一色双龙会
bool CMJ::Check1S2LH_HU()
{
//万,条,饼
for(UINT i = 0 ; i <= 4; i++ )
{
int iType = i;
if(m_MyPAIVec[iType].size()==14)
{

if(m_MyPAIVec[iType][0]==1&&m_MyPAIVec[iType][1]==1)
{

}
else
{
return false;
}
if(m_MyPAIVec[iType][2]==2&&m_MyPAIVec[iType][3]==2)
{

}
else
{
return false;
}
if(m_MyPAIVec[iType][4]==3&&m_MyPAIVec[iType][5]==3)
{

}
else
{
return false;
}
if(m_MyPAIVec[iType][6]==5&&m_MyPAIVec[iType][7]==5)
{

}
else
{
return false;
}
if(m_MyPAIVec[iType][8]==7&&m_MyPAIVec[iType][9]==7)
{

}
else
{
return false;
}
if(m_MyPAIVec[iType][10]==8&&m_MyPAIVec[iType][11]==8)
{

}
else
{
return false;
}
if(m_MyPAIVec[iType][12]==9&&m_MyPAIVec[iType][13]==9)
{

}
else
{
return false;
}

return true;
}
}
return false;
}

//检测是否一色四同顺
bool CMJ::Check1S4TS_HU()
{
//万,条,饼
for(UINT i = 0 ; i <= 4; i++ )
{
int iType = i;
//吃过的顺
int iSize1 = m_ChiPAIVec[iType].size();
//剩余牌墙中的顺
int iSize2 = m_MyPAIVec[iType].size();
//万
if(iSize1 + iSize2 >= 12)
{
//无吃的顺
if(iSize1==0)
{
if(iSize2==12)
{
//三连暗杠成顺
if(CheckAAAABBBBCCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11]))return CheckHU();
return false;
}
if(iSize2==14)
{
//三连暗杠成顺
if((m_MyPAIVec[iType][12]==(m_MyPAIVec[iType][13]))&&CheckAAAABBBBCCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11]))return true;
//三连暗杠成顺
if((m_MyPAIVec[iType][0]==(m_MyPAIVec[iType][1]))&&CheckAAAABBBBCCCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11],m_MyPAIVec[iType][12],m_MyPAIVec[iType][13]))return true;
return false;
}
}
//吃到一个顺
if(iSize1==3)
{
if(iSize2==9)
{
//三连高压
if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])
{
return CheckHU();
}
}
return false;
}
if(iSize2==11)
{

//三连高压
if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8]))
{
if(m_MyPAIVec[iType][9]==m_MyPAIVec[iType][10]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])
{
return true;
}
}
//三连高压
if(CheckAAABBBCCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))
{
if(m_MyPAIVec[iType][0]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][8])
{
return true;
}
}

return false;
}
}
//吃到二个顺
if(iSize1==6)
{
if(iSize2==6)
{
//三连对
if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])
{
if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][4])
{
return CheckHU();
}
}
}
return false;
}
if(iSize2==8)
{
//三连对
if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5]))
{
if(m_MyPAIVec[iType][6]==m_MyPAIVec[iType][7]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])
{
if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][4])
{
return true;
}

}
}

//三连对
if(CheckAABBCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7]))
{
if(m_MyPAIVec[iType][0]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])
{
if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][6])
{
return true;
}
}
}

return false;
}
}
//吃到三个顺
if(iSize1==9)
{
if(iSize2==3)
{
//顺子
if(CheckABCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])
{
if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][2])
{
if(m_ChiPAIVec[iType][6]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][7]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][8]==m_MyPAIVec[iType][2])
{
return CheckHU();
}
}
}
}
return false;
}
if(iSize2==5)
{
//顺子
if(CheckABCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))
{
if(m_MyPAIVec[iType][3]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])
{
if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][2])
{
if(m_ChiPAIVec[iType][6]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][7]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][8]==m_MyPAIVec[iType][2])
{
return true;
}
}
}
}

//顺子
if(CheckABCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4]))
{
if(m_MyPAIVec[iType][0]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])
{
if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][4])
{
if(m_ChiPAIVec[iType][6]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][7]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][8]==m_MyPAIVec[iType][4])
{
return true;
}

}
}
}
return false;
}
}

//吃到三连顺
if(iSize1==12)
{
if((m_ChiPAIVec[iType][0]==m_ChiPAIVec[iType][3])&&(m_ChiPAIVec[iType][3]==m_ChiPAIVec[iType][6])&&(m_ChiPAIVec[iType][6]==m_ChiPAIVec[iType][9]))
{
return CheckHU();
}
return false;
}
}

}
return false;
}

//检测是否一色四节高
bool CMJ::Check1S4JG_HU()
{
//万,条,饼
for(UINT i = 2 ; i <= 4 ; i++)
{
int iType = i;
if(m_GangPAIVec[iType].size()==16)
{
if((m_GangPAIVec[iType][0]==m_GangPAIVec[iType][4]-1)&&(m_GangPAIVec[iType][4]==m_GangPAIVec[iType][8]-1)&&(m_GangPAIVec[iType][8]==m_GangPAIVec[iType][12]-1))
{
return CheckHU();
}
}
}
return false;
}
//检测是否一色四步高
bool CMJ::Check1S4BG_HU()
{
/*//万
if(m_GangPAIVec[2].size()==16)
{
if((m_GangPAIVec[2][0]==m_GangPAIVec[2][4]-1)&&(m_GangPAIVec[2][4]==m_GangPAIVec[2][8]-1)&&(m_GangPAIVec[2][8]==m_GangPAIVec[2][12]-1))
{
return CheckHU();
}
}*/
return false;
}
//检测是否三杠
bool CMJ::Check3Gang_HU()
{
int iSize = 0;
for(UINT i = 0 ; i < 6 ; i++ )
{
iSize = m_GangPAIVec[i].size();
}

if(iSize == 12)
{
//将牌
return CheckHU();

}
return false;
}
//检测是否混幺九
bool CMJ::CheckHY9_HU()
{
return false;
}
//检测是否七对
bool CMJ::Check7D_HU()
{
int iDoubleNum = 0 ;
for(UINT i = 0 ; i < 6 ; i++ )
{
UINT iSize = m_MyPAIVec[i].size();
if(iSize%2 ==1||iSize==0)return false;//如果是奇数肯定不是对
for(UINT j = 0 ; j < iSize-1 ; j++)
{
if(m_MyPAIVec[i][j]==m_MyPAIVec[i][j+1])
{
iDoubleNum++;
j++;
}
}
}
if(iDoubleNum==7)return true;
return false;
}
//检测是否七星不靠
bool CMJ::Check7XBK_HU()
{
bool bIs7XBK[14] ;
for(UINT i = 0 ; i < 14 ; i++ )
{
bIs7XBK[i]=false;
}
//中发白
vector<int>::iterator Iter;
if(m_MyPAIVec[0].size()!=3)return false;
for(Iter = m_MyPAIVec[0].begin();Iter != m_MyPAIVec[0].end(); Iter++ )
{
if((*Iter)==1)
{
bIs7XBK[7]=true;
}
if((*Iter)==2)
{
bIs7XBK[8]=true;
}
if((*Iter)==3)
{
bIs7XBK[9]=true;
}
}
//东南西北风
if(m_MyPAIVec[1].size()!=4)return false;
for(Iter = m_MyPAIVec[1].begin();Iter != m_MyPAIVec[1].end(); Iter++ )
{
if((*Iter)==1)
{
bIs7XBK[10]=true;
}
if((*Iter)==2)
{
bIs7XBK[11]=true;
}
if((*Iter)==3)
{
bIs7XBK[12]=true;
}
if((*Iter)==4)
{
bIs7XBK[13]=true;
}
}
//万,条,饼
for(UINT i = 2 ; i <= 4 ; i++)
{
if(m_MyPAIVec[i].size()==3)
{
if(m_MyPAIVec[i][0]==1&&m_MyPAIVec[i][1]==4&&m_MyPAIVec[i][2]==7)
{
bIs7XBK[0]=true;
bIs7XBK[3]=true;
bIs7XBK[6]=true;
}
}
else if(m_MyPAIVec[2].size()==2)
{
if(m_MyPAIVec[i][0]==2&&m_MyPAIVec[i][1]==5)
{
bIs7XBK[1]=true;
bIs7XBK[4]=true;
}
else if(m_MyPAIVec[i][0]==3&&m_MyPAIVec[i][1]==6)
{
bIs7XBK[2]=true;
bIs7XBK[5]=true;
}
}
else
{
return false;
}
}
bool t_Result = true;
for(UINT i = 0 ; i < 14 ; i++ )
{
if(bIs7XBK[i]==false)t_Result=false;
}
if(t_Result)return true;

for(UINT i = 2 ; i <= 4 ; i++)
{
if(m_MyPAIVec[i].size()==3)
{
if(m_MyPAIVec[i][0]==2&&m_MyPAIVec[i][1]==5&&m_MyPAIVec[i][2]==8)
{
bIs7XBK[0]=true;
bIs7XBK[3]=true;
bIs7XBK[6]=true;
}
}
else if(m_MyPAIVec[2].size()==2)
{
if(m_MyPAIVec[i][0]==3&&m_MyPAIVec[i][1]==6)
{
bIs7XBK[1]=true;
bIs7XBK[4]=true;
}
else if(m_MyPAIVec[i][0]==4&&m_MyPAIVec[i][1]==7)
{
bIs7XBK[2]=true;
bIs7XBK[5]=true;
}
}
else
{
return false;
}
}
t_Result = true;
for(UINT i = 0 ; i < 14 ; i++ )
{
if(bIs7XBK[i]==false)t_Result=false;
}
if(t_Result)return true;

for(UINT i = 2 ; i <= 4 ; i++)
{
if(m_MyPAIVec[i].size()==3)
{
if(m_MyPAIVec[i][0]==3&&m_MyPAIVec[i][1]==6&&m_MyPAIVec[i][2]==9)
{
bIs7XBK[0]=true;
bIs7XBK[3]=true;
bIs7XBK[6]=true;
}
}
else if(m_MyPAIVec[2].size()==2)
{
if(m_MyPAIVec[i][0]==4&&m_MyPAIVec[i][1]==7)
{
bIs7XBK[1]=true;
bIs7XBK[4]=true;
}
else if(m_MyPAIVec[i][0]==5&&m_MyPAIVec[i][1]==8)
{
bIs7XBK[2]=true;
bIs7XBK[5]=true;
}
}
else
{
return false;
}
}

t_Result = true;
for(UINT i = 0 ; i < 14 ; i++ )
{
if(bIs7XBK[i]==false)t_Result=false;
}
if(t_Result)return true;

return false;
}
//检测是否全双刻
bool CMJ::CheckQSK_HU()
{
//万,条,饼
for(UINT i = 2 ; i <= 4 ; i++)
{
int iType = i;
if(m_GangPAIVec[iType].size()==16)
{
if(m_GangPAIVec[iType][0]==2&&m_GangPAIVec[iType][4]==4&&m_GangPAIVec[iType][8]==6&&m_GangPAIVec[iType][12]==8)
{
return CheckHU();
}
}
}
return false;
}
//清一色
bool CMJ::CheckQ1S_HU()
{

if(m_MyPAIVec[0].empty()==false)return false;
if(m_MyPAIVec[1].empty()==false)return false;
if(m_ChiPAIVec[0].empty()==false)return false;
if(m_ChiPAIVec[1].empty()==false)return false;
if(m_PengPAIVec[0].empty()==false)return false;
if(m_PengPAIVec[1].empty()==false)return false;
if(m_GangPAIVec[0].empty()==false)return false;
if(m_GangPAIVec[1].empty()==false)return false;
//清万
if(m_MyPAIVec[2].empty()==false)
{
if(m_MyPAIVec[3].empty()==false)return false;
if(m_MyPAIVec[4].empty()==false)return false;
if(m_ChiPAIVec[3].empty()==false)return false;
if(m_ChiPAIVec[4].empty()==false)return false;
if(m_PengPAIVec[3].empty()==false)return false;
if(m_PengPAIVec[4].empty()==false)return false;
if(m_GangPAIVec[3].empty()==false)return false;
if(m_GangPAIVec[4].empty()==false)return false;
return CheckHU();
}
//清条
if(m_MyPAIVec[3].empty()==false)
{
if(m_MyPAIVec[2].empty()==false)return false;
if(m_MyPAIVec[4].empty()==false)return false;
if(m_ChiPAIVec[2].empty()==false)return false;
if(m_ChiPAIVec[4].empty()==false)return false;
if(m_PengPAIVec[2].empty()==false)return false;
if(m_PengPAIVec[4].empty()==false)return false;
if(m_GangPAIVec[2].empty()==false)return false;
if(m_GangPAIVec[4].empty()==false)return false;
return CheckHU();
}
//清饼
if(m_MyPAIVec[4].empty()==false)
{
if(m_MyPAIVec[2].empty()==false)return false;
if(m_MyPAIVec[3].empty()==false)return false;
if(m_ChiPAIVec[2].empty()==false)return false;
if(m_ChiPAIVec[3].empty()==false)return false;
if(m_PengPAIVec[2].empty()==false)return false;
if(m_PengPAIVec[3].empty()==false)return false;
if(m_GangPAIVec[2].empty()==false)return false;
if(m_GangPAIVec[3].empty()==false)return false;
return CheckHU();
}
return false;
}
//检测是否一色三同顺
bool CMJ::Check1S3TS_HU()
{
//万条饼
for(UINT i = 2 ; i <= 4 ; i++ )
{
int iType = i;
//吃过的顺
int iSize1 = m_ChiPAIVec[iType].size();
//剩余牌墙中的顺
int iSize2 = m_MyPAIVec[iType].size();
if(iSize1 + iSize2 >= 9)
{
//无吃的顺
if(iSize1==0)
{
if(iSize2==9)
{
//三连高压
if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8]))
{
return CheckHU();
}
return false;
}
if(iSize2==11)
{
//三连高压
if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&CheckAAPai(m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))
{
return true;
}
//三连高压
if(CheckAAABBBCCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10])&&CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1]))
{
return true;
}
return false;
}
if(iSize2==12)
{
//三连高压
if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&Check3Pai(m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11]))
{
return CheckHU();
}
//三连高压
if(CheckAAABBBCCCPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11])&&Check3Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))
{
return CheckHU();
}
return false;
}
if(iSize2==14)
{
//三连顺(前)
if(CheckAAABBBCCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&Check5Pai(m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11],m_MyPAIVec[iType][12],m_MyPAIVec[iType][13]))
{
return true;
}
//三连顺(中)
if(CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1])&&CheckAAABBBCCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10])&&Check3Pai(m_MyPAIVec[iType][11],m_MyPAIVec[iType][12],m_MyPAIVec[iType][13]))
{
return true;
}
//三连顺(中)
if(Check3Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2])&&CheckAAABBBCCCPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11])&&CheckAAPai(m_MyPAIVec[iType][12],m_MyPAIVec[iType][13]))
{
return true;
}
//三连顺(后)
if(CheckAAABBBCCCPai(m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10],m_MyPAIVec[iType][11],m_MyPAIVec[iType][12],m_MyPAIVec[iType][13])&&Check5Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4]))
{
return true;
}
return false;
}
}
//吃到一个顺
if(iSize1==3)
{
if(iSize2==6)
{
//三连对
if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])
{
return CheckHU();
}
}
}
if(iSize2==8)
{
//三连对(前)
if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5])&&CheckAAPai(m_MyPAIVec[iType][6],m_MyPAIVec[iType][7]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])
{
return true;
}
}
//三连对(后)
if(CheckAABBCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7])&&CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])
{
return true;
}
}
}
if(iSize2==9)
{
//三连对(前)
if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5])&&Check3Pai(m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])
{
return CheckHU();
}
}
//三连对(后)
if(CheckAABBCCPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&Check3Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][7])
{
return CheckHU();
}
}
}
if(iSize2==11)
{
//三连对(前)
if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5])&&Check5Pai(m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])
{
return true;
}
}
//三连对(中)
if(CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1])&&CheckAABBCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7])&&Check3Pai(m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])
{
return true;
}
}
//三连对(中)
if(Check3Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2])&&CheckAABBCCPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8])&&CheckAAPai(m_MyPAIVec[iType][9],m_MyPAIVec[iType][10]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][7])
{
return true;
}
}
//三连对(前)
if(CheckAABBCCPai(m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7],m_MyPAIVec[iType][8],m_MyPAIVec[iType][9],m_MyPAIVec[iType][10])&&Check5Pai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][7]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][9])
{
return true;
}
}
}
}
//吃到二个顺
if(iSize1==6)
{
if(iSize2==3)
{
//顺子
if(CheckABCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])
{
if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][2])
{
return CheckHU();
}
}
}
}
if(iSize2==5)
{
//顺子(前)
if(CheckABCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2])&&CheckAAPai(m_MyPAIVec[iType][3],m_MyPAIVec[iType][4]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][2])
{
if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][2])
{
return true;
}
}
}
//顺子(后)
if(CheckABCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4])&&CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])
{
if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][4])
{
return true;
}
}
}
}
if(iSize2==6)
{
//三连对
if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])
{
if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][5])
{
return CheckHU();
}
}
}
}
if(iSize2==8)
{
//三连对(前)
if(CheckAABBCCPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1],m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5])&&CheckAAPai(m_MyPAIVec[iType][6],m_MyPAIVec[iType][7]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][0]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][4])
{
if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][1]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][5])
{
return true;
}
}
}
//三连对(后)
if(CheckAABBCCPai(m_MyPAIVec[iType][2],m_MyPAIVec[iType][3],m_MyPAIVec[iType][4],m_MyPAIVec[iType][5],m_MyPAIVec[iType][6],m_MyPAIVec[iType][7])&&CheckAAPai(m_MyPAIVec[iType][0],m_MyPAIVec[iType][1]))
{
if(m_ChiPAIVec[iType][0]==m_MyPAIVec[iType][2]&&m_ChiPAIVec[iType][1]==m_MyPAIVec[iType][4]&&m_ChiPAIVec[iType][2]==m_MyPAIVec[iType][6])
{
if(m_ChiPAIVec[iType][3]==m_MyPAIVec[iType][3]&&m_ChiPAIVec[iType][4]==m_MyPAIVec[iType][5]&&m_ChiPAIVec[iType][5]==m_MyPAIVec[iType][7])
{
return true;
}
}
}
}
}
//吃到三个顺
if(iSize1==9)
{
if((m_ChiPAIVec[2][0]==m_ChiPAIVec[iType][3])&&(m_ChiPAIVec[iType][3]==m_ChiPAIVec[iType][6]))
{
return CheckHU();
}
}
}
}
return false;
}
//检测是否一色三节高
bool CMJ::Check1S3JG_HU()
{
//万,条,饼
for(UINT i = 2 ; i <= 4 ; i++)
{
int iType = i;
if(m_GangPAIVec[iType].size()==12)
{
if((m_GangPAIVec[iType][0]==m_GangPAIVec[iType][4]-1)&&(m_GangPAIVec[iType][4]==m_GangPAIVec[iType][8]-1))
{
return CheckHU();
}
}
}
return false;
}
//检测是否全大
bool CMJ::CheckQD_HU()
{
//剑牌,风牌
if(m_MyPAIVec[0].empty()==false)return false;
if(m_MyPAIVec[1].empty()==false)return false;
if(m_ChiPAIVec[0].empty()==false)return false;
if(m_ChiPAIVec[1].empty()==false)return false;
if(m_PengPAIVec[0].empty()==false)return false;
if(m_PengPAIVec[1].empty()==false)return false;
if(m_GangPAIVec[0].empty()==false)return false;
if(m_GangPAIVec[1].empty()==false)return false;

//万,条,饼
for(UINT i = 2 ; i <= 4 ; i++ )
{
if(m_MyPAIVec[i].empty()==false)
{
//剩余牌墙
int iSize = m_MyPAIVec[i].size();
for( UINT j = 0 ; j < iSize ; j++ )
{
if(m_MyPAIVec[i][j]<7)return false;
}
//吃
iSize = m_ChiPAIVec[i].size();
for( UINT j = 0 ; j < iSize ; j++ )
{
if(m_ChiPAIVec[i][j]<7)return false;
}
//碰
iSize = m_PengPAIVec[i].size();
for( UINT j = 0 ; j < iSize ; j++ )
{
if(m_PengPAIVec[i][j]<7)return false;
}
//杠
iSize = m_GangPAIVec[i].size();
for( UINT j = 0 ; j < iSize ; j++ )
{
if(m_GangPAIVec[i][j]<7)return false;
}
}
}
return CheckHU();
}

//检测是否全中
bool CMJ::CheckQZ_HU()
{
//剑牌,风牌
if(m_MyPAIVec[0].empty()==false)return false;
if(m_MyPAIVec[1].empty()==false)return false;
if(m_ChiPAIVec[0].empty()==false)return false;
if(m_ChiPAIVec[1].empty()==false)return false;
if(m_PengPAIVec[0].empty()==false)return false;
if(m_PengPAIVec[1].empty()==false)return false;
if(m_GangPAIVec[0].empty()==false)return false;
if(m_GangPAIVec[1].empty()==false)return false;

//万,条,饼
for(UINT i = 2 ; i <= 4 ; i++ )
{
if(m_MyPAIVec[i].empty()==false)
{
//剩余牌墙
int iSize = m_MyPAIVec[i].size();
for( UINT j = 0 ; j < iSize ; j++ )
{
if(m_MyPAIVec[i][j]<4)return false;
if(m_MyPAIVec[i][j]>6)return false;
}
//吃
iSize = m_ChiPAIVec[i].size();
for( UINT j = 0 ; j < iSize ; j++ )
{
if(m_ChiPAIVec[i][j]<4)return false;
if(m_ChiPAIVec[i][j]>6)return false;
}
//碰
iSize = m_PengPAIVec[i].size();
for( UINT j = 0 ; j < iSize ; j++ )
{
if(m_PengPAIVec[i][j]<4)return false;
if(m_PengPAIVec[i][j]>6)return false;
}
//杠
iSize = m_GangPAIVec[i].size();
for( UINT j = 0 ; j < iSize ; j++ )
{
if(m_GangPAIVec[i][j]<4)return false;
if(m_GangPAIVec[i][j]>6)return false;
}
}
}
return CheckHU();
}

//检测是否全小
bool CMJ::CheckQX_HU()
{
//剑牌,风牌
if(m_MyPAIVec[0].empty()==false)return false;
if(m_MyPAIVec[1].empty()==false)return false;
if(m_ChiPAIVec[0].empty()==false)return false;
if(m_ChiPAIVec[1].empty()==false)return false;
if(m_PengPAIVec[0].empty()==false)return false;
if(m_PengPAIVec[1].empty()==false)return false;
if(m_GangPAIVec[0].empty()==false)return false;
if(m_GangPAIVec[1].empty()==false)return false;

//万,条,饼
for(UINT i = 2 ; i <= 4 ; i++ )
{
if(m_MyPAIVec[i].empty()==false)
{
//剩余牌墙
int iSize = m_MyPAIVec[i].size();
for( UINT j = 0 ; j < iSize ; j++ )
{
if(m_MyPAIVec[i][j]>3)return false;
}
//吃
iSize = m_ChiPAIVec[i].size();
for( UINT j = 0 ; j < iSize ; j++ )
{
if(m_ChiPAIVec[i][j]>3)return false;
}
//碰
iSize = m_PengPAIVec[i].size();
for( UINT j = 0 ; j < iSize ; j++ )
{
if(m_PengPAIVec[i][j]>3)return false;
}
//杠
iSize = m_GangPAIVec[i].size();
for( UINT j = 0 ; j < iSize ; j++ )
{
if(m_GangPAIVec[i][j]>3)return false;
}
}
}
return CheckHU();
}
//检测是否青龙
bool CMJ::CheckQL_HU()
{
//花色
int iColorNum = 0;
//万,条,饼
for(UINT i = 2 ; i <= 4 ; i++ )
{
if(m_MyPAIVec[i].empty()==false)
{
iColorNum++;

if(m_MyPAIVec[i].size()==9)
{
for(UINT j = 0 ;j < 9 ;j++)
{
if(m_MyPAIVec[i][j] != j)return false;
}
}
}
}
if(iColorNum==1)return CheckHU();
return false;
}
//检测是否三色双龙会
bool CMJ::Check3S2LH_HU()
{
//五万为双龙
if(m_MyPAIVec[2].size()==2)
{
//双龙
if(m_MyPAIVec[2][0]==5&&m_MyPAIVec[2][1]==5)
{
//老少副
if(m_MyPAIVec[3].size()==6&&m_MyPAIVec[4].size()==6)
{
if(m_MyPAIVec[3][0]==1&&m_MyPAIVec[3][1]==2&&m_MyPAIVec[3][2]==3&&m_MyPAIVec[3][3]==7&&m_MyPAIVec[3][4]==8&&m_MyPAIVec[3][5]==9)
{
if(m_MyPAIVec[4][0]==1&&m_MyPAIVec[4][1]==2&&m_MyPAIVec[4][2]==3&&m_MyPAIVec[4][3]==7&&m_MyPAIVec[4][4]==8&&m_MyPAIVec[4][5]==9)
{
return true;
}
}
}
}
}

//五条为双龙
if(m_MyPAIVec[3].size()==2)
{
//双龙
if(m_MyPAIVec[3][0]==5&&m_MyPAIVec[3][1]==5)
{
//老少副
if(m_MyPAIVec[2].size()==6&&m_MyPAIVec[4].size()==6)
{
if(m_MyPAIVec[2][0]==1&&m_MyPAIVec[2][1]==2&&m_MyPAIVec[2][2]==3&&m_MyPAIVec[2][3]==7&&m_MyPAIVec[2][4]==8&&m_MyPAIVec[2][5]==9)
{
if(m_MyPAIVec[4][0]==1&&m_MyPAIVec[4][1]==2&&m_MyPAIVec[4][2]==3&&m_MyPAIVec[4][3]==7&&m_MyPAIVec[4][4]==8&&m_MyPAIVec[4][5]==9)
{
return true;
}
}
}
}
}

//五饼为双龙
if(m_MyPAIVec[4].size()==2)
{
//双龙
if(m_MyPAIVec[4][0]==5&&m_MyPAIVec[4][1]==5)
{
//老少副
if(m_MyPAIVec[2].size()==6&&m_MyPAIVec[3].size()==6)
{
if(m_MyPAIVec[2][0]==1&&m_MyPAIVec[2][1]==2&&m_MyPAIVec[2][2]==3&&m_MyPAIVec[2][3]==7&&m_MyPAIVec[2][4]==8&&m_MyPAIVec[2][5]==9)
{
if(m_MyPAIVec[3][0]==1&&m_MyPAIVec[3][1]==2&&m_MyPAIVec[3][2]==3&&m_MyPAIVec[3][3]==7&&m_MyPAIVec[3][4]==8&&m_MyPAIVec[3][5]==9)
{
return true;
}
}
}
}
}
return false;
}

//检测是否一色三步高
bool CMJ::Check1S3BG_HU()
{
return false;
}
//全带五
bool CMJ::CheckQD5_HU()
{
//剑牌,风牌
if(m_MyPAIVec[0].empty()==false)return false;
if(m_MyPAIVec[1].empty()==false)return false;
if(m_ChiPAIVec[0].empty()==false)return false;
if(m_ChiPAIVec[1].empty()==false)return false;
if(m_PengPAIVec[0].empty()==false)return false;
if(m_PengPAIVec[1].empty()==false)return false;
if(m_GangPAIVec[0].empty()==false)return false;
if(m_GangPAIVec[1].empty()==false)return false;
return false;
}
//三同刻
bool CMJ::Check3TK_HU()
{
/*if(m_GangPAIVec[2].size()==4)
{
//万,条,饼
for(UINT i = 3 ; i <= 4 ; i++ )
{
if(m_GangPAIVec[i].size()==4)
{
if(m_GangPAIVec[2][0]!=m_GangPAIVec[i][0])
{
return false;
}
}
}
}*/
return false;

}
//三暗刻
bool CMJ::Check3AK_HU()
{
return false;
}
//单钓将
bool CMJ::CheckDDJ_HU()
{
int count = 0;
for(UINT i = 0 ; i < 6 ; i++ )
{
count += m_MyPAIVec[i].size();
}
if(count==2)
{
if(m_MyPAIVec[m_LastPAI.m_Type].size()==2)
{
if(m_MyPAIVec[m_LastPAI.m_Type][0]==m_MyPAIVec[m_LastPAI.m_Type][1])return true;
}
}
return false;
}
//检测是否听十三幺
bool CMJ::Check13Y_TING()
{
bool i13YSize[13] ;
for(UINT i = 0 ; i < 13 ; i++ )
{
i13YSize[i]=false;
}
//中发白
vector<int>::iterator Iter;
for(Iter = m_MyPAIVec[0].begin();Iter != m_MyPAIVec[0].end(); Iter++ )
{
if((*Iter)==1)
{
i13YSize[0]=true;
}
if((*Iter)==2)
{
i13YSize[1]=true;
}
if((*Iter)==3)
{
i13YSize[2]=true;
}
}
//东南西北风
for(Iter = m_MyPAIVec[1].begin();Iter != m_MyPAIVec[1].end(); Iter++ )
{
if((*Iter)==1)
{
i13YSize[3]=true;
}
if((*Iter)==2)
{
i13YSize[4]=true;
}
if((*Iter)==3)
{
i13YSize[5]=true;
}
if((*Iter)==4)
{
i13YSize[6]=true;
}
}
//一九万
for(Iter = m_MyPAIVec[2].begin();Iter != m_MyPAIVec[2].end(); Iter++ )
{
if((*Iter)==1)
{
i13YSize[7]=true;
}
if((*Iter)==9)
{
i13YSize[8]=true;
}
}

//一九条
for(Iter = m_MyPAIVec[3].begin();Iter != m_MyPAIVec[3].end(); Iter++ )
{
if((*Iter)==1)
{
i13YSize[9]=true;
}
if((*Iter)==9)
{
i13YSize[10]=true;
}
}

//一九饼
for(Iter = m_MyPAIVec[4].begin();Iter != m_MyPAIVec[4].end(); Iter++ )
{
if((*Iter)==1)
{
i13YSize[11]=true;
}
if((*Iter)==9)
{
i13YSize[12]=true;
}
}
int icount = 0;
for(UINT i = 0 ; i < 13 ; i++ )
{
if(i13YSize[i]==true)
{
icount++;
}
}
if(icount >=12)return true;
return false;
}
//检测是否听四暗刻
bool CMJ::Check4AK_TING()
{
if(m_AKNum==4)return true;
return false;
}
//检测胡
bool CMJ::CheckHU()
{
bool t_Ok = false;
int iJiangNum = 0;

int iSize = m_MyPAIVec[0].size();
if(iSize>0)
{
//中发白
if(iSize==2)
{
if(!CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==3)
{
if(!CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2]))
{
return false;
}
}
else if(iSize==5)
{
if(CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1])&&CheckAAAPai(m_MyPAIVec[0][2],m_MyPAIVec[0][3],m_MyPAIVec[0][4]))
{
iJiangNum++ ;
}
else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4]))
{
iJiangNum++ ;
}
else
{
return false;
}
}
else if(iSize==8)
{
if(CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1])&&CheckAAAPai(m_MyPAIVec[0][2],m_MyPAIVec[0][3],m_MyPAIVec[0][4])&&CheckAAAPai(m_MyPAIVec[0][5],m_MyPAIVec[0][6],m_MyPAIVec[0][7]))
{
iJiangNum++ ;
}
else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4])&&CheckAAAPai(m_MyPAIVec[0][5],m_MyPAIVec[0][6],m_MyPAIVec[0][7]))
{
iJiangNum++ ;
}
else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4],m_MyPAIVec[0][5])&&CheckAAPai(m_MyPAIVec[0][6],m_MyPAIVec[0][7]))
{
iJiangNum++ ;
}
else
{
return false;
}
}
else if(iSize==11)
{
if(CheckAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1])&&CheckAAAPai(m_MyPAIVec[0][2],m_MyPAIVec[0][3],m_MyPAIVec[0][4])&&CheckAAAPai(m_MyPAIVec[0][5],m_MyPAIVec[0][6],m_MyPAIVec[0][7])&&CheckAAAPai(m_MyPAIVec[0][8],m_MyPAIVec[0][9],m_MyPAIVec[0][10]))
{
iJiangNum++ ;
}
else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4])&&CheckAAAPai(m_MyPAIVec[0][5],m_MyPAIVec[0][6],m_MyPAIVec[0][7])&&CheckAAAPai(m_MyPAIVec[0][8],m_MyPAIVec[0][9],m_MyPAIVec[0][10]))
{
iJiangNum++ ;
}
else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4],m_MyPAIVec[0][5])&&CheckAAPai(m_MyPAIVec[0][6],m_MyPAIVec[0][7])&&CheckAAAPai(m_MyPAIVec[0][8],m_MyPAIVec[0][9],m_MyPAIVec[0][10]))
{
iJiangNum++ ;
}
else if(CheckAAAPai(m_MyPAIVec[0][0],m_MyPAIVec[0][1],m_MyPAIVec[0][2])&&CheckAAAPai(m_MyPAIVec[0][3],m_MyPAIVec[0][4],m_MyPAIVec[0][5])&&CheckAAAPai(m_MyPAIVec[0][6],m_MyPAIVec[0][7],m_MyPAIVec[0][8])&&CheckAAPai(m_MyPAIVec[0][9],m_MyPAIVec[0][10]))
{
iJiangNum++ ;
}
else
{
return false;
}
}
else
{
return false;
}

}
//东南西北
iSize = m_MyPAIVec[1].size();
if(iSize>0)
{
if(iSize==2)
{
if(!CheckAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==3)
{
if(!CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2]))
{
return false;
}
}
else if(iSize==5)
{
if(CheckAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1])&&CheckAAAPai(m_MyPAIVec[1][2],m_MyPAIVec[1][3],m_MyPAIVec[1][4]))
{
iJiangNum++ ;
}
else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4]))
{
iJiangNum++ ;
}
else
{
return false;
}
}
else if(iSize==8)
{
if(CheckAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1])&&CheckAAAPai(m_MyPAIVec[1][2],m_MyPAIVec[1][3],m_MyPAIVec[1][4])&&CheckAAAPai(m_MyPAIVec[1][5],m_MyPAIVec[1][6],m_MyPAIVec[1][7]))
{
iJiangNum++ ;
}
else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4])&&CheckAAAPai(m_MyPAIVec[1][5],m_MyPAIVec[1][6],m_MyPAIVec[1][7]))
{
iJiangNum++ ;
}
else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4],m_MyPAIVec[1][5])&&CheckAAPai(m_MyPAIVec[1][6],m_MyPAIVec[1][7]))
{
iJiangNum++ ;
}
else
{
return false;
}
}
else if(iSize==11)
{
if(CheckAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1])&&CheckAAAPai(m_MyPAIVec[1][2],m_MyPAIVec[1][3],m_MyPAIVec[1][4])&&CheckAAAPai(m_MyPAIVec[1][5],m_MyPAIVec[1][6],m_MyPAIVec[1][7])&&CheckAAAPai(m_MyPAIVec[1][8],m_MyPAIVec[1][9],m_MyPAIVec[1][10]))
{
iJiangNum++ ;
}
else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4])&&CheckAAAPai(m_MyPAIVec[1][5],m_MyPAIVec[1][6],m_MyPAIVec[1][7])&&CheckAAAPai(m_MyPAIVec[1][8],m_MyPAIVec[1][9],m_MyPAIVec[1][10]))
{
iJiangNum++ ;
}
else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4],m_MyPAIVec[1][5])&&CheckAAPai(m_MyPAIVec[1][6],m_MyPAIVec[1][7])&&CheckAAAPai(m_MyPAIVec[1][8],m_MyPAIVec[1][9],m_MyPAIVec[1][10]))
{
iJiangNum++ ;
}
else if(CheckAAAPai(m_MyPAIVec[1][0],m_MyPAIVec[1][1],m_MyPAIVec[1][2])&&CheckAAAPai(m_MyPAIVec[1][3],m_MyPAIVec[1][4],m_MyPAIVec[1][5])&&CheckAAAPai(m_MyPAIVec[1][6],m_MyPAIVec[1][7],m_MyPAIVec[1][8])&&CheckAAPai(m_MyPAIVec[1][9],m_MyPAIVec[1][10]))
{
iJiangNum++ ;
}
else
{
return false;
}
}
else
{
return false;
}
}
//万
iSize = m_MyPAIVec[2].size();
if(iSize>0)
{
if(iSize==2)
{
if(!CheckAAPai(m_MyPAIVec[2][0],m_MyPAIVec[2][1]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==3)
{
if(!CheckAAAPai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2]))
{
if(!CheckABCPai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2]))
{
return false;
}
}
}
else if(iSize==5)
{
if(!Check5Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==6)
{
if(!Check6Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5]))
{
return false;
}
}
else if(iSize==8)
{
if(!Check8Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==9)
{
if(!Check9Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7],m_MyPAIVec[2][8]))
{
return false;
}
}
else if(iSize==11)
{
if(!Check11Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7],m_MyPAIVec[2][8],m_MyPAIVec[2][9],m_MyPAIVec[2][10]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==12)
{
if(!Check12Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7],m_MyPAIVec[2][8],m_MyPAIVec[2][9],m_MyPAIVec[2][10],m_MyPAIVec[2][11]))
{
return false;
}
}
else if(iSize==14)
{
if(!Check14Pai(m_MyPAIVec[2][0],m_MyPAIVec[2][1],m_MyPAIVec[2][2],m_MyPAIVec[2][3],m_MyPAIVec[2][4],m_MyPAIVec[2][5],m_MyPAIVec[2][6],m_MyPAIVec[2][7],m_MyPAIVec[2][8],m_MyPAIVec[2][9],m_MyPAIVec[2][10],m_MyPAIVec[2][11],m_MyPAIVec[2][12],m_MyPAIVec[2][13]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else
{
return false;
}
}

//条
iSize = m_MyPAIVec[3].size();
if(iSize>0)
{
if(iSize==2)
{
if(!CheckAAPai(m_MyPAIVec[3][0],m_MyPAIVec[3][1]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==3)
{
if(!CheckAAAPai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2]))
{
if(!CheckABCPai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2]))
{
return false;
}
}
}
else if(iSize==5)
{
if(!Check5Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==6)
{
if(!Check6Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5]))
{
return false;
}
}
else if(iSize==8)
{
if(!Check8Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==9)
{
if(!Check9Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8]))
{
return false;
}
}
else if(iSize==11)
{
if(!Check11Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8],m_MyPAIVec[3][9],m_MyPAIVec[3][10]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==12)
{
if(!Check12Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8],m_MyPAIVec[3][9],m_MyPAIVec[3][10],m_MyPAIVec[3][11]))
{
return false;
}
}
else if(iSize==14)
{
if(!Check14Pai(m_MyPAIVec[3][0],m_MyPAIVec[3][1],m_MyPAIVec[3][2],m_MyPAIVec[3][3],m_MyPAIVec[3][4],m_MyPAIVec[3][5],m_MyPAIVec[3][6],m_MyPAIVec[3][7],m_MyPAIVec[3][8],m_MyPAIVec[3][9],m_MyPAIVec[3][10],m_MyPAIVec[3][11],m_MyPAIVec[3][12],m_MyPAIVec[3][13]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else
{
return false;
}

}

//饼
iSize = m_MyPAIVec[4].size();
if(iSize>0)
{
if(iSize==2)
{
if(!CheckAAPai(m_MyPAIVec[4][0],m_MyPAIVec[4][1]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==3)
{
if(!CheckAAAPai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2]))
{
if(!CheckABCPai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2]))
{
return false;
}
}
}
else if(iSize==5)
{
if(!Check5Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==6)
{
if(!Check6Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5]))
{
return false;
}
}
else if(iSize==8)
{
if(!Check8Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==9)
{
if(!Check9Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7],m_MyPAIVec[4][8]))
{
return false;
}
}
else if(iSize==11)
{
if(!Check11Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7],m_MyPAIVec[4][8],m_MyPAIVec[4][9],m_MyPAIVec[4][10]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else if(iSize==12)
{
if(!Check12Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7],m_MyPAIVec[4][8],m_MyPAIVec[4][9],m_MyPAIVec[4][10],m_MyPAIVec[4][11]))
{
return false;
}
}
else if(iSize==14)
{
if(!Check14Pai(m_MyPAIVec[4][0],m_MyPAIVec[4][1],m_MyPAIVec[4][2],m_MyPAIVec[4][3],m_MyPAIVec[4][4],m_MyPAIVec[4][5],m_MyPAIVec[4][6],m_MyPAIVec[4][7],m_MyPAIVec[4][8],m_MyPAIVec[4][9],m_MyPAIVec[4][10],m_MyPAIVec[4][11],m_MyPAIVec[4][12],m_MyPAIVec[4][13]))
{
return false;
}
else
{
iJiangNum++ ;
}
}
else
{
return false;
}
}

if(iJiangNum==1)return true;
return false;
}
//检测听
bool CMJ::CheckTING()
{
//剑牌
for(UINT j = 0 ; j < 9 ;j++ )
{
//起牌
AddPai(0,j+1);
if(CheckAllPai(MJPAI_GETPAI))
{
int iPaiIndex = GetPaiIndex(0,j+1);
DelPai(iPaiIndex);
return true;
}
else
{
int iPaiIndex = GetPaiIndex(0,j+1);
DelPai(iPaiIndex);
}
}
//风牌
for(UINT j = 0 ; j < 9 ;j++ )
{
//起牌
AddPai(1,j+1);
if(CheckAllPai(MJPAI_GETPAI))
{
int iPaiIndex = GetPaiIndex(1,j+1);
DelPai(iPaiIndex);
return true;
}
else
{
int iPaiIndex = GetPaiIndex(1,j+1);
DelPai(iPaiIndex);
}
}
for(UINT i = 2 ; i < 5 ;i++ )
{
for(UINT j = 0 ; j < 9 ;j++ )
{
//起牌
AddPai(i,j+1);
if(CheckAllPai(MJPAI_GETPAI))
{
int iPaiIndex = GetPaiIndex(i,j+1);
DelPai(iPaiIndex);
return true;
}
else
{
int iPaiIndex = GetPaiIndex(i,j+1);
DelPai(iPaiIndex);
}
}
}
return false;
}

 

   怎么样,代码写的还算清晰吧。喝口水,休息一下,再看一下CMJManage类的实现:

#ifndef _CMJMANAGE_H
#define _CMJMANAGE_H
#include "CMJ.h"
//剩余牌墙信息
//扩展
struct stPAIEx
{
stPAI m_NewPai; //起的新牌
int m_PaiNum; //剩余牌数
bool m_IsHZ; //是否黄庄
}
;

//麻将管理器
class CMJManage
{
vector<stPAI> m_MJVec; //麻将数据VEC
int m_HZPaiNum; //黄庄的牌数
public:

//构造函数
CMJManage();
//析构函数
~CMJManage();
//初始化牌
void InitPai(int p_HZPaiNum = 0);
//起牌
stPAIEx GetAPai();
private:
//洗牌
void XiPai();
}
;

#endif

对应CPP:

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




”红孩儿的游戏开发之路“,欢迎关注公众号!

    

麻将游戏算法深入解析_ico_02

      随时等你哟~

                         

麻将游戏算法深入解析_麻将算法_03