麻将游戏算法深入解析

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

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

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



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


 

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

 

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

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



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

 

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

 

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

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

 

     我们先来看一下CMJ类。

CMJ.h:


#ifndef _CMJ_H
#define _CMJ_H
//============================================
//Author:Honghaier
//Date:2006-12-20
//QQ:285421210
//============================================
#include <windows.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;


#define	MJPAI_ZFB				0	//中,发,白
#define MJPAI_FENG				1	//东西南北风
#define MJPAI_WAN				2	//万
#define MJPAI_TIAO				3	//条
#define MJPAI_BING				4	//饼
#define MJPAI_HUA				5	//花

#define MJPAI_GETPAI			true	//起牌
#define MJPAI_PUTPAI			false	//打牌
//节点信息
struct stPAI
{
	int		m_Type;				//牌类型
	int		m_Value;			//牌字

}
;

//吃牌顺
struct stCHI					
{
	int		m_Type;				//牌类型
	int		m_Value1;			//牌字
	int		m_Value2;			//牌字
	int		m_Value3;			//牌字
}
;
//	m_Type		m_Value
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//
//	0		|	中	1	发2	白											  
//			|
//	1		|	东 1	西2	南	  北									 
//			|
//	2		|	一万  二万	……	九万
//			|
//	3		|	一条	二条	……	九条					
//			|
//	4		|	一饼	二饼	……	九饼
//			|
//	5		|	春		夏		秋		东		竹		兰		梅		菊
//			|
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//



//胡牌信息
struct stGoodInfo
{
	char	m_GoodName[100];			//胡牌术语
	int		m_GoodValue;				//胡牌番数
}
;
//牌
class CMJ
{
	vector<	int >		m_MyPAIVec[6];		//起的种牌型
	vector<	int >		m_ChiPAIVec[6];		//吃的种牌型
	vector<	int >		m_PengPAIVec[6];	//碰的种牌型
	vector<	int >		m_GangPAIVec[6];	//杠的种牌型

	stPAI				m_LastPAI;			//最后起的牌
	stGoodInfo			m_GoodInfo;			//胡牌信息

	bool				m_9LBD;				//是否听连宝灯牌型
	bool				m_13Y;				//是否听十三幺
	int					m_MKNum;			//明刻数
	int					m_AKNum;			//暗刻数
	bool				m_4AK;				//是否是听四暗刻

	vector<	stCHI >		m_TempChiPAIVec;	//吃的可选组合
	vector<	stPAI >		m_TempPengPAIVec;	//碰的可选组合
	vector<	stPAI >		m_TempGangPAIVec;	//杠的可选组合

public:

	//构造
	CMJ();
	//析构
	~CMJ();
	//初始化
	void			Init();
	//起牌
	bool			AddPai(int p_Type,int p_Value);
	//取得对应的牌在牌墙的索引
	int				GetPaiIndex(int p_Type,int p_Value);
	//打牌(参数为对应的牌在牌墙的索引)
	bool			DelPai(int PaiIndex);
	//删除牌
	bool			DelPai(int p_Type,int p_Value);
	//清空牌
	void			CleanUp();
	//取得胡牌信息
	stGoodInfo		*GetInfo();
	//检测是否胡牌
	bool			CheckAllPai(bool GetOrPut);
	//对所有的牌进行输出
	void			PrintAllPai();
	//对一张牌进行输出
	void			PrintPai(int p_Type,int p_Value);
	//吃牌
	bool			CheckChiPai(int p_Type,int p_Value);
	//吃牌
	bool			DoChiPai(int p_iIndex,int p_Type,int p_Value);
	//碰牌
	bool			CheckPengPai(int p_Type,int p_Value);
	//碰牌
	bool			DoPengPai(int p_Type,int p_Value);
	//杠牌
	bool			CheckGangPai(int p_Type,int p_Value);
	//杠牌
	bool			DoGangPai(int p_Type,int p_Value);
	//对可吃的组合进行输出
	void			PrintChiChosePai();
	//对可碰的组合进行输出
	void			PrintPengChosePai();
	//对可杠的组合进行输出
	void			PrintGangChosePai();
	//取得吃牌组合数
	UINT			GetChiChoseNum();

private:

