}
//取得吃牌组合数
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::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::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::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::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::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::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类的实现:
[cpp]
#ifndef _CMJMANAGE_H
#define _CMJMANAGE_H
#include "CMJ.h"
//剩余牌墙信息
//扩展
struct stPAIEx
{
stPAI m_NewPai; //起的新牌
int m_PaiNum; //剩余牌数
bool m_IsHZ; //是否黄庄
}
;
//麻将管理器
class CMJManage
{
vector m_MJVec; //麻将数据VEC
int m_HZPaiNum; //黄庄的牌数
public:
//构造函数
CMJManage();
//析构函数
~CMJManage();
//初始化牌
void InitPai(int p_HZPaiNum = 0);
//起牌
stPAIEx GetAPai();
private:
//洗牌
void XiPai();
}
;
#endif
对应CPP:
[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函数。
[cpp]
#include "AI\\CMJ.h"
#include "AI\\CMJManage.h"
#include
#include
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<<"洗牌完成"<
cout<<"起牌:========================================================"<
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<
cout<<"起牌:========================================================"<
stPAIEx t_Pai = t_MJManage.GetAPai();
//刷新我方牌墙
t_MyPlayer.PrintPai(t_Pai.m_NewPai.m_Type,t_Pai.m_NewPai.m_Value);
cout<
//如果没有听头
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<
cout<<"黄庄了!!!!!!!!!!!!!"<
break;
}
t_MyPlayer.PrintAllPai();
cout<
OUTPai:
cout<<"请打牌(输入牌序号)";
int PaiIndex;
cin>>PaiIndex;
if(t_MyPlayer.DelPai(PaiIndex)==false)
{
cout<<"没有此牌"<
goto OUTPai;
}
//==============================牌面刷新================================================
cout<<"牌面刷新============================"<
t_MyPlayer.PrintAllPai();
cout<
//==============================================================================
//======================包听========================================================
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<
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<
::_sleep(1000);
}
}
else
{
cout<<"程序出错!"<
}
}
cout<
//其它玩家起牌出牌
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<
::_sleep(1000);
}
if(j==1)
{
cout<<"西家起牌出牌:";
t_MyPlayer.PrintPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);
cout<
::_sleep(1000);
}
if(j==2)
{
cout<<"北家起牌出牌:";
t_MyPlayer.PrintPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);
cout<
::_sleep(1000);
}
char t_Result;
if(t_Ting == false)
{
if(t_Pai2.m_IsHZ)//如果起牌数已达到上限
{
cout<
cout<<"黄庄了!!!!!!!!!!!!!"<
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<
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<<"请输入组合号:"<
cin>>index;
}
t_MyPlayer.DoChiPai(index,t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);
//==============================================================================
cout<<"牌面刷新============================"<
t_MyPlayer.PrintAllPai();
cout<
//==============================================================================
OUTPai2:
cout<<"请打牌(输入牌序号)";
int PaiIndex;
cin>>PaiIndex;
if(t_MyPlayer.DelPai(PaiIndex)==false)
{
cout<<"没有此牌"<
goto OUTPai2;
}
//=================================牌面刷新=============================================
cout<<"牌面刷新============================"<
t_MyPlayer.PrintAllPai();
cout<
//==============================================================================
//======================包听========================================================
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<<"牌面刷新============================"<
t_MyPlayer.PrintAllPai();
cout<
//==============================================================================
OUTPai3:
cout<<"请打牌(输入牌序号)";
int PaiIndex;
cin>>PaiIndex;
if(t_MyPlayer.DelPai(PaiIndex)==false)
{
cout<<"没有此牌"<
goto OUTPai3;
}
//==========================牌面刷新====================================================
cout<<"牌面刷新============================"<
t_MyPlayer.PrintAllPai();
cout<
//==============================================================================
//======================包听========================================================
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<<"起杠底牌"<
t_MyPlayer.AddPai(t_Pai2.m_NewPai.m_Type,t_Pai2.m_NewPai.m_Value);
//==============================================================================
cout<<"牌面刷新============================"<
t_MyPlayer.PrintAllPai();
cout<
//==============================================================================
stPAIEx t_Pai2 = t_MJManage.GetAPai();
//起牌后胡牌判断
t_Finish = t_MyPlayer.CheckAllPai(MJPAI_GETPAI);
if(t_Finish)
{
cout<<"杠底花吗?(Y/N)"<
char t_Result;
cin>>t_Result;
if(t_Result =='Y'||t_Result=='y')
{
cout<
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<<"黄庄了!!!!!!!!!!!!!"<
t_Finish = true;
你可能感兴趣的:(算法分析)
数据结构与算法分析:专题内容——人工智能中的寻路3之广度优先搜索(代码详解)
梅见十柒
数据结构与算法分析 算法 c语言 广度优先 笔记
一、前言广度优先搜索尝试在不重复访问状态的情况下,寻找到一条最短路径。广度优先搜索保证如果存在一条到目标状态的路径,那么找到的肯定是最短路径。事实上,深度优先搜索和广度优先搜索的唯一不同就是广度优先搜索使用队列来保存开放集,而深度优先搜索使用栈。每次迭代时,广度优先搜索从队列头拿出一个未访问的状态,然后从这个状态开始,计算后继状态。如果达到了目标状态,那么搜索结束。任何已经在闭合集中的后继状态将会
算法——归并排序(基本思想、java实现、实现图解)
Camel卡蒙
数据结构与算法 算法 java 排序算法
我是一个计算机专业研0的学生卡蒙Camel(刚保研)记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结+网上借鉴)希望大家能一起发现问题和补充,也欢迎讨论文章目录归并排序介绍Java代码实现算法分析实现图解️和快速排序对比(面试)归并排序介绍归并排序(MergeSort)是一种基于分治法的排序算法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列
AI大模型如何赋能电商行业,引领变革
虞书欣的C
人工智能 开发语言
•个性化推荐:利用机器学习算法分析用户的历史购买记录、浏览行为和喜好,生成个性化的产品推荐列表,提升用户的购买意愿和满意度。•优化用户体验:•智能搜索引擎:运用自然语言处理技术,优化搜索引擎,让用户能够通过自然语言进行搜索。•虚拟客服:通过聊天机器人和语音助手,提供24/7的客户支持,快速解答用户咨询。•图像识别:利用计算机视觉技术,用户可以通过拍照识别商品,快速找到相似商品或进行排版搭配推荐。•
时间复杂度分为几种
青云游子
算法 算法 排序算法 数据结构
按照快到慢排序O(1)O(logN)O(N)O(NlogN)O(N^2)例子O(1)hashsethashmap数组下标O(logN)折半查找树形遍历O(N)list查询值数组查询值O(NlogN)进阶排序快排堆排归并O(N^2)简单排序冒泡插入选择ChatGPT时间复杂度是衡量算法执行时间随输入规模增长而变化的度量。它用大O符号表示,表示算法执行时间的增长率。在算法分析中,常见的时间复杂度有以下
AI算法部署方式对比分析:哪种方案性价比最高?
TSINGSEE
AI智能 人工智能 视频监控技术 安防视频监控
随着人工智能技术的飞速发展,AI算法在各个领域的应用日益广泛。AI算法的部署方式直接关系到系统的性能、实时性、成本及安全性等多个方面。本文将探讨AI算法分析的三种主要部署方式:本地计算、边缘计算和云计算,并详细分析它们的优劣性。一、本地计算1)部署方式本地计算是指将AI算法直接部署在摄像头或其他终端设备上。这种部署方式使得数据处理和分析在设备本地完成,无需通过网络传输数据。2)优点高效实时:由于数
图灵机和人脑的基础算法分析
深巷卖樱桃
程序人生 机器学习 改行学it 人工智能
图灵机是计算机的原型,图灵机的实现原理是计算机cpu的原理。因此,我们来深入剖析一下图灵机的原理借此一窥cpu的核心功能。以实现加法功能2+3为例:一.首先是目的:计算什么:2+3二.其次是资源准备:1.硬件资源:无限延伸的纸带纸带,读写头2.软件资源:要计算的数字3.条件资源:这里需要用到读写头,用来感知和执行三.最后是方法,指令对照表如下:(二进制)01q11Rq21Rq1q20Lq31Rq2
如何利用AI技术来提升用户的个性化体验和社区参与度?
Itfuture03
AI前沿技术 人工智能
要利用AI技术提升用户的个性化体验和社区参与度,可以采取以下几种策略:个性化推荐系统:通过AI算法分析用户的行为和偏好,提供定制化的服务和内容推荐,如智能推荐活动、健康管理等,让居民感受到社区的温暖和关怀。智能助手与聊天机器人:引入AI驱动的虚拟助手,提供实时帮助、个性化建议和交互式对话,改善客户体验。自然语言处理(NLP):实现具有AI能力的NLP,创建对用户友好的应用程序,简化用户体验,如客服
【软考】希尔排序算法分析
王佑辉
软考 算法 算法 软考
目录1.c代码2.运行截图3.运行解析1.c代码#include#includevoidshellSort(intdata[],intn){//划分的数组,例如8个数则为[4,2,1]int*delta;intk;//i控制delta的轮次inti;//临时变量,换值inttemp;intdk;intj;k=n;delta=(int*)malloc(sizeof(int)*(n/2));i=0;d
大厂必备的加解密算法分析与应用场景
不惑_
实战系列 算法 数据库
加解密算法分析与应用场景在日常开发中,无论是使用何种编程语言,我们都会遇到加解密的需求。例如,为了保护接口数据安全,我们需要对数据进行加密传输;在HTTPS协议中,通过非对称加密传输客户端私钥,然后双方使用该私钥进行对称加密通信;使用MD5算法进行文件一致性校验等。然而,面对众多的加解密方案,我们往往不清楚何时使用哪种方法。本文将为您梳理当前主流的加解密技术,并对算法进行科普性说明,但不涉及具体算
算法分析:揭秘计算机科学的核心之谜
码无止尽
趣学数据结构和算法 算法 数据结构
你好,亲爱的读者!我是你的计算机朋友小算。今天,我要带你进入一个神秘而又迷人的世界——算法分析。别担心,虽然听起来很高深,但我保证用最生动活泼的方式,让你轻松愉快地理解它。“嗨,小算,算法分析到底是什么?”你问。好问题!算法分析其实就是研究算法的效率和性能。就像我们评价一个人跑步快不快,我们也要评估算法解决问题的速度有多快,占用的空间有多少。让我给你讲个故事吧。想象一下,你是个厨师,面前有一大堆食
宠心宝智能居家监测器
萌宠心语
宠物 人工智能 科技 生活
在智能家居生态中,宠物健康管理正变得越来越智能化和精细化。智能听诊器作为这一领域的创新设备,为宠物提供了更高质量的生活保障。智能听诊器通过高精度传感器捕捉宠物胸腔表面的微小振动,这些振动主要由心脏和肺部的运作产生。利用数字信号处理技术,智能听诊器能够过滤和增强原始信号,提取出清晰的心音和肺音。通过算法分析,智能听诊器能够识别出心率、呼吸频率等关键健康指标,为宠物主人提供了一个科学、精准的健康管理工
数据结构---算法
薄荷364
算法
一、算法和算法分析什么是算法:对特定问题的求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。算法的五个重要特性:有穷性确定性可行性输入输出算法设计的要求:正确性可读性健壮性高效率与低存储算法效率的度量:算法的执行时间需要依据该算法所编制的程序在计算机上运行所消耗的时间来度量,一般有两种方法:事后统计的方法:很多计算机内部都有计时功能,不同的算法的程序可通过一组或若干相同的统
智能听诊器:宠物心脏健康监测的创新工具
萌宠心语
宠物
智能听诊器作为宠物医疗领域的新兴技术,提供了一种创新的监测手段。与传统听诊器相比,它能更准确地捕捉宠物心脏的声音,并通过算法分析识别潜在的心脏问题。便携性是智能听诊器的一大优势。宠物主人可以在家中轻松监测宠物的心跳和呼吸频率,并将数据上传至互联网平台,为兽医提供实时监控宠物心脏健康状态的途径。上传至互联网平台的数据可以被兽医远程访问和分析,提供个性化的健康管理方案。智能听诊器的数据分析功能,帮助兽
宠物智能听诊器在早期监测呼吸道疾病中的应用
萌宠心语
宠物
宠物呼吸道疾病是常见的健康问题,包括支气管炎、肺炎、哮喘等。早期发现和治疗对于宠物的预后至关重要。传统的诊断方法主要依赖兽医的听诊和影像学检查,但前者需要丰富经验,后者费用较高。近年来,宠物智能听诊器的出现为早期监测呼吸道疾病提供了新的可能。宠物智能听诊器通过声音传感器,可以高灵敏地捕捉宠物呼吸时的声音,并通过算法分析,识别出不同的异常听诊音,如干啰音、哮鸣音等。与人工听诊相比,智能听诊器可以更客
【动态规划】【打卡121天】:背包理论基础
晓风残月一望关河萧索
【算法】
1、背包理论基础有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值最大。其实这是标准的背包问题。每一件物品有2种状态,取物品放入背包中,不取该物品放入背包中。所以可以使用回溯法搜索出所有的情况,那么时间复杂度就是O(2^n),这里的n表示物品数量。2、算法分析①确定dp数组以及下标的含义对
算法分析与设计——实验5:分支限界法
阮阮的阮阮
算法分析与设计 实验报告 算法 分支限界 单源最短路径问题 0-1背包问题 N皇后问题 c++ java
实验五分支限界法一、实验目的1、理解分支限界算法的基本原理;2、理解分支限界算法与回溯算法的区别;3、能够使用分支限界算法边界求解典型问题。二、实验内容及要求实验要求:通过上机实验进行算法实现,保存和打印出程序的运行结果,并结合程序进行分析,上交实验报告和程序文件。实验内容:1、使用分支限界算法解决单源最短路径问题。2、使用分支限界算法解决0-1背包问题。3、在N*N的棋盘上放置彼此不受攻击的N个
leetcode326. 3 的幂,简单模拟
Cider瞳
力扣刷题 算法 leetcode 数据结构 c++ 面试
leetcode326.3的幂给定一个整数,写一个函数来判断它是否是3的幂次方。如果是,返回true;否则,返回false。整数n是3的幂次方需满足:存在整数x使得n==3x示例1:输入:n=27输出:true示例2:输入:n=0输出:false示例3:输入:n=9输出:true示例4:输入:n目录leetcode326.3的幂题目分析算法步骤算法流程具体代码算法分析相似题目题目分析给定一个整数n
算法分析之二叉树
小朱小朱绝不服输
算法分析 算法 数据结构 二叉树 Java
算法相关数据结构总结:序号数据结构文章1动态规划动态规划之背包问题——01背包动态规划之背包问题——完全背包动态规划之打家劫舍系列问题动态规划之股票买卖系列问题动态规划之子序列问题算法(Java)——动态规划2数组算法分析之数组问题3链表算法分析之链表问题算法(Java)——链表4二叉树算法分析之二叉树算法分析之二叉树遍历算法分析之二叉树常见问题算法(Java)——二叉树5哈希表算法分析之哈希表算
深度学习岩土工程+离散元PFC仿真应用=数字化智能岩土预测?噂都假嘟?
好好学仿真
岩土 pfc 3dec 深度学习 人工智能
在深度学习与岩土工程融合的背景下,科研的边界持续扩展,创新成果不断涌现。从基本物理模型的构建到岩土工程问题的复杂模拟,从数据驱动的分析到工程问题的智能解决,深度学习正以前所未有的动力推动岩土工程领域的革新。据调查,目前在岩土工程领域内,深度学习的应用主要集中在以下几个方面:1.预测模型开发:使用深度学习来预测土壤和岩石的力学行为,例如土压力、剪切强度等。2.数据驱动特性分析:通过机器学习算法分析大
【算法分析与设计】去除重复字母
五敷有你
算法分析与设计 java javascript 开发语言 算法 数据结构
个人主页:五敷有你系列专栏:算法分析与设计⛺️稳中求进,晒太阳题目给你一个字符串s,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例示例1:输入:s="bcabc"输出:"abc"示例2:输入:s="cbacdcbc"输出:"acdb"思路贪心+单调栈实现【字符串删除一个字符使其字典序最小的贪心策略】:对于两个长度相同的字符串,
基于DFS、BFS解决迷宫问题
etc _ life
深度优先 宽度优先 算法
前言分享一次算法分析的作业。深度优先搜索和广度优先搜索是两种常用的图搜索算法。深度优先搜索(DFS)是一种递归的搜索算法,其核心思想是沿着一个分支尽可能深入地搜索,直到达到最深的节点,然后再回溯到上一层,继续探索其他分支。广度优先搜索(BFS)则采用逐层扩展的方式,先访问当前节点的所有邻居节点,再逐层向外扩展。设计一个算法解决迷宫问题,通过深度优先搜索和广度优先搜索算法找到从起点到终点的路径。迷宫
【算法分析】实验 3. 基于动态规划方法求解0-1背包问题
weixin_30657541
数据结构与算法 python
目录实验内容实验目的实验结果步骤1步骤2步骤3步骤4步骤5步骤6实验结果实验总结实验内容本实验要求基于算法设计与分析的一般过程(即待求解问题的描述、算法设计、算法描述、算法正确性证明、算法分析、算法实现与测试),在针对0-1背包问题求解的实践中理解动态规划(DynamicProgramming,DP)方法的思想、求解策略及步骤。作为挑战:可以考虑基于跳跃点的改进算法,以及对连续型物品重量/背包容量
Programming Abstractions in C阅读笔记:p283-p292
c
《ProgrammingAbstractionsinC》学习第72天,p283-p292总结,总计10页。一、技术总结1、anylasisofalgorithms算法分析——即判断程序的效率(efficiency)。2、mathematicalinduction(数学归纳法)3、Big-Onotation(大O标记法)4、constanttime(常量时间)5、lineartime(线性时间)p2
【算法分析与设计】最大层内元素和
五敷有你
算法分析与设计 算法 leetcode 数据结构 java 开发语言
个人主页:五敷有你系列专栏:算法分析与设计⛺️稳中求进,晒太阳题目给你一个二叉树的根节点root。设根节点位于二叉树的第1层,而根节点的子节点位于第2层,依此类推。请返回层内元素之和最大的那几层(可能只有一层)的层号,并返回其中最小的那个。示例示例1:输入:root=[1,7,0,7,-8,null,null]输出:2解释:第1层各元素之和为1,第2层各元素之和为7+0=7,第3层各元素之和为7+
AI - 碰撞避免算法分析(ORCA)
Mhypnos
游戏开发 算法 人工智能 游戏引擎 碰撞避免 ORCA
对比VO/RVOORCA算法检测碰撞的原理和VO/RVO基本一样的,只是碰撞区域的计算去掉了一定时间以外才可能发生的碰撞,因此碰撞区域的扇形去掉了前面的部分,由圆锥头变成了个圆另一个最主要的区别是,求新的速度,是根据相对多个不同物体生成的半平面计算获得。半平面:上图里,u即之前VO和RVO求出的相对速度避免碰撞需要偏移的最短速度向量VO/RVO分析。VO/RVO里由于只考虑避障双方的两个物体,所以
JAVA高级篇:深入理解JVM之GC算法分析
呆呆不呆丫
1.如何确定回收一般来说,一个对象如果需要回收,第一件事就是要确定这个对象是否已经“死去”,那么这种“死去”的状态怎么来判断呢?1.1可达性分析算法在主流商用程序语言(Java、C#等)的主流实现中,都是通过可达性分析(ReachabilityAnalysis)来判断对象是否存活的,基本思路就是通过一系列称为“GCRoots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径成为引用链(R
Task 11 XGBoost 算法分析与案例调参实例
沫2021
1.XGBoost算法XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。XGBoost是一个优化的分布式梯度增强库,旨在实现高效,灵活和便携。它在GradientBoosting框架下实现机器学习算法。XGBoost提供了并行树提升(也称为GBDT,GBM),可以快速
【算法分析与设计】环形链表
五敷有你
算法分析与设计 算法 链表 数据结构
个人主页:五敷有你系列专栏:算法分析与设计⛺️稳中求进,晒太阳题目给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。注意:pos不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环,则返回true。否则,返回fa
【算法设计与分析】有效的字母异位词
五敷有你
算法分析与设计 java 开发语言 leetcode 数据结构 算法
个人主页:五敷有你系列专栏:算法分析与设计⛺️稳中求进,晒太阳题目给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。示例示例1:输入:s="anagram",t="nagaram"输出:true示例2:输入:s="rat",t="car"输出:false思路首先判断两个字符串长度是否相等,不相等则直接返回false若
python输出字符 2022年12月青少年电子学会等级考试 中小学生python编程等级考试二级真题答案解析
小兔子编程
python字符串 python输出字符串 python二级真题 python考级真题 python二级真题答案 python等级考试二级真题 中小学python编程
目录python输出字符一、题目要求1、编程实现2、输入输出二、算法分析三、程序代码四、程序说明五、运行结果六、考点分析七、推荐资料1、蓝桥杯比赛2、考级资料3、其它资料python输出字符2022年12月python编程等级考试级编程题一、题目要求1、编程实现编写一个重复执行的程序,要求用户输入一个字符串。如果输入的字符串的长度是奇数,就输出字符串最中间的字符。如果字符串的长度是偶数,就输出字符
枚举的构造函数中抛出异常会怎样
bylijinnan
java enum 单例
首先从使用enum实现单例说起。
为什么要用enum来实现单例?
这篇文章(
http://javarevisited.blogspot.sg/2012/07/why-enum-singleton-are-better-in-java.html)阐述了三个理由:
1.enum单例简单、容易,只需几行代码:
public enum Singleton {
INSTANCE;
CMake 教程
aigo
C++
转自:http://xiang.lf.blog.163.com/blog/static/127733322201481114456136/
CMake是一个跨平台的程序构建工具,比如起自己编写Makefile方便很多。
介绍:http://baike.baidu.com/view/1126160.htm
本文件不介绍CMake的基本语法,下面是篇不错的入门教程:
http:
cvc-complex-type.2.3: Element 'beans' cannot have character
Cb123456
spring Webgis
cvc-complex-type.2.3: Element 'beans' cannot have character
Line 33 in XML document from ServletContext resource [/WEB-INF/backend-servlet.xml] is i
jquery实例:随页面滚动条滚动而自动加载内容
120153216
jquery
<script language="javascript">
$(function (){
var i = 4;$(window).bind("scroll", function (event){
//滚动条到网页头部的 高度,兼容ie,ff,chrome
var top = document.documentElement.s
将数据库中的数据转换成dbs文件
何必如此
sql dbs
旗正规则引擎通过数据库配置器(DataBuilder)来管理数据库,无论是Oracle,还是其他主流的数据都支持,操作方式是一样的。旗正规则引擎的数据库配置器是用于编辑数据库结构信息以及管理数据库表数据,并且可以执行SQL 语句,主要功能如下。
1)数据库生成表结构信息:
主要生成数据库配置文件(.conf文
在IBATIS中配置SQL语句的IN方式
357029540
ibatis
在使用IBATIS进行SQL语句配置查询时,我们一定会遇到通过IN查询的地方,在使用IN查询时我们可以有两种方式进行配置参数:String和List。具体使用方式如下:
1.String:定义一个String的参数userIds,把这个参数传入IBATIS的sql配置文件,sql语句就可以这样写:
<select id="getForms" param
Spring3 MVC 笔记(一)
7454103
spring mvc bean REST JSF
自从 MVC 这个概念提出来之后 struts1.X struts2.X jsf 。。。。。
这个view 层的技术一个接一个! 都用过!不敢说哪个绝对的强悍!
要看业务,和整体的设计!
最近公司要求开发个新系统!
Timer与Spring Quartz 定时执行程序
darkranger
spring bean 工作 quartz
有时候需要定时触发某一项任务。其实在jdk1.3,java sdk就通过java.util.Timer提供相应的功能。一个简单的例子说明如何使用,很简单: 1、第一步,我们需要建立一项任务,我们的任务需要继承java.util.TimerTask package com.test; import java.text.SimpleDateFormat; import java.util.Date;
大端小端转换,le32_to_cpu 和cpu_to_le32
aijuans
C语言相关
大端小端转换,le32_to_cpu 和cpu_to_le32 字节序
http://oss.org.cn/kernel-book/ldd3/ch11s04.html
小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高级的平台以另一种方式(大端)
Nginx负载均衡配置实例详解
avords
[导读] 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。负载均衡先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。
负载均衡
先来简单了解一下什么是负载均衡
乱说的
houxinyou
框架 敏捷开发 软件测试
从很久以前,大家就研究框架,开发方法,软件工程,好多!反正我是搞不明白!
这两天看好多人研究敏捷模型,瀑布模型!也没太搞明白.
不过感觉和程序开发语言差不多,
瀑布就是顺序,敏捷就是循环.
瀑布就是需求、分析、设计、编码、测试一步一步走下来。而敏捷就是按摸块或者说迭代做个循环,第个循环中也一样是需求、分析、设计、编码、测试一步一步走下来。
也可以把软件开发理
欣赏的价值——一个小故事
bijian1013
有效辅导 欣赏 欣赏的价值
第一次参加家长会,幼儿园的老师说:"您的儿子有多动症,在板凳上连三分钟都坐不了,你最好带他去医院看一看。" 回家的路上,儿子问她老师都说了些什么,她鼻子一酸,差点流下泪来。因为全班30位小朋友,惟有他表现最差;惟有对他,老师表现出不屑,然而她还在告诉她的儿子:"老师表扬你了,说宝宝原来在板凳上坐不了一分钟,现在能坐三分钟。其他妈妈都非常羡慕妈妈,因为全班只有宝宝
包冲突问题的解决方法
bingyingao
eclipse maven exclusions 包冲突
包冲突是开发过程中很常见的问题:
其表现有:
1.明明在eclipse中能够索引到某个类,运行时却报出找不到类。
2.明明在eclipse中能够索引到某个类的方法,运行时却报出找不到方法。
3.类及方法都有,以正确编译成了.class文件,在本机跑的好好的,发到测试或者正式环境就
抛如下异常:
java.lang.NoClassDefFoundError: Could not in
【Spark七十五】Spark Streaming整合Flume-NG三之接入log4j
bit1129
Stream
先来一段废话:
实际工作中,业务系统的日志基本上是使用Log4j写入到日志文件中的,问题的关键之处在于业务日志的格式混乱,这给对日志文件中的日志进行统计分析带来了极大的困难,或者说,基本上无法进行分析,每个人写日志的习惯不同,导致日志行的格式五花八门,最后只能通过grep来查找特定的关键词缩小范围,但是在集群环境下,每个机器去grep一遍,分析一遍,这个效率如何可想之二,大好光阴都浪费在这上面了
sudoku solver in Haskell
bookjovi
sudoku haskell
这几天没太多的事做,想着用函数式语言来写点实用的程序,像fib和prime之类的就不想提了(就一行代码的事),写什么程序呢?在网上闲逛时发现sudoku游戏,sudoku十几年前就知道了,学生生涯时也想过用C/Java来实现个智能求解,但到最后往往没写成,主要是用C/Java写的话会很麻烦。
现在写程序,本人总是有一种思维惯性,总是想把程序写的更紧凑,更精致,代码行数最少,所以现
java apache ftpClient
bro_feng
java
最近使用apache的ftpclient插件实现ftp下载,遇见几个问题,做如下总结。
1. 上传阻塞,一连串的上传,其中一个就阻塞了,或是用storeFile上传时返回false。查了点资料,说是FTP有主动模式和被动模式。将传出模式修改为被动模式ftp.enterLocalPassiveMode();然后就好了。
看了网上相关介绍,对主动模式和被动模式区别还是比较的模糊,不太了解被动模
读《研磨设计模式》-代码笔记-工厂方法模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
package design.pattern;
/*
* 工厂方法模式:使一个类的实例化延迟到子类
* 某次,我在工作不知不觉中就用到了工厂方法模式(称为模板方法模式更恰当。2012-10-29):
* 有很多不同的产品,它
面试记录语
chenyu19891124
招聘
或许真的在一个平台上成长成什么样,都必须靠自己去努力。有了好的平台让自己展示,就该好好努力。今天是自己单独一次去面试别人,感觉有点小紧张,说话有点打结。在面试完后写面试情况表,下笔真的好难,尤其是要对面试人的情况说明真的好难。
今天面试的是自己同事的同事,现在的这个同事要离职了,介绍了我现在这位同事以前的同事来面试。今天这位求职者面试的是配置管理,期初看了简历觉得应该很适合做配置管理,但是今天面
Fire Workflow 1.0正式版终于发布了
comsci
工作 workflow Google
Fire Workflow 是国内另外一款开源工作流,作者是著名的非也同志,哈哈....
官方网站是 http://www.fireflow.org
经过大家努力,Fire Workflow 1.0正式版终于发布了
正式版主要变化:
1、增加IWorkItem.jumpToEx(...)方法,取消了当前环节和目标环节必须在同一条执行线的限制,使得自由流更加自由
2、增加IT
Python向脚本传参
daizj
python 脚本 传参
如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢?
需要模块:sys
参数个数:len(sys.argv)
脚本名: sys.argv[0]
参数1: sys.argv[1]
参数2: sys.argv[
管理用户分组的命令gpasswd
dongwei_6688
passwd
NAME: gpasswd - administer the /etc/group file
SYNOPSIS:
gpasswd group
gpasswd -a user group
gpasswd -d user group
gpasswd -R group
gpasswd -r group
gpasswd [-A user,...] [-M user,...] g
郝斌老师数据结构课程笔记
dcj3sjt126com
数据结构与算法
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
yii2 cgridview加上选择框进行操作
dcj3sjt126com
GridView
页面代码
<?=Html::beginForm(['controller/bulk'],'post');?>
<?=Html::dropDownList('action','',[''=>'Mark selected as: ','c'=>'Confirmed','nc'=>'No Confirmed'],['class'=>'dropdown',])
linux mysql
fypop
linux
enquiry mysql version in centos linux
yum list installed | grep mysql
yum -y remove mysql-libs.x86_64
enquiry mysql version in yum repositoryyum list | grep mysql oryum -y list mysql*
install mysq
Scramble String
hcx2013
String
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively.
Below is one possible representation of s1 = "great":
跟我学Shiro目录贴
jinnianshilongnian
跟我学shiro
历经三个月左右时间,《跟我学Shiro》系列教程已经完结,暂时没有需要补充的内容,因此生成PDF版供大家下载。最近项目比较紧,没有时间解答一些疑问,暂时无法回复一些问题,很抱歉,不过可以加群(334194438/348194195)一起讨论问题。
----广告-----------------------------------------------------
nginx日志切割并使用flume-ng收集日志
liyonghui160com
nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。第二步向nginx主
Oracle死锁解决方法
pda158
oracle
select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a.process=b.process and c.object_id=b.
java之List排序
shiguanghui
list排序
在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList。这些集合提供了对对象组的索引访问。他们提供了元素的添加与删除支持。然而,它们并没有内置的元素排序支持。 你能够使用java.util.Collections类中的sort()方法对List元素进行排序。你既可以给方法传递
servlet单例多线程
utopialxw
单例 多线程 servlet
转自http://www.cnblogs.com/yjhrem/articles/3160864.html
和 http://blog.chinaunix.net/uid-7374279-id-3687149.html
Servlet 单例多线程
Servlet如何处理多个请求访问?Servlet容器默认是采用单实例多线程的方式处理多个请求的:1.当web服务器启动的