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

长平狐 发布于 2013/03/19 18:39
阅读 1K+
收藏 3

以此文奠我那些年中无意删除而删除的代码工程

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



原文链接:http://blog.csdn.net/honghaier/article/details/8604955
加载中
0
杨速科技-万
杨速科技-万

对于新晋的棋牌游戏运营商来说,如何通过有效的运营来使自己的平台赚钱是他们最终的目的。而玩家就是决定一个棋牌游戏平台能否继续发展的重中之重,所以运营商最主要的就是要抓住用户的需求体注重用户体验,从而形成良好的口碑。用户体验更深层次的含义包括了终端用户的行为和态度以及他们实际使用系统的动机。满足终端用户的需求以便他们改变行为并愿意分享体验,这也就是形成口碑制造是成功的重要条件。简单点来说就是让玩家能够在游戏中享受到乐趣,感到愉悦,能够放松。

       如今的棋牌游戏竞争十分激烈,各种地方棋牌游戏平台更是层出不穷。所以运营商对市场一定要把握好,寻找合适的机会去推广自己的产品。在如此具有竞争力的行业想要独具鳌头,真的是难之有难,所以产品服务一定要做好,让玩家自己心甘情愿的去给你最推广。本文来自织梦
       扬速科技认为:吸引玩家首先游戏平台产品要有保证,游戏的服务和推广是随时可以调整的,而产品如果做不到稳定、可靠;即使推广宣传做的十分到位,就算玩家计入游戏了,但当他们发现游戏平台不稳定、游戏界面老套、操作复杂是,也很容易就不会再玩下去了。
       因此,感受一下平台质量再行购买更适合棋牌运营商。经过扬速科技棋牌游戏开发公司的实践总结我们不难发现,棋牌平台质量与玩家的忠诚度有直接关系,平台整体用户体验度提升才可以把玩家黏着度提升。开发一个质量高的棋牌平台包括程序开发、平台界面设计、平台运行速度等环节,在各个环节高效配合中,才生产出更加人性化的棋牌游戏平台。
 
       面对复杂的棋牌游戏运营市场和泛滥成灾的棋牌游戏开发商的双重压力,棋牌游戏运营商想要在众多平台中脱颖而出,光靠自己的能力还不行,还必须要依靠高质量的棋牌游戏平台,所以运营商最首要的任务是选择一家优秀的棋牌游戏开发商。在这里,价格并不是选择棋牌游戏开发商的唯一标准,事实上,选择一家棋牌游戏开发商最注重的还是平台质量和售后服务,当然还得回归本质,选择开发商时自己亲自做一回玩家才行,这一方面,任何文字和图片都比不上玩家的直观感受。
返回顶部
顶部