	//检测是否胡牌(张)
	bool	CheckAAPai(int iValue1,int iValue2);
	//检测是否三连张
	bool	CheckABCPai(int iValue1,int iValue2,int iValu3);
	//检测是否三重张
	bool	CheckAAAPai(int iValue1,int iValue2,int iValu3);
	//检测是否四重张
	bool	CheckAAAAPai(int iValue1,int iValue2,int iValu3,int iValue4);
	//检测是否三连对
	bool	CheckAABBCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6);
	//检测是否三连高压
	bool	CheckAAABBBCCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9);
	//检测是否三连刻
	bool	CheckAAAABBBBCCCCPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12);
	//检测是否六连对
	bool	CheckAABBCCDDEEFFPai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12);
	//带将牌检测=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
	
	//检测是否胡牌(张)
	bool	Check5Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5);
	//检测是否胡牌(张)
	bool	Check8Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8);
	//检测是否胡牌(张)
	bool	Check11Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11);
	//检测是否胡牌(张)
	bool	Check14Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12,int iValue13,int iValue14);

	//不带将牌检测-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
	
	//检测是否胡牌(张)
	bool	Check3Pai(int iValue1,int iValue2,int iValue3);
	//检测是否胡牌(张)
	bool	Check6Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6);
	//检测是否胡牌(张)
	bool	Check9Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9);
	//检测是否胡牌(张)
	bool	Check12Pai(int iValue1,int iValue2,int iValue3,int iValue4,int iValue5,int iValue6,int iValue7,int iValue8,int iValue9,int iValue10,int iValue11,int iValue12);
	

private:	
	//胡牌判断

	//检测是否胡大四喜
	bool	CheckD4X_HU();
	//检则是否胡大三元
	bool	CheckD3Y_HU();
	//检测是否胡绿一色
	bool	CheckL1S_HU();
	//检测是否胡九莲宝灯
	bool	Check9LBD_HU();
	//检测是否胡四杠
	bool	Check4Gang_HU();
	//检测是否胡连七对
	bool	CheckL7D_HU();
	//检测是否胡十三幺
	bool	Chekc13Y_HU();
	//检测是否胡清幺九
	bool	CheckQY9_HU();
	//检测是否胡小四喜
	bool	CheckX4X_HU();
	//检测是否胡小三元
	bool	CheckX3Y_HU();
	//检测是否胡字一色
	bool	CheckZ1S_HU();
	//检测是否四暗刻
	bool	Check4AK_HU();
	//检测是否一色双龙会
	bool	Check1S2LH_HU();
	//检测是否一色四同顺
	bool	Check1S4TS_HU();
	//检测是否一色四节高?
	bool	Check1S4JG_HU();
	//检测是否一色四步高?
	bool	Check1S4BG_HU();
	//检测是否三杠
	bool	Check3Gang_HU();
	//检测是否混幺九
	bool	CheckHY9_HU();
	//检测是否七对
	bool	Check7D_HU();
	//检测是否七星不靠
	bool	Check7XBK_HU();
	//检测是否全双刻?
	bool	CheckQSK_HU();
	//清一色
	bool	CheckQ1S_HU();
	//检测是否一色三同顺
	bool	Check1S3TS_HU();
	//检测是否一色三节高
	bool	Check1S3JG_HU();
	//检测是否全大
	bool	CheckQD_HU();
	//检测是否全中
	bool	CheckQZ_HU();
	//检测是否全小
	bool	CheckQX_HU();
	//检测是否青龙
	bool	CheckQL_HU();
	//检测是否三色双龙会
	bool	Check3S2LH_HU();
	//检测是否一色三步高
	bool	Check1S3BG_HU();
	//全带五
	bool	CheckQD5_HU();
	//三同刻
	bool	Check3TK_HU();
	//三暗刻
	bool	Check3AK_HU();
	//单钓将
	bool	CheckDDJ_HU();
	//检测胡
	bool	CheckHU();
private:
	//听牌判断

	//检测是否听九莲宝灯
	bool	Check9LBD_TING();
	//检测是否听十三幺
	bool	Check13Y_TING();
	//检测是否听四暗刻
	bool	Check4AK_TING();
	//检测是否听牌
	bool	CheckTING();

}
;

#endif

其对应的CPP :


#include "CMJ.h"
//构造
CMJ::CMJ()
{
	m_9LBD  = false;
	m_13Y   = false;
	m_4AK	= false;
	m_AKNum = 0;
	m_MKNum = 0;
}

//析构
CMJ::~CMJ()
{

}
//初始化
void   CMJ::Init()
{
	m_9LBD  = false;
	m_13Y   = false;
	m_4AK	= false;
	m_AKNum = 0;
	m_MKNum = 0;
}
//加入新牌,并排序
bool	CMJ::AddPai(int p_Type,int p_Value)
{
	int iSize = m_MyPAIVec[p_Type].size();
	bool t_Find = false;
	vector<	int >::iterator Iter;
	for(Iter = m_MyPAIVec[p_Type].begin();Iter !=m_MyPAIVec[p_Type].end(); Iter++)
	{
		if((*Iter)>p_Value)
		{
			m_MyPAIVec[p_Type].insert(Iter,p_Value);
			t_Find = true;
			break;
		}
		
	}
	
	if(t_Find==false)
	{
		m_MyPAIVec[p_Type].push_back(p_Value);
	}
	m_LastPAI.m_Type	= p_Type;
	m_LastPAI.m_Value	= p_Value;

	return true;
}

//取得对应的牌在牌墙的索引
int	CMJ::GetPaiIndex(int p_Type,int p_Value)
{
	int count = 0;
	for(UINT i = 0 ; i < 6 ; i++ )
	{
		vector<	int >::iterator Iter;
		for(Iter = m_MyPAIVec[i].begin();Iter !=m_MyPAIVec[i].end(); Iter++)
		{
			if(p_Type==i&&(*Iter)==p_Value)
			{
				return count;
			}
			count++;
		}
	}
	return -1;
}
//打牌
bool	CMJ::DelPai(int PaiIndex)
{
	int count = 0;
	for(UINT i = 0 ; i < 6 ; i++ )
	{
		vector<	int >::iterator Iter;
		for(Iter = m_MyPAIVec[i].begin();Iter !=m_MyPAIVec[i].end(); Iter++)
		{
			if(count==PaiIndex)
			{
				m_MyPAIVec[i].erase(Iter);
				return true;
			}
			count++;
		}
	}
	return false;
}
//删除牌
bool	CMJ::DelPai(int p_Type,int p_Value)
{
	vector<	int >::iterator Iter;
	for(Iter = m_MyPAIVec[p_Type].begin();Iter !=m_MyPAIVec[p_Type].end(); Iter++)
	{
		if((*Iter)==p_Value)
		{
			m_MyPAIVec[p_Type].erase(Iter);
			return true;
		}
	}
	return false;
}
//清空牌
void	CMJ::CleanUp()
{
	for(UINT i = 0 ; i < 6 ; i++ )
	{
		m_MyPAIVec[i].clear();
		m_ChiPAIVec[i].clear();
		m_PengPAIVec[i].clear();
		m_GangPAIVec[i].clear();
	}
}
//取得胡牌信息
stGoodInfo		*CMJ::GetInfo()
{
	return &m_GoodInfo;
}

//对所有的牌进行函数调用
void	CMJ::PrintAllPai()
{
	cout<<" ";
	for(UINT i = 0 ; i < 13 ; i++ )
	{
		cout<<i<<"  - ";
	}
	cout<<endl;
	int icount = 0;
	//箭牌
	if(m_MyPAIVec[0].empty()==false)
	{
		vector<	int >::iterator Iter;
		for(Iter = m_MyPAIVec[0].begin();Iter !=m_MyPAIVec[0].end(); Iter++)
		{
			switch(*Iter)
			{
			case 1:
				cout<<"[ 中]";
				break;
			case 2:
				cout<<"[ 发]";
				break;
			case 3:
				cout<<"[ 白]";
				break;

			}
			icount++;
		}

	}
	cout<<endl;
	for(UINT i =0 ; i < icount; i++ )
	{
		cout<<"     ";
	}
	//风牌
	if(m_MyPAIVec[1].empty()==false)
	{
		vector<	int >::iterator Iter;
		for(Iter = m_MyPAIVec[1].begin();Iter !=m_MyPAIVec[1].end(); Iter++)
		{
			switch(*Iter)
			{
			case 1:
				cout<<"[ 东]";
				break;
			case 2:
				cout<<"[ 南]";
				break;
			case 3:
				cout<<"[ 西]";
				break;
			case 4:
				cout<<"[ 北]";
				break;
			}
			icount++;
		}
	}
	cout<<endl;
	for(UINT i =0 ; i < icount; i++ )
	{
		cout<<"     ";
	}
	//万
	if(m_MyPAIVec[2].empty()==false)
	{
		vector<	int >::iterator Iter;
		for(Iter = m_MyPAIVec[2].begin();Iter !=m_MyPAIVec[2].end(); Iter++)
		{
			cout<<"["<<(*Iter)<<"万]";
			icount++;
		}
	}
	cout<<endl;
	for(UINT i =0 ; i < icount; i++ )
	{
		cout<<"     ";
	}
	//条
	if(m_MyPAIVec[3].empty()==false)
	{
		vector<	int >::iterator Iter;
		for(Iter = m_MyPAIVec[3].begin();Iter !=m_MyPAIVec[3].end(); Iter++)
		{
			cout<<"["<<(*Iter)<<"条]";
			icount++;
		}
	}
	cout<<endl;
	for(UINT i =0 ; i < icount; i++ )
	{
		cout<<"     ";
	}
	//饼
	if(m_MyPAIVec[4].empty()==false)
	{
		vector<	int >::iterator Iter;
		for(Iter = m_MyPAIVec[4].begin();Iter !=m_MyPAIVec[4].end(); Iter++)
		{
			cout<<"["<<(*Iter)<<"饼]";
			icount++;
		}
	}
	cout<<endl;
	for(UINT i =0 ; i < icount; i++ )
	{
		cout<<"     ";
	}
}
//对一张牌进行输出
void CMJ::PrintPai(int p_Type,int p_Value)
{
//箭牌
	if(p_Type==0)
	{
		switch(p_Value)
		{
		case 1:
			cout<<"[中]";
			break;
		case 2:
			cout<<"[发]";
			break;
		case 3:
			cout<<"[白]";
			break;
		}
	}
	//风牌
	if(p_Type==1)
	{
		switch(p_Value)
		{
		case 1:
			cout<<"[东]";
			break;
		case 2:
			cout<<"[南]";
			break;
		case 3:
			cout<<"[西]";
			break;
		case 4:
			cout<<"[北]";
			break;
		}
	}
	//万
	if(p_Type==2)
	{
		cout<<"["<<p_Value<<"万]";
	}
	//条
	if(p_Type==3)
	{
		cout<<"["<<p_Value<<"条]";
	}
	//饼
	if(p_Type==4)
	{
		cout<<"["<<p_Value<<"饼]";
	}
}

//吃牌
bool	CMJ::CheckChiPai(int p_Type,int p_Value)
{
	m_TempChiPAIVec.clear();
	//饼
	if(m_MyPAIVec[p_Type].empty()==false)
	{
		int iSize = m_MyPAIVec[p_Type].size();
		if( iSize >= 2)
		{
			for(UINT i = 0 ; i < iSize-1 ;  i++ )
			{
				if((m_MyPAIVec[p_Type][i]==(p_Value-2))&&(m_MyPAIVec[p_Type][i+1]==(p_Value-1)))
				{
					stCHI t_Chi;
					t_Chi.m_Type = p_Type;
					t_Chi.m_Value1 = p_Value-2;
					t_Chi.m_Value2 = p_Value-1;
					t_Chi.m_Value3 = p_Value;
					m_TempChiPAIVec.push_back(t_Chi);

				}
				if((m_MyPAIVec[p_Type][i]==(p_Value-1))&&(m_MyPAIVec[p_Type][i+1]==(p_Value+1)))
				{
					stCHI t_Chi;
					t_Chi.m_Type = p_Type;
					t_Chi.m_Value1 = p_Value-1;
					t_Chi.m_Value2 = p_Value;
					t_Chi.m_Value3 = p_Value+1;
					m_TempChiPAIVec.push_back(t_Chi);

				}
				if((m_MyPAIVec[p_Type][i]==(p_Value+1))&&(m_MyPAIVec[p_Type][i+1]==(p_Value+2)))
				{
					stCHI t_Chi;
					t_Chi.m_Type = p_Type;
					t_Chi.m_Value1 = p_Value;
					t_Chi.m_Value2 = p_Value+1;
					t_Chi.m_Value3 = p_Value+2;
					m_TempChiPAIVec.push_back(t_Chi);
				}
			}

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



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

                                                                                      

      随时等你哟~

                         

评论 56
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火云洞红孩儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值