2276 lines
49 KiB
C++
2276 lines
49 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "GameLogic.h"
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
//<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
const BYTE CGameLogic::m_cbCardDataArray[MAX_REPERTORY]=
|
|||
|
|
{
|
|||
|
|
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29, //ͬ<><CDAC>
|
|||
|
|
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29, //ͬ<><CDAC>
|
|||
|
|
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29, //ͬ<><CDAC>
|
|||
|
|
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29, //ͬ<><CDAC>
|
|||
|
|
0x31,0x32,0x33,0x34,0x35,0x36,0x37, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
0x31,0x32,0x33,0x34,0x35,0x36,0x37, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
0x31,0x32,0x33,0x34,0x35,0x36,0x37, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
0x31,0x32,0x33,0x34,0x35,0x36,0x37, //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CGameLogic::CGameLogic()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CGameLogic::~CGameLogic()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
void CGameLogic::RandCardData(BYTE cbCardData[], BYTE cbMaxCount)
|
|||
|
|
{
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
srand(GetTickCount() | (rand() << 8));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><D7BC>
|
|||
|
|
BYTE cbCardDataTemp[CountArray(m_cbCardDataArray)];
|
|||
|
|
CopyMemory(cbCardDataTemp,m_cbCardDataArray,sizeof(m_cbCardDataArray));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
BYTE cbRandCount=0,cbPosition=0;
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
cbPosition=rand()%(cbMaxCount-cbRandCount);
|
|||
|
|
cbCardData[cbRandCount++]=cbCardDataTemp[cbPosition];
|
|||
|
|
cbCardDataTemp[cbPosition]=cbCardDataTemp[cbMaxCount-cbRandCount];
|
|||
|
|
} while (cbRandCount<cbMaxCount);
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
|
|||
|
|
bool CGameLogic::RemoveCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbRemoveCard)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD>˿<EFBFBD>
|
|||
|
|
ASSERT(IsValidCard(cbRemoveCard));
|
|||
|
|
ASSERT(cbCardIndex[SwitchToCardIndex(cbRemoveCard)]>0);
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
|
|||
|
|
BYTE cbRemoveIndex=SwitchToCardIndex(cbRemoveCard);
|
|||
|
|
if (cbCardIndex[cbRemoveIndex]>0)
|
|||
|
|
{
|
|||
|
|
cbCardIndex[cbRemoveIndex]--;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ʧ<><CAA7>Ч<EFBFBD><D0A7>
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
|
|||
|
|
bool CGameLogic::RemoveCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbRemoveCard[], BYTE cbRemoveCount)
|
|||
|
|
{
|
|||
|
|
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
|
|||
|
|
for (BYTE i=0;i<cbRemoveCount;i++)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD>˿<EFBFBD>
|
|||
|
|
ASSERT(IsValidCard(cbRemoveCard[i]));
|
|||
|
|
ASSERT(cbCardIndex[SwitchToCardIndex(cbRemoveCard[i])]>0);
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
|
|||
|
|
BYTE cbRemoveIndex=SwitchToCardIndex(cbRemoveCard[i]);
|
|||
|
|
if (cbCardIndex[cbRemoveIndex]==0)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
|
|||
|
|
//<2F><>ԭɾ<D4AD><C9BE>
|
|||
|
|
for (BYTE j=0;j<i;j++)
|
|||
|
|
{
|
|||
|
|
ASSERT(IsValidCard(cbRemoveCard[j]));
|
|||
|
|
cbCardIndex[SwitchToCardIndex(cbRemoveCard[j])]++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
|
|||
|
|
--cbCardIndex[cbRemoveIndex];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
|
|||
|
|
bool CGameLogic::RemoveCard(BYTE cbCardData[], BYTE cbCardCount, BYTE cbRemoveCard[], BYTE cbRemoveCount)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(cbCardCount<=MAX_COUNT);
|
|||
|
|
ASSERT(cbRemoveCount<=cbCardCount);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbDeleteCount=0,cbTempCardData[MAX_COUNT];
|
|||
|
|
if (cbCardCount>CountArray(cbTempCardData)) return false;
|
|||
|
|
|
|||
|
|
CopyMemory(cbTempCardData,cbCardData,cbCardCount*sizeof(cbCardData[0]));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
for (BYTE i=0;i<cbRemoveCount;i++)
|
|||
|
|
{
|
|||
|
|
for (BYTE j=0;j<cbCardCount;j++)
|
|||
|
|
{
|
|||
|
|
if (cbRemoveCard[i]==cbTempCardData[j])
|
|||
|
|
{
|
|||
|
|
cbDeleteCount++;
|
|||
|
|
cbTempCardData[j]=0;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>ɹ<EFBFBD><C9B9>ж<EFBFBD>
|
|||
|
|
if (cbDeleteCount!=cbRemoveCount)
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
BYTE cbCardPos=0;
|
|||
|
|
for (BYTE i=0;i<cbCardCount;i++)
|
|||
|
|
{
|
|||
|
|
if (cbTempCardData[i]!=0)
|
|||
|
|
cbCardData[cbCardPos++]=cbTempCardData[i];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>Ч<EFBFBD>ж<EFBFBD>
|
|||
|
|
bool CGameLogic::IsValidCard(BYTE cbCardData)
|
|||
|
|
{
|
|||
|
|
BYTE cbValue=(cbCardData&MASK_VALUE);
|
|||
|
|
BYTE cbColor=(cbCardData&MASK_COLOR)>>4;
|
|||
|
|
return (((cbValue>=1)&&(cbValue<=9)&&(cbColor<=2))||((cbValue>=1)&&(cbValue<=7)&&(cbColor==3)));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
|
|||
|
|
BYTE CGameLogic::GetCardCount(BYTE cbCardIndex[MAX_INDEX])
|
|||
|
|
{
|
|||
|
|
//<2F><>Ŀͳ<C4BF><CDB3>
|
|||
|
|
BYTE cbCardCount=0;
|
|||
|
|
for (BYTE i=0;i<MAX_INDEX;i++)
|
|||
|
|
cbCardCount+=cbCardIndex[i];
|
|||
|
|
|
|||
|
|
return cbCardCount;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
BYTE CGameLogic::GetWeaveCard(WORD wWeaveKind, BYTE cbCenterCard, BYTE cbCardBuffer[4])
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
switch (wWeaveKind)
|
|||
|
|
{
|
|||
|
|
case WIK_LEFT: //<2F><><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
cbCardBuffer[1]=cbCenterCard+1;
|
|||
|
|
cbCardBuffer[2]=cbCenterCard+2;
|
|||
|
|
cbCardBuffer[0]=cbCenterCard;
|
|||
|
|
|
|||
|
|
return 3;
|
|||
|
|
}
|
|||
|
|
case WIK_RIGHT: //<2F><><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
cbCardBuffer[1]=cbCenterCard-2;
|
|||
|
|
cbCardBuffer[2]=cbCenterCard-1;
|
|||
|
|
cbCardBuffer[0]=cbCenterCard;
|
|||
|
|
|
|||
|
|
return 3;
|
|||
|
|
}
|
|||
|
|
case WIK_CENTER: //<2F><><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
cbCardBuffer[1]=cbCenterCard-1;
|
|||
|
|
cbCardBuffer[0]=cbCenterCard;
|
|||
|
|
cbCardBuffer[2]=cbCenterCard+1;
|
|||
|
|
|
|||
|
|
return 3;
|
|||
|
|
}
|
|||
|
|
case WIK_PENG: //<2F><><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
cbCardBuffer[0]=cbCenterCard;
|
|||
|
|
cbCardBuffer[1]=cbCenterCard;
|
|||
|
|
cbCardBuffer[2]=cbCenterCard;
|
|||
|
|
|
|||
|
|
return 3;
|
|||
|
|
}
|
|||
|
|
case WIK_GANG: //<2F><><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
cbCardBuffer[0]=cbCenterCard;
|
|||
|
|
cbCardBuffer[1]=cbCenterCard;
|
|||
|
|
cbCardBuffer[2]=cbCenterCard;
|
|||
|
|
cbCardBuffer[3]=cbCenterCard;
|
|||
|
|
|
|||
|
|
return 4;
|
|||
|
|
}
|
|||
|
|
case WIK_DNBL: //<2F><><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
cbCardBuffer[1]=cbCenterCard+1;
|
|||
|
|
cbCardBuffer[2]=cbCenterCard+3;
|
|||
|
|
cbCardBuffer[0]=cbCenterCard;
|
|||
|
|
|
|||
|
|
return 3;
|
|||
|
|
}
|
|||
|
|
case WIK_DNBC: //<2F><><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
cbCardBuffer[1]=cbCenterCard-1;
|
|||
|
|
cbCardBuffer[0]=cbCenterCard;
|
|||
|
|
cbCardBuffer[2]=cbCenterCard+2;
|
|||
|
|
|
|||
|
|
return 3;
|
|||
|
|
}
|
|||
|
|
case WIK_DNBR: //<2F><><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
cbCardBuffer[1]=cbCenterCard-3;
|
|||
|
|
cbCardBuffer[2]=cbCenterCard-2;
|
|||
|
|
cbCardBuffer[0]=cbCenterCard;
|
|||
|
|
|
|||
|
|
return 3;
|
|||
|
|
}
|
|||
|
|
case WIK_DXBL: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
cbCardBuffer[1]=cbCenterCard+2;
|
|||
|
|
cbCardBuffer[2]=cbCenterCard+3;
|
|||
|
|
cbCardBuffer[0]=cbCenterCard;
|
|||
|
|
|
|||
|
|
return 3;
|
|||
|
|
}
|
|||
|
|
case WIK_DXBC: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
cbCardBuffer[1]=cbCenterCard-2;
|
|||
|
|
cbCardBuffer[0]=cbCenterCard;
|
|||
|
|
cbCardBuffer[2]=cbCenterCard+1;
|
|||
|
|
|
|||
|
|
return 3;
|
|||
|
|
}
|
|||
|
|
case WIK_DXBR: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
cbCardBuffer[1]=cbCenterCard-3;
|
|||
|
|
cbCardBuffer[2]=cbCenterCard-1;
|
|||
|
|
cbCardBuffer[0]=cbCenterCard;
|
|||
|
|
|
|||
|
|
return 3;
|
|||
|
|
}
|
|||
|
|
default:
|
|||
|
|
{
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
|||
|
|
BYTE CGameLogic::GetUserActionRank(WORD wUserAction)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>Ƶȼ<C6B5>
|
|||
|
|
if (wUserAction&WIK_CHI_HU) { return 4; }
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ƶȼ<C6B5>
|
|||
|
|
if (wUserAction&WIK_GANG) { return 3; }
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ƶȼ<C6B5>
|
|||
|
|
if (wUserAction&WIK_PENG) { return 2; }
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ƶȼ<C6B5>
|
|||
|
|
if (wUserAction&(WIK_RIGHT|WIK_CENTER|WIK_LEFT|WIK_DNBL|WIK_DNBC|WIK_DNBR|WIK_DXBL|WIK_DXBC|WIK_DXBR)) { return 1; }
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ƶȼ<C6B5>
|
|||
|
|
BYTE CGameLogic::GetChiHuActionRank(tagChiHuResult & ChiHuResult)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbChiHuOrder=0;
|
|||
|
|
WORD wChiHuRight=ChiHuResult.wChiHuRight;
|
|||
|
|
WORD wChiHuKind=(ChiHuResult.wChiHuKind&0xFF00)>>4;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (BYTE i=0;i<8;i++)
|
|||
|
|
{
|
|||
|
|
wChiHuKind>>=1;
|
|||
|
|
if ((wChiHuKind&0x0001)!=0)
|
|||
|
|
cbChiHuOrder++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Ȩλ<C8A8><CEBB><EFBFBD><EFBFBD>
|
|||
|
|
for (BYTE i=0;i<16;i++)
|
|||
|
|
{
|
|||
|
|
wChiHuRight>>=1;
|
|||
|
|
if ((wChiHuRight&0x0001)!=0)
|
|||
|
|
cbChiHuOrder++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return cbChiHuOrder;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
WORD CGameLogic::EstimateEatCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
|
|||
|
|
ASSERT(IsValidCard(cbCurrentCard));
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbExcursion[3]={0,1,2};
|
|||
|
|
WORD wItemKind[3]={WIK_LEFT,WIK_CENTER,WIK_RIGHT};
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
WORD wEatKind=0;
|
|||
|
|
BYTE cbFirstIndex=0;
|
|||
|
|
BYTE cbCurrentIndex=SwitchToCardIndex(cbCurrentCard);
|
|||
|
|
//<2F>з<EFBFBD><D0B7><EFBFBD>
|
|||
|
|
if(cbCurrentIndex>=31)
|
|||
|
|
{
|
|||
|
|
for (BYTE i=0;i<CountArray(wItemKind);i++)
|
|||
|
|
{
|
|||
|
|
BYTE cbValueIndex=cbCurrentIndex%9;
|
|||
|
|
if ((cbValueIndex>=cbExcursion[i])&&((cbValueIndex-cbExcursion[i])<=4))
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
cbFirstIndex=cbCurrentIndex-cbExcursion[i];
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
if(cbFirstIndex<31) continue;
|
|||
|
|
if ((cbCurrentIndex!=cbFirstIndex)&&(cbCardIndex[cbFirstIndex]==0))
|
|||
|
|
continue;
|
|||
|
|
if ((cbCurrentIndex!=(cbFirstIndex+1))&&(cbCardIndex[cbFirstIndex+1]==0))
|
|||
|
|
continue;
|
|||
|
|
if ((cbCurrentIndex!=(cbFirstIndex+2))&&(cbCardIndex[cbFirstIndex+2]==0))
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wEatKind|=wItemKind[i];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else if(cbCurrentIndex>=27)
|
|||
|
|
{
|
|||
|
|
for (BYTE i=0;i<CountArray(wItemKind);i++)
|
|||
|
|
{
|
|||
|
|
BYTE cbValueIndex=cbCurrentIndex%9;
|
|||
|
|
if ((cbValueIndex>=cbExcursion[i])&&((cbValueIndex-cbExcursion[i])<=1))
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
cbFirstIndex=cbCurrentIndex-cbExcursion[i];
|
|||
|
|
if ((cbCurrentIndex!=cbFirstIndex)&&(cbCardIndex[cbFirstIndex]==0))
|
|||
|
|
continue;
|
|||
|
|
if ((cbCurrentIndex!=(cbFirstIndex+1))&&(cbCardIndex[cbFirstIndex+1]==0))
|
|||
|
|
continue;
|
|||
|
|
if ((cbCurrentIndex!=(cbFirstIndex+2))&&(cbCardIndex[cbFirstIndex+2]==0))
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wEatKind|=wItemKind[i];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
for (BYTE i=0;i<CountArray(wItemKind);i++)
|
|||
|
|
{
|
|||
|
|
BYTE cbValueIndex=cbCurrentIndex%9;
|
|||
|
|
if ((cbValueIndex>=cbExcursion[i])&&((cbValueIndex-cbExcursion[i])<=6))
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
cbFirstIndex=cbCurrentIndex-cbExcursion[i];
|
|||
|
|
if ((cbCurrentIndex!=cbFirstIndex)&&(cbCardIndex[cbFirstIndex]==0))
|
|||
|
|
continue;
|
|||
|
|
if ((cbCurrentIndex!=(cbFirstIndex+1))&&(cbCardIndex[cbFirstIndex+1]==0))
|
|||
|
|
continue;
|
|||
|
|
if ((cbCurrentIndex!=(cbFirstIndex+2))&&(cbCardIndex[cbFirstIndex+2]==0))
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wEatKind|=wItemKind[i];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><D7B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(cbCurrentIndex>=27)
|
|||
|
|
{
|
|||
|
|
if(cbCurrentIndex==27)
|
|||
|
|
{
|
|||
|
|
if(cbCardIndex[28]>0&&cbCardIndex[30]>0)
|
|||
|
|
wEatKind |=WIK_DNBL;
|
|||
|
|
if(cbCardIndex[29]>0&&cbCardIndex[30]>0)
|
|||
|
|
wEatKind |=WIK_DXBL;
|
|||
|
|
}
|
|||
|
|
if(cbCurrentIndex==28)
|
|||
|
|
{
|
|||
|
|
if(cbCardIndex[27]>0&&cbCardIndex[30]>0)
|
|||
|
|
wEatKind |=WIK_DNBC;
|
|||
|
|
}
|
|||
|
|
if(cbCurrentIndex==29)
|
|||
|
|
{
|
|||
|
|
if(cbCardIndex[27]>0&&cbCardIndex[30]>0)
|
|||
|
|
wEatKind |=WIK_DXBC;
|
|||
|
|
}
|
|||
|
|
if(cbCurrentIndex==30)
|
|||
|
|
{
|
|||
|
|
if(cbCardIndex[27]>0&&cbCardIndex[28]>0)
|
|||
|
|
wEatKind |=WIK_DNBR;
|
|||
|
|
if(cbCardIndex[27]>0&&cbCardIndex[29]>0)
|
|||
|
|
wEatKind |=WIK_DXBR;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return wEatKind;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
WORD CGameLogic::EstimatePengCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
|
|||
|
|
ASSERT(IsValidCard(cbCurrentCard));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
return (cbCardIndex[SwitchToCardIndex(cbCurrentCard)]>=2)?WIK_PENG:WIK_NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
WORD CGameLogic::EstimateGangCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
|
|||
|
|
ASSERT(IsValidCard(cbCurrentCard));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
return (cbCardIndex[SwitchToCardIndex(cbCurrentCard)]==3)?WIK_GANG:WIK_NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>
|
|||
|
|
WORD CGameLogic::AnalyseGangCard(BYTE cbCardIndex[MAX_INDEX], tagWeaveItem WeaveItem[], BYTE cbWeaveCount, tagGangCardResult & GangCardResult)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
WORD wActionMask=WIK_NULL;
|
|||
|
|
ZeroMemory(&GangCardResult,sizeof(GangCardResult));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>
|
|||
|
|
for (BYTE i=0;i<MAX_INDEX;i++)
|
|||
|
|
{
|
|||
|
|
if (cbCardIndex[i]==4)
|
|||
|
|
{
|
|||
|
|
wActionMask|=WIK_GANG;
|
|||
|
|
GangCardResult.cbCardData[GangCardResult.cbCardCount++]=SwitchToCardData(i);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>
|
|||
|
|
for (BYTE i=0;i<cbWeaveCount;i++)
|
|||
|
|
{
|
|||
|
|
if (WeaveItem[i].wWeaveKind==WIK_PENG)
|
|||
|
|
{
|
|||
|
|
if (cbCardIndex[SwitchToCardIndex(WeaveItem[i].cbCenterCard)]==1)
|
|||
|
|
{
|
|||
|
|
wActionMask|=WIK_GANG;
|
|||
|
|
GangCardResult.cbCardData[GangCardResult.cbCardCount++]=WeaveItem[i].cbCenterCard;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return wActionMask;
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
bool CGameLogic::AnalyseCard(BYTE cbCardIndex[MAX_INDEX], tagWeaveItem WeaveItem[], BYTE cbWeaveCount, CAnalyseItemArray & AnalyseItemArray,BYTE cbCurrentCard,bool bZimo)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
BYTE cbCardCount=0;
|
|||
|
|
for (BYTE i=0;i<MAX_INDEX;i++)
|
|||
|
|
cbCardCount+=cbCardIndex[i];
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbTempCardIndex[MAX_INDEX];
|
|||
|
|
CopyMemory(cbTempCardIndex,cbCardIndex,sizeof(cbTempCardIndex));
|
|||
|
|
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
ASSERT((cbCardCount>=2)&&(cbCardCount<=MAX_COUNT)&&((cbCardCount-2)%3==0));
|
|||
|
|
if ((cbCardCount<2)||(cbCardCount>MAX_COUNT)||((cbCardCount-2)%3!=0)) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbKindItemCount=0;
|
|||
|
|
tagKindItem KindItem[MAX_INDEX*2];
|
|||
|
|
ZeroMemory(KindItem,sizeof(KindItem));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
BYTE cbLessKindItem=(cbCardCount-2)/3;
|
|||
|
|
ASSERT((cbLessKindItem+cbWeaveCount)==4);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
if (cbLessKindItem == 0)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT((cbCardCount == 2) && (cbWeaveCount == 4));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
for (BYTE i = 0; i < MAX_INDEX; i++)
|
|||
|
|
{
|
|||
|
|
if (cbCardIndex[i] == 2)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
tagAnalyseItem AnalyseItem;
|
|||
|
|
ZeroMemory(&AnalyseItem, sizeof(AnalyseItem));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
|
|||
|
|
for (BYTE j = 0; j < cbWeaveCount; j++)
|
|||
|
|
{
|
|||
|
|
AnalyseItem.wWeaveKind[j] = WeaveItem[j].wWeaveKind;
|
|||
|
|
AnalyseItem.cbCenterCard[j] = WeaveItem[j].cbCenterCard;
|
|||
|
|
}
|
|||
|
|
AnalyseItem.cbCardEye = SwitchToCardData(i);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
AnalyseItemArray.Add(AnalyseItem);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
|
if (cbCardCount>=3)
|
|||
|
|
{
|
|||
|
|
for (BYTE i=0;i<MAX_INDEX;i++)
|
|||
|
|
{
|
|||
|
|
//ͬ<><CDAC><EFBFBD>ж<EFBFBD>
|
|||
|
|
if (cbCardIndex[i]>=3)
|
|||
|
|
{
|
|||
|
|
ASSERT( cbKindItemCount < CountArray(KindItem) );
|
|||
|
|
KindItem[cbKindItemCount].cbCenterCard=SwitchToCardData(i);
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[0]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[1]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[2]=i;
|
|||
|
|
KindItem[cbKindItemCount++].wWeaveKind=WIK_PENG;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
if ((i<(MAX_INDEX-2-7))&&(cbCardIndex[i]>0)&&((i%9)<7))
|
|||
|
|
{
|
|||
|
|
for (BYTE j=1;j<=cbCardIndex[i];j++)
|
|||
|
|
{
|
|||
|
|
if ((cbCardIndex[i+1]>=j)&&(cbCardIndex[i+2]>=j))
|
|||
|
|
{
|
|||
|
|
ASSERT( cbKindItemCount < CountArray(KindItem) );
|
|||
|
|
KindItem[cbKindItemCount].cbCenterCard=SwitchToCardData(i);
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[0]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[1]=i+1;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[2]=i+2;
|
|||
|
|
KindItem[cbKindItemCount++].wWeaveKind=WIK_LEFT;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (BYTE i=MAX_INDEX-7;i<MAX_INDEX-5;i++)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX];
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
CopyMemory(cbCardIndexTemp,cbCardIndex,sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (BYTE j=1;j<=cbCardIndex[i]&&cbCardIndex[i]>0;j++)
|
|||
|
|
{
|
|||
|
|
if ((cbCardIndex[i+1]>=j)&&(cbCardIndex[i+2]>=j))
|
|||
|
|
{
|
|||
|
|
ASSERT( cbKindItemCount < CountArray(KindItem) );
|
|||
|
|
KindItem[cbKindItemCount].cbCenterCard=SwitchToCardData(i);
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[0]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[1]=i+1;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[2]=i+2;
|
|||
|
|
KindItem[cbKindItemCount++].wWeaveKind=WIK_LEFT;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ϱ<EFBFBD>
|
|||
|
|
if(i==MAX_INDEX-7)
|
|||
|
|
{
|
|||
|
|
for (BYTE j=1;j<=cbCardIndex[i]&&cbCardIndex[i]>0;j++)
|
|||
|
|
{
|
|||
|
|
if ((cbCardIndex[i+1]>=j)&&(cbCardIndex[i+3]>=j))
|
|||
|
|
{
|
|||
|
|
ASSERT( cbKindItemCount < CountArray(KindItem) );
|
|||
|
|
KindItem[cbKindItemCount].cbCenterCard=SwitchToCardData(i);
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[0]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[1]=i+1;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[2]=i+3;
|
|||
|
|
KindItem[cbKindItemCount++].wWeaveKind=WIK_DNBL;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(i==MAX_INDEX-7)
|
|||
|
|
{
|
|||
|
|
for (BYTE j=1;j<=cbCardIndex[i]&&cbCardIndex[i]>0;j++)
|
|||
|
|
{
|
|||
|
|
if ((cbCardIndex[i+2]>=j)&&(cbCardIndex[i+3]>=j))
|
|||
|
|
{
|
|||
|
|
ASSERT( cbKindItemCount < CountArray(KindItem) );
|
|||
|
|
KindItem[cbKindItemCount].cbCenterCard=SwitchToCardData(i);
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[0]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[1]=i+2;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[2]=i+3;
|
|||
|
|
KindItem[cbKindItemCount++].wWeaveKind=WIK_DXBL;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>з<EFBFBD><D0B7><EFBFBD>
|
|||
|
|
for (BYTE i=MAX_INDEX-3;i<MAX_INDEX;i++)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
if ((i<(MAX_INDEX-2))&&(cbCardIndex[i]>0)&&((i%9)<7))
|
|||
|
|
{
|
|||
|
|
for (BYTE j=1;j<=cbCardIndex[i];j++)
|
|||
|
|
{
|
|||
|
|
if ((cbCardIndex[i+1]>=j)&&(cbCardIndex[i+2]>=j))
|
|||
|
|
{
|
|||
|
|
KindItem[cbKindItemCount].cbCenterCard=SwitchToCardData(i);
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[0]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[1]=i+1;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[2]=i+2;
|
|||
|
|
KindItem[cbKindItemCount++].wWeaveKind=WIK_LEFT;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>
|
|||
|
|
if (cbKindItemCount>=cbLessKindItem)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX];
|
|||
|
|
ZeroMemory(cbCardIndexTemp,sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbIndex[MAX_WEAVE]={0,1,2,3};
|
|||
|
|
tagKindItem * pKindItem[MAX_WEAVE];
|
|||
|
|
ZeroMemory(&pKindItem,sizeof(pKindItem));
|
|||
|
|
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
CopyMemory(cbCardIndexTemp,cbCardIndex,sizeof(cbCardIndexTemp));
|
|||
|
|
for (BYTE i=0;i<cbLessKindItem;i++)
|
|||
|
|
pKindItem[i]=&KindItem[cbIndex[i]];
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
bool bEnoughCard=true;
|
|||
|
|
for (BYTE i=0;i<cbLessKindItem*3;i++)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
BYTE cbCardIndex=pKindItem[i/3]->cbCardIndex[i%3];
|
|||
|
|
if (cbCardIndexTemp[cbCardIndex]==0)
|
|||
|
|
{
|
|||
|
|
bEnoughCard=false;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
cbCardIndexTemp[cbCardIndex]--;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>¹<EFBFBD><C2B9>ж<EFBFBD>
|
|||
|
|
if (bEnoughCard == true)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
BYTE cbCardEye = 0;
|
|||
|
|
|
|||
|
|
for (BYTE i = 0; i < MAX_INDEX; i++)
|
|||
|
|
{
|
|||
|
|
if (cbCardIndexTemp[i] == 2)
|
|||
|
|
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
cbCardEye = SwitchToCardData(i);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (cbCardEye != 0)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
tagAnalyseItem AnalyseItem;
|
|||
|
|
ZeroMemory(&AnalyseItem, sizeof(AnalyseItem));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (BYTE i = 0; i < cbWeaveCount; i++)
|
|||
|
|
{
|
|||
|
|
AnalyseItem.wWeaveKind[i] = WeaveItem[i].wWeaveKind;
|
|||
|
|
AnalyseItem.cbCenterCard[i] = WeaveItem[i].cbCenterCard;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (BYTE i = 0; i < cbLessKindItem; i++)
|
|||
|
|
{
|
|||
|
|
AnalyseItem.wWeaveKind[i + cbWeaveCount] = pKindItem[i]->wWeaveKind;
|
|||
|
|
AnalyseItem.cbCenterCard[i + cbWeaveCount] = pKindItem[i]->cbCenterCard;
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>滻;
|
|||
|
|
AnalyseItem.cbWeaveKingReplace = 0;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
AnalyseItem.cbCardEye = cbCardEye;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>滻;
|
|||
|
|
AnalyseItem.cbEyeKingReplace = 0;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
AnalyseItemArray.Add(AnalyseItem);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (cbIndex[cbLessKindItem-1]==(cbKindItemCount-1))
|
|||
|
|
{
|
|||
|
|
BYTE i = 0;
|
|||
|
|
for ( i=cbLessKindItem-1;i>0;i--)
|
|||
|
|
{
|
|||
|
|
if ((cbIndex[i-1]+1)!=cbIndex[i])
|
|||
|
|
{
|
|||
|
|
BYTE cbNewIndex=cbIndex[i-1];
|
|||
|
|
for (BYTE j=(i-1);j<cbLessKindItem;j++)
|
|||
|
|
cbIndex[j]=cbNewIndex+j-i+2;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (i==0)
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
cbIndex[cbLessKindItem-1]++;
|
|||
|
|
|
|||
|
|
} while (true);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (AnalyseItemArray.GetCount()>0)
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
//Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
AnalyseItemArray.RemoveAll();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
cbKindItemCount=0;
|
|||
|
|
ZeroMemory(KindItem,sizeof(KindItem));
|
|||
|
|
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD CGameLogic::AnalyseChiHuCard(BYTE cbCardIndex[MAX_INDEX], tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE cbCurrentCard, WORD wChiHuRight, tagChiHuResult & ChiHuResult, BYTE cbHuRule, bool bZimo, bool bRealHu)
|
|||
|
|
{
|
|||
|
|
if (cbHuRule == eWNMJHURuleEnum_Invalid)
|
|||
|
|
{
|
|||
|
|
return WIK_NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (cbHuRule == eWNMJHURuleEnum_YingHU)
|
|||
|
|
{
|
|||
|
|
return AnalyseYingHuCard(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard, wChiHuRight, ChiHuResult, bZimo, bRealHu);
|
|||
|
|
}
|
|||
|
|
else if (cbHuRule == eWNMJHURuleEnum_YiBianDaoHU)
|
|||
|
|
{
|
|||
|
|
return AnalyseYiBianDaoHuCard(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard, wChiHuRight, ChiHuResult, bZimo, bRealHu);
|
|||
|
|
}
|
|||
|
|
else if (cbHuRule == eWNMJHURuleEnum_HunHU)
|
|||
|
|
{
|
|||
|
|
WORD wAction = AnalyseYiBianDaoHuCard(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard, wChiHuRight, ChiHuResult, bZimo, bRealHu);
|
|||
|
|
if ( wAction != WIK_NULL )
|
|||
|
|
{
|
|||
|
|
return wAction;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return AnalyseYingHuCard(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard, wChiHuRight, ChiHuResult, bZimo, bRealHu);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return WIK_NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F>˿<EFBFBD>ת<EFBFBD><D7AA>
|
|||
|
|
BYTE CGameLogic::SwitchToCardData(BYTE cbCardIndex)
|
|||
|
|
{
|
|||
|
|
ASSERT(cbCardIndex<MAX_INDEX);
|
|||
|
|
|
|||
|
|
ASSERT(cbCardIndex<34);
|
|||
|
|
return ((cbCardIndex/9)<<4)|(cbCardIndex%9+1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>˿<EFBFBD>ת<EFBFBD><D7AA>
|
|||
|
|
BYTE CGameLogic::SwitchToCardIndex(BYTE cbCardData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
ASSERT(IsValidCard(cbCardData));
|
|||
|
|
////<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
//BYTE cbValue=cbCardData&MASK_VALUE;
|
|||
|
|
//BYTE cbColor=(cbCardData&MASK_COLOR)>>4;
|
|||
|
|
return ((cbCardData&MASK_COLOR)>>4)*9+(cbCardData&MASK_VALUE)-1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>˿<EFBFBD>ת<EFBFBD><D7AA>
|
|||
|
|
BYTE CGameLogic::SwitchToCardData(BYTE cbCardIndex[MAX_INDEX], BYTE cbCardData[MAX_COUNT],BYTE bMaxCount)
|
|||
|
|
{
|
|||
|
|
//ת<><D7AA><EFBFBD>˿<EFBFBD> <20><><EFBFBD>Ʒŵ<C6B7>ԭ<EFBFBD><D4AD>λ<EFBFBD><CEBB>
|
|||
|
|
BYTE bPosition=0;
|
|||
|
|
for (BYTE i=0;i<MAX_INDEX;i++)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if (cbCardIndex[i]!=0)
|
|||
|
|
{
|
|||
|
|
for (BYTE j=0;j<cbCardIndex[i];j++)
|
|||
|
|
{
|
|||
|
|
ASSERT(bPosition<bMaxCount);
|
|||
|
|
cbCardData[bPosition++]=SwitchToCardData(i);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return bPosition;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>˿<EFBFBD>ת<EFBFBD><D7AA>
|
|||
|
|
BYTE CGameLogic::SwitchToCardIndex(BYTE cbCardData[], BYTE cbCardCount, BYTE cbCardIndex[MAX_INDEX])
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
ZeroMemory(cbCardIndex,sizeof(BYTE)*MAX_INDEX);
|
|||
|
|
|
|||
|
|
//ת<><D7AA><EFBFBD>˿<EFBFBD>
|
|||
|
|
for (BYTE i=0;i<cbCardCount;i++)
|
|||
|
|
{
|
|||
|
|
cbCardIndex[SwitchToCardIndex(cbCardData[i])]++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return cbCardCount;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LONG CGameLogic::CalScore(tagChiHuResult & ChihuResult, LONG &lScore, LONG &lTimes, LONG &lExtScore, BYTE cbFan, bool bZhiAnGangFanbei)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
|
|||
|
|
ASSERT(ChihuResult.wChiHuKind!=CHK_NULL);
|
|||
|
|
if (ChihuResult.wChiHuKind== CHK_NULL) return 0;
|
|||
|
|
|
|||
|
|
//<2F><>ֵ<EFBFBD><D6B5>ʼ<EFBFBD><CABC>;
|
|||
|
|
lTimes = 1L;
|
|||
|
|
lExtScore = 0L;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
if (ChihuResult.wChiHuRight&CHR_QIANG_GANG)
|
|||
|
|
{
|
|||
|
|
lTimes *= 1;
|
|||
|
|
}
|
|||
|
|
//<2F>ܿ<EFBFBD>
|
|||
|
|
if (ChihuResult.wChiHuRight&CHR_GANG_FLOWER)
|
|||
|
|
{
|
|||
|
|
lTimes *= 1;
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
if (ChihuResult.wChiHuRight&CHR_TIAN)
|
|||
|
|
{
|
|||
|
|
lTimes *= 2;
|
|||
|
|
}
|
|||
|
|
//<2F>غ<EFBFBD>
|
|||
|
|
if (ChihuResult.wChiHuRight&CHR_DI)
|
|||
|
|
{
|
|||
|
|
lTimes *= 2;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//7<><37>
|
|||
|
|
if (ChihuResult.wChiHuKind&CHK_QI_DUI)
|
|||
|
|
{
|
|||
|
|
lTimes *= 2;
|
|||
|
|
}
|
|||
|
|
//13<31><33>
|
|||
|
|
if (ChihuResult.wChiHuKind&CHK_THIRTEEN)
|
|||
|
|
{
|
|||
|
|
lTimes *= 1;
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD>;
|
|||
|
|
if (ChihuResult.wChiHuKind&CHK_SERVEN)
|
|||
|
|
{
|
|||
|
|
lTimes *= 2;
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
if (ChihuResult.wChiHuKind&CHK_PENG_PENG)
|
|||
|
|
{
|
|||
|
|
lTimes *= 2;
|
|||
|
|
}
|
|||
|
|
//<2F><>һɫ;
|
|||
|
|
if (ChihuResult.wChiHuKind&CHK_HUNYISE)
|
|||
|
|
{
|
|||
|
|
lTimes *= 2;
|
|||
|
|
}
|
|||
|
|
//<2F><>һɫ;
|
|||
|
|
if (ChihuResult.wChiHuKind&CHK_QINYISE)
|
|||
|
|
{
|
|||
|
|
lTimes *= 4;
|
|||
|
|
}
|
|||
|
|
//<2F><>һɫ;
|
|||
|
|
if (ChihuResult.wChiHuKind&CHK_ZIYISE)
|
|||
|
|
{
|
|||
|
|
lTimes *= 16;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ( cbFan == eWNMJRuleEnum_OneTwoFAN )
|
|||
|
|
{
|
|||
|
|
if (ChihuResult.wChiHuRight&CHR_GANG_FLOWER)
|
|||
|
|
{
|
|||
|
|
lTimes *= 2;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (ChihuResult.wChiHuRight&CHR_ZI_MO)
|
|||
|
|
{
|
|||
|
|
lTimes *= 1;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
lTimes *= 2;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if ( cbFan == eWNMJRuleEnum_TwoThreeFAN )
|
|||
|
|
{
|
|||
|
|
if (ChihuResult.wChiHuRight&CHR_GANG_FLOWER)
|
|||
|
|
{
|
|||
|
|
lTimes *= 3;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (ChihuResult.wChiHuRight&CHR_ZI_MO)
|
|||
|
|
{
|
|||
|
|
lTimes *= 2;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
lTimes *= 3;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>,<2C>غ<EFBFBD>,<2C><><EFBFBD><EFBFBD>,<2C>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
if (((ChihuResult.wChiHuRight&CHR_TIAN) || (ChihuResult.wChiHuRight&CHR_DI) || (ChihuResult.wChiHuRight&CHR_QIANG_GANG) || (ChihuResult.wChiHuRight&CHR_GANG_FLOWER))
|
|||
|
|
&& ((ChihuResult.wChiHuRight&CHR_HAS_KING) != CHR_HAS_KING))
|
|||
|
|
{
|
|||
|
|
lTimes *= 2;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (ChihuResult.wChiHuRight&CHR_GANG_FLOWER && !(ChihuResult.wChiHuRight&CHR_GANG_ZHONGSE))
|
|||
|
|
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,û<>ܵ<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
if ((ChihuResult.wChiHuKind&CHK_HUNYISE) || (ChihuResult.wChiHuKind&CHK_QINYISE))
|
|||
|
|
{
|
|||
|
|
if (cbFan == eWNMJRuleEnum_OneTwoFAN)
|
|||
|
|
{
|
|||
|
|
lTimes = 2;
|
|||
|
|
}
|
|||
|
|
else if (cbFan == eWNMJRuleEnum_TwoThreeFAN)
|
|||
|
|
{
|
|||
|
|
lTimes = 3;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (ChihuResult.wChiHuKind&CHK_ZIYISE)
|
|||
|
|
{
|
|||
|
|
if (cbFan == eWNMJRuleEnum_OneTwoFAN)
|
|||
|
|
{
|
|||
|
|
lTimes = 4;
|
|||
|
|
}
|
|||
|
|
else if (cbFan == eWNMJRuleEnum_TwoThreeFAN)
|
|||
|
|
{
|
|||
|
|
lTimes = 6;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int nMaxTimes = 0;
|
|||
|
|
if (cbFan == eWNMJRuleEnum_OneTwoFAN)
|
|||
|
|
{
|
|||
|
|
nMaxTimes = 16;
|
|||
|
|
}
|
|||
|
|
else if (cbFan == eWNMJRuleEnum_TwoThreeFAN)
|
|||
|
|
{
|
|||
|
|
nMaxTimes = 24;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (bZhiAnGangFanbei)
|
|||
|
|
{
|
|||
|
|
nMaxTimes *= 2;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (lTimes > nMaxTimes)
|
|||
|
|
{
|
|||
|
|
lTimes = nMaxTimes;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return lTimes;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//13<31><33>
|
|||
|
|
bool CGameLogic::IsNeatAlone(BYTE cbCardIndex[MAX_INDEX],BYTE &cbGerman,BYTE cbCurrentCard,bool bZimo)
|
|||
|
|
{
|
|||
|
|
BYTE cbTempCardIndex[MAX_INDEX];
|
|||
|
|
CopyMemory(cbTempCardIndex,cbCardIndex,sizeof(BYTE)*MAX_INDEX);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
BYTE cbCardCount=0;
|
|||
|
|
for (BYTE i=0;i<MAX_INDEX;i++)
|
|||
|
|
cbCardCount+=cbTempCardIndex[i];
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
|
|||
|
|
if(cbCardCount<MAX_COUNT) return false;
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD>ж<EFBFBD>
|
|||
|
|
bool bRet=true;
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
const BYTE COMMON_TYPE_SUM = 9;
|
|||
|
|
for (BYTE i = 0; i<MAX_INDEX; i++)
|
|||
|
|
{
|
|||
|
|
//<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(cbTempCardIndex[i] > 1)
|
|||
|
|
{
|
|||
|
|
bRet=false;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
if(bRet)
|
|||
|
|
{
|
|||
|
|
BYTE* pKingIndex = 0;
|
|||
|
|
for(BYTE i=0; i<3; i++)
|
|||
|
|
{
|
|||
|
|
pKingIndex = &cbTempCardIndex[i*COMMON_TYPE_SUM];
|
|||
|
|
for(BYTE j=0; j<COMMON_TYPE_SUM; j++)
|
|||
|
|
{
|
|||
|
|
if(pKingIndex[j] > 0)
|
|||
|
|
{
|
|||
|
|
for(BYTE k=0; k<2; k++)
|
|||
|
|
{
|
|||
|
|
j ++;
|
|||
|
|
|
|||
|
|
if(j<COMMON_TYPE_SUM)
|
|||
|
|
{
|
|||
|
|
if(pKingIndex[j] > 0)
|
|||
|
|
{
|
|||
|
|
bRet= false;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(bRet)
|
|||
|
|
{
|
|||
|
|
//<2F>¹<EFBFBD><C2B9>ж<EFBFBD>
|
|||
|
|
cbGerman=1;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//3˳ 3<><33>
|
|||
|
|
bool CGameLogic::IsNeat3(const BYTE cbCardIndex[MAX_INDEX],BYTE &cbGerman)
|
|||
|
|
{
|
|||
|
|
//<2F>¹<EFBFBD>
|
|||
|
|
cbGerman=1;
|
|||
|
|
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX];
|
|||
|
|
CopyMemory(cbCardIndexTemp,cbCardIndex,sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbIndex[4]={0,1,2,3};
|
|||
|
|
tagKindItem * pKindItem[4];
|
|||
|
|
ZeroMemory(&pKindItem,sizeof(pKindItem));
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
BYTE cbCardCount = 0;
|
|||
|
|
for(BYTE i=0; i<MAX_INDEX; i++)
|
|||
|
|
{
|
|||
|
|
cbCardCount += cbCardIndexTemp[i];
|
|||
|
|
}
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
ASSERT(cbCardCount<=14);
|
|||
|
|
if((cbCardCount%3) != 0)
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BYTE cbLessKindItem = cbCardCount/3;
|
|||
|
|
if (cbLessKindItem == 0)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbKindItemCount=0;
|
|||
|
|
tagKindItem KindItem[MAX_INDEX-2];
|
|||
|
|
ZeroMemory(KindItem,sizeof(KindItem));
|
|||
|
|
|
|||
|
|
for (BYTE i=0;i<MAX_INDEX;i++)
|
|||
|
|
{
|
|||
|
|
//ͬ<><CDAC><EFBFBD>ж<EFBFBD>
|
|||
|
|
if (cbCardIndex[i]>=3)
|
|||
|
|
{
|
|||
|
|
KindItem[cbKindItemCount].cbCenterCard=SwitchToCardData(i);
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[0]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[1]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[2]=i;
|
|||
|
|
KindItem[cbKindItemCount++].wWeaveKind=WIK_PENG;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
if ((i<(MAX_INDEX-2-7))&&(cbCardIndex[i]>0)&&((i%9)<7))
|
|||
|
|
{
|
|||
|
|
for (BYTE j=1;j<=cbCardIndex[i];j++)
|
|||
|
|
{
|
|||
|
|
if ((cbCardIndex[i+1]>=j)&&(cbCardIndex[i+2]>=j))
|
|||
|
|
{
|
|||
|
|
KindItem[cbKindItemCount].cbCenterCard=SwitchToCardData(i);
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[0]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[1]=i+1;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[2]=i+2;
|
|||
|
|
KindItem[cbKindItemCount++].wWeaveKind=WIK_LEFT;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (BYTE i=MAX_INDEX-7;i<MAX_INDEX-5;i++)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX];
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
CopyMemory(cbCardIndexTemp,cbCardIndex,sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (BYTE j=1;j<=cbCardIndex[i]&&cbCardIndex[i]>0;j++)
|
|||
|
|
{
|
|||
|
|
if ((cbCardIndex[i+1]>=j)&&(cbCardIndex[i+2]>=j))
|
|||
|
|
{
|
|||
|
|
KindItem[cbKindItemCount].cbCenterCard=SwitchToCardData(i);
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[0]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[1]=i+1;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[2]=i+2;
|
|||
|
|
KindItem[cbKindItemCount++].wWeaveKind=WIK_LEFT;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ϱ<EFBFBD>
|
|||
|
|
if(i==MAX_INDEX-7)
|
|||
|
|
{
|
|||
|
|
for (BYTE j=1;j<=cbCardIndex[i]&&cbCardIndex[i]>0;j++)
|
|||
|
|
{
|
|||
|
|
if ((cbCardIndex[i+1]>=j)&&(cbCardIndex[i+3]>=j))
|
|||
|
|
{
|
|||
|
|
KindItem[cbKindItemCount].cbCenterCard=SwitchToCardData(i);
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[0]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[1]=i+1;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[2]=i+3;
|
|||
|
|
KindItem[cbKindItemCount++].wWeaveKind=WIK_DNBL;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(i==MAX_INDEX-7)
|
|||
|
|
{
|
|||
|
|
for (BYTE j=1;j<=cbCardIndex[i]&&cbCardIndex[i]>0;j++)
|
|||
|
|
{
|
|||
|
|
if ((cbCardIndex[i+2]>=j)&&(cbCardIndex[i+3]>=j))
|
|||
|
|
{
|
|||
|
|
KindItem[cbKindItemCount].cbCenterCard=SwitchToCardData(i);
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[0]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[1]=i+2;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[2]=i+3;
|
|||
|
|
KindItem[cbKindItemCount++].wWeaveKind=WIK_DXBL;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
//<2F>з<EFBFBD><D0B7><EFBFBD>
|
|||
|
|
for (BYTE i=MAX_INDEX-3;i<MAX_INDEX;i++)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
if ((i<(MAX_INDEX-2))&&(cbCardIndex[i]>0)&&((i%9)<7))
|
|||
|
|
{
|
|||
|
|
for (BYTE j=1;j<=cbCardIndex[i];j++)
|
|||
|
|
{
|
|||
|
|
if ((cbCardIndex[i+1]>=j)&&(cbCardIndex[i+2]>=j))
|
|||
|
|
{
|
|||
|
|
KindItem[cbKindItemCount].cbCenterCard=SwitchToCardData(i);
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[0]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[1]=i+1;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[2]=i+2;
|
|||
|
|
KindItem[cbKindItemCount++].wWeaveKind=WIK_LEFT;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>
|
|||
|
|
if (cbKindItemCount>=cbLessKindItem)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX];
|
|||
|
|
ZeroMemory(cbCardIndexTemp,sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbIndex[4]={0,1,2,3};
|
|||
|
|
tagKindItem * pKindItem[4];
|
|||
|
|
ZeroMemory(&pKindItem,sizeof(pKindItem));
|
|||
|
|
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
CopyMemory(cbCardIndexTemp,cbCardIndex,sizeof(cbCardIndexTemp));
|
|||
|
|
for (BYTE i=0;i<cbLessKindItem;i++)
|
|||
|
|
{
|
|||
|
|
pKindItem[i]=&KindItem[cbIndex[i]];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
bool bEnoughCard=true;
|
|||
|
|
for (BYTE i=0;i<cbLessKindItem*3;i++)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
BYTE cbCardIndex=pKindItem[i/3]->cbCardIndex[i%3];
|
|||
|
|
if (cbCardIndexTemp[cbCardIndex]==0)
|
|||
|
|
{
|
|||
|
|
bEnoughCard=false;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
cbCardIndexTemp[cbCardIndex]--;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if(bEnoughCard)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (cbIndex[cbLessKindItem-1] == (cbKindItemCount-1))
|
|||
|
|
{
|
|||
|
|
BYTE i = 0;
|
|||
|
|
for (i=cbLessKindItem-1;i>0;i--)
|
|||
|
|
{
|
|||
|
|
if ((cbIndex[i-1]+1) != cbIndex[i])
|
|||
|
|
{
|
|||
|
|
BYTE cbNewIndex = cbIndex[i-1];
|
|||
|
|
for (BYTE j=(i-1); j<cbLessKindItem; j++)
|
|||
|
|
{
|
|||
|
|
cbIndex[j]=cbNewIndex+j-i+2;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (i==0)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
cbIndex[cbLessKindItem-1]++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
} while (true);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>ǵ¹<C7B5>
|
|||
|
|
cbGerman=0;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
cbKindItemCount=0;
|
|||
|
|
ZeroMemory(KindItem,sizeof(KindItem));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
|
if (cbCardCount>=3)
|
|||
|
|
{
|
|||
|
|
for (BYTE i=0;i<MAX_INDEX;i++)
|
|||
|
|
{
|
|||
|
|
//ͬ<><CDAC><EFBFBD>ж<EFBFBD>
|
|||
|
|
if (cbCardIndex[i]>=3)
|
|||
|
|
{
|
|||
|
|
ASSERT( cbKindItemCount < CountArray(KindItem) );
|
|||
|
|
KindItem[cbKindItemCount].cbCenterCard=SwitchToCardData(i);
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[0]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[1]=i;
|
|||
|
|
KindItem[cbKindItemCount].cbCardIndex[2]=i;
|
|||
|
|
KindItem[cbKindItemCount++].wWeaveKind=WIK_PENG;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>
|
|||
|
|
if (cbKindItemCount>=cbLessKindItem)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX];
|
|||
|
|
ZeroMemory(cbCardIndexTemp,sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbIndex[MAX_WEAVE]={0,1,2,3};
|
|||
|
|
tagKindItem * pKindItem[MAX_WEAVE];
|
|||
|
|
ZeroMemory(&pKindItem,sizeof(pKindItem));
|
|||
|
|
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
CopyMemory(cbCardIndexTemp,cbCardIndex,sizeof(cbCardIndexTemp));
|
|||
|
|
for (BYTE i=0;i<cbLessKindItem;i++)
|
|||
|
|
pKindItem[i]=&KindItem[cbIndex[i]];
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (cbIndex[cbLessKindItem-1] == (cbKindItemCount-1))
|
|||
|
|
{
|
|||
|
|
BYTE i = 0;
|
|||
|
|
for (i=cbLessKindItem-1;i>0;i--)
|
|||
|
|
{
|
|||
|
|
if ((cbIndex[i-1]+1) != cbIndex[i])
|
|||
|
|
{
|
|||
|
|
BYTE cbNewIndex = cbIndex[i-1];
|
|||
|
|
for (BYTE j=(i-1); j<cbLessKindItem; j++)
|
|||
|
|
{
|
|||
|
|
cbIndex[j]=cbNewIndex+j-i+2;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (i==0)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
cbIndex[cbLessKindItem-1]++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
} while (true);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F>Ƿ<EFBFBD>ȫ2
|
|||
|
|
bool CGameLogic::IsNeat2(BYTE cbCardIndex[MAX_INDEX],tagWeaveItem WeaveItem[], BYTE cbWeaveCount)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
|
|||
|
|
if(cbWeaveCount>0) return false;
|
|||
|
|
|
|||
|
|
//<2F>¹<EFBFBD><C2B9>ж<EFBFBD>
|
|||
|
|
for(BYTE i=0; i<MAX_INDEX; i++)
|
|||
|
|
{
|
|||
|
|
if(cbCardIndex[i] != 0 && cbCardIndex[i] != 2 &&cbCardIndex[i] != 4)
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
//<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
|
|||
|
|
bool CGameLogic::IsQiXiaoDui(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], const BYTE cbWeaveCount,const BYTE cbCurrentCard,BYTE &cbGerman,bool bZimo)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>;
|
|||
|
|
if (cbWeaveCount!=0) return false;
|
|||
|
|
|
|||
|
|
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>;
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX];
|
|||
|
|
CopyMemory(cbCardIndexTemp,cbCardIndex,sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
//<2F><>Ŀ<EFBFBD><C4BF>֤;
|
|||
|
|
ASSERT(GetCardCount(cbCardIndexTemp)%2==0);
|
|||
|
|
if(GetCardCount(cbCardIndexTemp)%2 !=0) return false;
|
|||
|
|
|
|||
|
|
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>;
|
|||
|
|
BYTE cbCurrentIndex = SwitchToCardIndex(cbCurrentCard);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>㵥<EFBFBD><E3B5A5>;
|
|||
|
|
for (BYTE i=0;i<MAX_INDEX;i++)
|
|||
|
|
{
|
|||
|
|
BYTE cbCardCount=cbCardIndexTemp[i];
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>;
|
|||
|
|
if( cbCardCount == 1 || cbCardCount == 3 ) return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//7<><37>
|
|||
|
|
bool CGameLogic::ServenStar(BYTE cbCardIndex[MAX_INDEX], BYTE &cbGerman, BYTE cbCurrentCard, bool bZimo, bool bChongfeng)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
cbGerman=0;
|
|||
|
|
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX];
|
|||
|
|
CopyMemory(cbCardIndexTemp,cbCardIndex,sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
if (!bChongfeng)
|
|||
|
|
{ //ȫ<><C8AB><EFBFBD><EFBFBD>;
|
|||
|
|
bool bRet = false;
|
|||
|
|
bool bAlone = IsNeatAlone(cbCardIndexTemp, cbGerman, cbCurrentCard, bZimo);
|
|||
|
|
if (bAlone == false)
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//7<><37><EFBFBD><EFBFBD>¼
|
|||
|
|
BYTE cbHasFeng[7];
|
|||
|
|
ZeroMemory(cbHasFeng,sizeof(cbHasFeng));
|
|||
|
|
for(int i=27; i<34; i++)
|
|||
|
|
{
|
|||
|
|
cbHasFeng[i-27]=cbCardIndexTemp[i];
|
|||
|
|
|
|||
|
|
if (!bChongfeng)
|
|||
|
|
{
|
|||
|
|
//<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
if (cbHasFeng[i - 27] > 1) return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//7<><37>ȫ
|
|||
|
|
int j=0;
|
|||
|
|
for (int i=0;i<7;i++)
|
|||
|
|
{
|
|||
|
|
if(cbHasFeng[i]>0)
|
|||
|
|
j++;
|
|||
|
|
}
|
|||
|
|
if(j==7)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD>㸱<EFBFBD><E3B8B1>
|
|||
|
|
BYTE CGameLogic::GetKingFromBrother(BYTE cbBrotherData)
|
|||
|
|
{
|
|||
|
|
if(IsValidCard(cbBrotherData) == false)
|
|||
|
|
{
|
|||
|
|
return 0xFF;
|
|||
|
|
}
|
|||
|
|
BYTE cbColor = cbBrotherData & MASK_COLOR;
|
|||
|
|
BYTE cbValue = (cbBrotherData & MASK_VALUE) + 1;
|
|||
|
|
|
|||
|
|
//<2F><> <20><> Ͳ
|
|||
|
|
if(cbColor != 0x30)
|
|||
|
|
{
|
|||
|
|
if(cbValue > 0x09)
|
|||
|
|
{
|
|||
|
|
cbValue = 0x01;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if(cbValue < 0x06)
|
|||
|
|
{
|
|||
|
|
if(cbValue > 0x04)
|
|||
|
|
{
|
|||
|
|
cbValue = 0x01;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if(cbValue > 0x07)
|
|||
|
|
{
|
|||
|
|
cbValue = 0x05;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return (cbColor | cbValue);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CGameLogic::GetCardRemoveRepeat(BYTE cbCardIndex[MAX_INDEX], BYTE cbCardData[MAX_COUNT], BYTE &nCount)
|
|||
|
|
{
|
|||
|
|
nCount = 0;
|
|||
|
|
for (BYTE i = 0; i < MAX_INDEX; ++i)
|
|||
|
|
{
|
|||
|
|
if (cbCardIndex[i] > 0)
|
|||
|
|
{
|
|||
|
|
cbCardData[nCount] = SwitchToCardData(i);
|
|||
|
|
++nCount;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BYTE CGameLogic::AnalyseTingCard(const BYTE cbCardIndex[MAX_INDEX], tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE cbCurrentCard, WORD wChiHuRight, tagChiHuResult & ChiHuResult, BYTE cbHuRule, bool bZimo /*= false*/, bool bTurnAll, bool bRealTing)
|
|||
|
|
{ //<2F><><EFBFBD><EFBFBD>ͣ<EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
WORD wChiHuKind = CHK_NULL;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>;
|
|||
|
|
ZeroMemory(&ChiHuResult, sizeof(ChiHuResult));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>;
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX];
|
|||
|
|
CopyMemory(cbCardIndexTemp, cbCardIndex, sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
BYTE cbRemoveRepeat = 0;
|
|||
|
|
BYTE cbCardDataRemoveRepeat[MAX_COUNT] = { 0 };
|
|||
|
|
|
|||
|
|
GetCardRemoveRepeat(cbCardIndexTemp, cbCardDataRemoveRepeat, cbRemoveRepeat);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>;
|
|||
|
|
if (cbCurrentCard != 0)
|
|||
|
|
cbCardIndexTemp[SwitchToCardIndex(cbCurrentCard)]++;
|
|||
|
|
|
|||
|
|
if ( bZimo )
|
|||
|
|
{
|
|||
|
|
cbCardDataRemoveRepeat[cbRemoveRepeat] = cbCurrentCard;
|
|||
|
|
++cbRemoveRepeat;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!bTurnAll)
|
|||
|
|
{
|
|||
|
|
for (BYTE i = 0; i < cbRemoveRepeat; ++i)
|
|||
|
|
{
|
|||
|
|
RemoveCard(cbCardIndexTemp, cbCardDataRemoveRepeat[i]);
|
|||
|
|
|
|||
|
|
for (BYTE j = 0; j < MAX_INDEX; j++)
|
|||
|
|
{
|
|||
|
|
BYTE cbCurrentCardTemp = SwitchToCardData(j);
|
|||
|
|
|
|||
|
|
if (WIK_CHI_HU == AnalyseChiHuCard(cbCardIndexTemp, WeaveItem, cbWeaveCount, cbCurrentCardTemp, wChiHuRight, ChiHuResult, cbHuRule, bZimo, false))
|
|||
|
|
{
|
|||
|
|
if (IsCheckZhongSe(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard, ChiHuResult, cbHuRule, bRealTing))
|
|||
|
|
{
|
|||
|
|
ChiHuResult.wChiHuRight |= CHR_HAS_KING;
|
|||
|
|
return WIK_CHI_HU;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
cbCardIndexTemp[SwitchToCardIndex(cbCardDataRemoveRepeat[i])]++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
tagChiHuResult tempChiHuResult;
|
|||
|
|
|
|||
|
|
bool bHuPai = false;
|
|||
|
|
for (BYTE i = 0; i < cbRemoveRepeat; ++i)
|
|||
|
|
{
|
|||
|
|
RemoveCard(cbCardIndexTemp, cbCardDataRemoveRepeat[i]);
|
|||
|
|
|
|||
|
|
for (BYTE j = 0; j < MAX_INDEX; j++)
|
|||
|
|
{
|
|||
|
|
BYTE cbCurrentCardTemp = SwitchToCardData(j);
|
|||
|
|
|
|||
|
|
if (WIK_CHI_HU == AnalyseChiHuCard(cbCardIndexTemp, WeaveItem, cbWeaveCount, cbCurrentCardTemp, wChiHuRight, tempChiHuResult, cbHuRule, bZimo, false))
|
|||
|
|
{
|
|||
|
|
if (IsCheckZhongSe(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard, tempChiHuResult, cbHuRule, bRealTing))
|
|||
|
|
{
|
|||
|
|
bHuPai = true;
|
|||
|
|
tempChiHuResult.wChiHuRight |= CHR_HAS_KING;
|
|||
|
|
|
|||
|
|
CompareChiHuResult( ChiHuResult, tempChiHuResult );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
cbCardIndexTemp[SwitchToCardIndex(cbCardDataRemoveRepeat[i])]++;
|
|||
|
|
}
|
|||
|
|
if (bHuPai)
|
|||
|
|
{
|
|||
|
|
return WIK_CHI_HU;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return WIK_NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CGameLogic::IsTingCard(const BYTE cbCardIndex[MAX_INDEX], tagWeaveItem WeaveItem[], BYTE cbWeaveCount,
|
|||
|
|
BYTE cbCurrentCard, WORD wChiHuRight, tagChiHuResult& ChiHuResult, BYTE cbHuRule, bool bZimo /*= true*/, bool bTurnAll /*= false*/)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX];
|
|||
|
|
CopyMemory(cbCardIndexTemp, cbCardIndex, sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
if (!bTurnAll)
|
|||
|
|
{
|
|||
|
|
for (BYTE i = 0; i < MAX_INDEX; i++)
|
|||
|
|
{
|
|||
|
|
BYTE cbCurrentCardTemp = SwitchToCardData(i);
|
|||
|
|
if (WIK_CHI_HU == AnalyseChiHuCard(cbCardIndexTemp, WeaveItem, cbWeaveCount, cbCurrentCardTemp, wChiHuRight, ChiHuResult, cbHuRule, bZimo, false))
|
|||
|
|
{
|
|||
|
|
if (IsCheckZhongSe(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard, ChiHuResult, cbHuRule, true))
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
tagChiHuResult tempChiHuResult;
|
|||
|
|
|
|||
|
|
bool bHuPai = false;
|
|||
|
|
|
|||
|
|
for (BYTE i = 0; i < MAX_INDEX; i++)
|
|||
|
|
{
|
|||
|
|
BYTE cbCurrentCardTemp = SwitchToCardData(i);
|
|||
|
|
if (WIK_CHI_HU == AnalyseChiHuCard(cbCardIndexTemp, WeaveItem, cbWeaveCount, cbCurrentCardTemp, wChiHuRight, tempChiHuResult, cbHuRule, bZimo, false))
|
|||
|
|
{
|
|||
|
|
if (IsCheckZhongSe(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard, tempChiHuResult, cbHuRule, true))
|
|||
|
|
{
|
|||
|
|
bHuPai = true;
|
|||
|
|
tempChiHuResult.wChiHuRight |= CHR_HAS_KING;
|
|||
|
|
|
|||
|
|
CompareChiHuResult(ChiHuResult, tempChiHuResult);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (bHuPai)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>һɫ<D2BB><C9AB>
|
|||
|
|
bool CGameLogic::IsQingYiSe(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], const BYTE cbItemCount, const BYTE cbCurrentCard)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ƺ<EFBFBD><C6BA>ж<EFBFBD>;
|
|||
|
|
BYTE cbCardColor = 0xFF;
|
|||
|
|
|
|||
|
|
for (BYTE i = 0; i < MAX_INDEX; i++)
|
|||
|
|
{
|
|||
|
|
if (cbCardIndex[i] != 0)
|
|||
|
|
{
|
|||
|
|
//<2F><>ɫ<EFBFBD>ж<EFBFBD>;
|
|||
|
|
if (cbCardColor != 0xFF)
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>û<EFBFBD>ɫ;
|
|||
|
|
cbCardColor = (SwitchToCardData(i)&MASK_COLOR);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;(<28><>һ<EFBFBD>ֻ<EFBFBD>ɫ<EFBFBD><C9AB>ɫ<EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>,ֱ<><D6B1><EFBFBD><EFBFBD>9λ,<2C>ҵ<EFBFBD><D2B5>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ɫ);
|
|||
|
|
i = (i / 9 + 1) * 9 - 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ((cbCurrentCard&MASK_COLOR) != cbCardColor) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>;
|
|||
|
|
for (BYTE i = 0; i < cbItemCount; i++)
|
|||
|
|
{
|
|||
|
|
BYTE cbCenterCard = WeaveItem[i].cbCenterCard;
|
|||
|
|
if ((cbCenterCard&MASK_COLOR) != cbCardColor) return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CGameLogic::IsHunYiSe(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], const BYTE cbItemCount, const BYTE cbCurrentCard)
|
|||
|
|
{
|
|||
|
|
BYTE cbCardColor = 0xFF;
|
|||
|
|
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX] = {0};
|
|||
|
|
memcpy(cbCardIndexTemp, cbCardIndex, sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
BYTE cbCardDataIndex = SwitchToCardIndex(cbCurrentCard);
|
|||
|
|
cbCardIndexTemp[cbCardDataIndex]++;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>;
|
|||
|
|
for (BYTE i = 0; i < cbItemCount; i++)
|
|||
|
|
{
|
|||
|
|
BYTE cbCenterCard = WeaveItem[i].cbCenterCard;
|
|||
|
|
BYTE cbCardDataIndex = SwitchToCardIndex(cbCenterCard);
|
|||
|
|
|
|||
|
|
cbCardIndexTemp[cbCardDataIndex]++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for (BYTE i = 0; i < (MAX_INDEX - 7); i++)
|
|||
|
|
{
|
|||
|
|
if (cbCardIndexTemp[i] != 0)
|
|||
|
|
{
|
|||
|
|
//<2F><>ɫ<EFBFBD>ж<EFBFBD>;
|
|||
|
|
if (cbCardColor != 0xFF)
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>û<EFBFBD>ɫ;
|
|||
|
|
cbCardColor = (SwitchToCardData(i)&MASK_COLOR);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;(<28><>һ<EFBFBD>ֻ<EFBFBD>ɫ<EFBFBD><C9AB>ɫ<EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>,ֱ<><D6B1><EFBFBD><EFBFBD>9λ,<2C>ҵ<EFBFBD><D2B5>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ɫ);
|
|||
|
|
i = (i / 9 + 1) * 9 - 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CGameLogic::IsZiPai(BYTE cbCardData)
|
|||
|
|
{
|
|||
|
|
return ((cbCardData&MASK_COLOR) == 0x30);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CGameLogic::IsZiYiSe(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], const BYTE cbItemCount, const BYTE cbCurrentCard)
|
|||
|
|
{
|
|||
|
|
if (!IsZiPai(cbCurrentCard)) return false;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>;
|
|||
|
|
for (BYTE i = 0; i < cbItemCount; i++)
|
|||
|
|
{
|
|||
|
|
BYTE cbCenterCard = WeaveItem[i].cbCenterCard;
|
|||
|
|
if (!IsZiPai(cbCenterCard)) return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for (BYTE i = 0; i < (MAX_INDEX - 7); i++)
|
|||
|
|
{
|
|||
|
|
if (cbCardIndex[i] != 0)
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
WORD CGameLogic::AnalyseYingHuCard(BYTE cbCardIndex[MAX_INDEX], tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE cbCurrentCard, WORD wChiHuRight, tagChiHuResult & ChiHuResult, bool bZimo /*= false*/, bool bRealHu /*= true*/)
|
|||
|
|
{
|
|||
|
|
BYTE cbValue = cbCurrentCard&MASK_VALUE;
|
|||
|
|
BYTE cbColor = (cbCurrentCard&MASK_COLOR) >> 4;
|
|||
|
|
|
|||
|
|
if (bRealHu && (cbColor < 3) && (cbValue < 5))
|
|||
|
|
{ //5<><35><EFBFBD>µIJ<C2B5><C4B2>ܺ<EFBFBD>;(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><D7BF>Ժ<EFBFBD>);
|
|||
|
|
return WIK_NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD wChiHuKind = CHK_NULL;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
ZeroMemory(&ChiHuResult, sizeof(ChiHuResult));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX];
|
|||
|
|
CopyMemory(cbCardIndexTemp, cbCardIndex, sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
if (cbCurrentCard != 0)
|
|||
|
|
cbCardIndexTemp[SwitchToCardIndex(cbCurrentCard)]++;
|
|||
|
|
|
|||
|
|
//<2F><>ģȨλ
|
|||
|
|
if (bZimo)
|
|||
|
|
{
|
|||
|
|
wChiHuRight |= CHR_ZI_MO;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Ȩλ<C8A8><CEBB><EFBFBD><EFBFBD> <20>ܺ<EFBFBD>+<2B><><EFBFBD><EFBFBD> = <20><><EFBFBD>ϻ<EFBFBD>
|
|||
|
|
if ((wChiHuRight&CHR_QIANG_GANG) && (wChiHuRight&CHR_ZI_MO))
|
|||
|
|
{
|
|||
|
|
wChiHuRight &= ~CHR_QIANG_GANG;
|
|||
|
|
wChiHuRight &= ~CHR_ZI_MO;
|
|||
|
|
wChiHuRight |= CHR_GANG_FLOWER;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>¹<EFBFBD><C2B9><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE bGerman = 0;
|
|||
|
|
|
|||
|
|
//7<><37>
|
|||
|
|
if (cbWeaveCount == 0 && ServenStar(cbCardIndexTemp, bGerman, cbCurrentCard, bZimo) == true)
|
|||
|
|
{
|
|||
|
|
////<2F><><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD>б<EFBFBD>Ȩλ;
|
|||
|
|
//wChiHuRight &= ~CHR_HAS_KING;
|
|||
|
|
|
|||
|
|
ChiHuResult.wChiHuKind = CHK_SERVEN;
|
|||
|
|
ChiHuResult.wChiHuRight |= wChiHuRight;
|
|||
|
|
|
|||
|
|
return WIK_CHI_HU;
|
|||
|
|
}
|
|||
|
|
bGerman = 0;
|
|||
|
|
|
|||
|
|
//13<31><33>
|
|||
|
|
if (cbWeaveCount == 0 && IsNeatAlone(cbCardIndexTemp, bGerman, cbCurrentCard, bZimo) == true)
|
|||
|
|
{
|
|||
|
|
ChiHuResult.wChiHuKind = CHK_THIRTEEN;
|
|||
|
|
ChiHuResult.wChiHuRight |= wChiHuRight;
|
|||
|
|
return WIK_CHI_HU;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bGerman = 0;
|
|||
|
|
//7С<37>Է<EFBFBD><D4B7><EFBFBD>
|
|||
|
|
if (cbWeaveCount == 0 && IsQiXiaoDui(cbCardIndexTemp, WeaveItem, cbWeaveCount, cbCurrentCard, bGerman, bZimo))
|
|||
|
|
{
|
|||
|
|
wChiHuKind = CHK_QI_DUI;
|
|||
|
|
|
|||
|
|
ChiHuResult.wChiHuKind = wChiHuKind;
|
|||
|
|
ChiHuResult.wChiHuRight |= wChiHuRight;
|
|||
|
|
|
|||
|
|
return WIK_CHI_HU;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
static CAnalyseItemArray AnalyseItemArray;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
AnalyseItemArray.RemoveAll();
|
|||
|
|
ZeroMemory(&ChiHuResult, sizeof(ChiHuResult));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
AnalyseCard(cbCardIndexTemp, WeaveItem, cbWeaveCount, AnalyseItemArray, cbCurrentCard, bZimo);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>
|
|||
|
|
if (AnalyseItemArray.GetCount() > 0)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
|
|||
|
|
for (INT_PTR i = 0; i < AnalyseItemArray.GetCount(); i++)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool bLianCard = false, bPengCard = false;
|
|||
|
|
bool bGerman = true;
|
|||
|
|
tagAnalyseItem * pAnalyseItem = &AnalyseItemArray[i];
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
|
|||
|
|
for (BYTE j = 0; j < CountArray(pAnalyseItem->wWeaveKind); j++)
|
|||
|
|
{
|
|||
|
|
WORD wWeaveKind = pAnalyseItem->wWeaveKind[j];
|
|||
|
|
bPengCard = ((wWeaveKind&(WIK_GANG | WIK_PENG)) != 0) ? true : bPengCard;
|
|||
|
|
bLianCard = ((wWeaveKind&(WIK_CHI)) != 0) ? true : bLianCard;
|
|||
|
|
}
|
|||
|
|
bGerman = (pAnalyseItem->cbWeaveKingReplace || pAnalyseItem->cbEyeKingReplace) ? false : bGerman;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
ASSERT((bLianCard == true) || (bPengCard == true));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
if ((bLianCard == true) && (bPengCard == true))
|
|||
|
|
wChiHuKind |= CHK_JI_HU;
|
|||
|
|
if ((bLianCard == true) && (bPengCard == false))
|
|||
|
|
wChiHuKind |= CHK_JI_HU;
|
|||
|
|
if ((bLianCard == false) && (bPengCard == true))
|
|||
|
|
wChiHuKind |= CHK_JI_HU; //wChiHuKind |= CHK_PENG_PENG;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
if (wChiHuKind != CHK_NULL)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
|
|||
|
|
ChiHuResult.wChiHuKind = wChiHuKind;
|
|||
|
|
ChiHuResult.wChiHuRight = wChiHuRight;
|
|||
|
|
return WIK_CHI_HU;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return WIK_NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
WORD CGameLogic::AnalyseYiBianDaoHuCard(BYTE cbCardIndex[MAX_INDEX], tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE cbCurrentCard, WORD wChiHuRight, tagChiHuResult & ChiHuResult, bool bZimo /*= false*/, bool bRealHu /*= true*/)
|
|||
|
|
{
|
|||
|
|
BYTE cbValue = cbCurrentCard&MASK_VALUE;
|
|||
|
|
BYTE cbColor = (cbCurrentCard&MASK_COLOR) >> 4;
|
|||
|
|
|
|||
|
|
if (bRealHu && (cbColor < 3) && (cbValue < 5))
|
|||
|
|
{ //5<><35><EFBFBD>µIJ<C2B5><C4B2>ܺ<EFBFBD>;(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><D7BF>Ժ<EFBFBD>);
|
|||
|
|
return WIK_NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD wChiHuKind = CHK_NULL;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
ZeroMemory(&ChiHuResult, sizeof(ChiHuResult));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX];
|
|||
|
|
CopyMemory(cbCardIndexTemp, cbCardIndex, sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
if (cbCurrentCard != 0)
|
|||
|
|
cbCardIndexTemp[SwitchToCardIndex(cbCurrentCard)]++;
|
|||
|
|
|
|||
|
|
//<2F><>ģȨλ
|
|||
|
|
if (bZimo)
|
|||
|
|
{
|
|||
|
|
wChiHuRight |= CHR_ZI_MO;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Ȩλ<C8A8><CEBB><EFBFBD><EFBFBD> <20>ܺ<EFBFBD>+<2B><><EFBFBD><EFBFBD> = <20><><EFBFBD>ϻ<EFBFBD>
|
|||
|
|
if ((wChiHuRight&CHR_QIANG_GANG) && (wChiHuRight&CHR_ZI_MO))
|
|||
|
|
{
|
|||
|
|
wChiHuRight &= ~CHR_QIANG_GANG;
|
|||
|
|
wChiHuRight &= ~CHR_ZI_MO;
|
|||
|
|
wChiHuRight |= CHR_GANG_FLOWER;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>¹<EFBFBD><C2B9><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
BYTE bGerman = 0;
|
|||
|
|
|
|||
|
|
//7<><37>
|
|||
|
|
if (cbWeaveCount == 0 && ServenStar(cbCardIndexTemp, bGerman, cbCurrentCard, bZimo) == true)
|
|||
|
|
{
|
|||
|
|
ChiHuResult.wChiHuKind = CHK_SERVEN;
|
|||
|
|
ChiHuResult.wChiHuRight |= wChiHuRight;
|
|||
|
|
|
|||
|
|
return WIK_CHI_HU;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bGerman = 0;
|
|||
|
|
//7С<37>Է<EFBFBD><D4B7><EFBFBD>
|
|||
|
|
if (cbWeaveCount == 0 && IsQiXiaoDui(cbCardIndexTemp, WeaveItem, cbWeaveCount, cbCurrentCard, bGerman, bZimo))
|
|||
|
|
{
|
|||
|
|
if (IsZiYiSe(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard))
|
|||
|
|
{
|
|||
|
|
wChiHuKind = (CHK_QI_DUI | CHK_ZIYISE);
|
|||
|
|
}
|
|||
|
|
else if (IsQingYiSe(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard))
|
|||
|
|
{
|
|||
|
|
wChiHuKind = (CHK_QI_DUI | CHK_QINYISE);
|
|||
|
|
}
|
|||
|
|
else if (IsHunYiSe(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard))
|
|||
|
|
{
|
|||
|
|
wChiHuKind = (CHK_QI_DUI | CHK_HUNYISE);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
wChiHuKind = CHK_QI_DUI;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
ChiHuResult.wChiHuKind = wChiHuKind;
|
|||
|
|
ChiHuResult.wChiHuRight |= wChiHuRight;
|
|||
|
|
|
|||
|
|
return WIK_CHI_HU;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
static CAnalyseItemArray AnalyseItemArray;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
AnalyseItemArray.RemoveAll();
|
|||
|
|
ZeroMemory(&ChiHuResult, sizeof(ChiHuResult));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
AnalyseCard(cbCardIndexTemp, WeaveItem, cbWeaveCount, AnalyseItemArray, cbCurrentCard, bZimo);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>
|
|||
|
|
if (AnalyseItemArray.GetCount() > 0)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
|
|||
|
|
for (INT_PTR i = 0; i < AnalyseItemArray.GetCount(); i++)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool bLianCard = false, bPengCard = false;
|
|||
|
|
bool bGerman = true;
|
|||
|
|
tagAnalyseItem * pAnalyseItem = &AnalyseItemArray[i];
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
|
|||
|
|
for (BYTE j = 0; j < CountArray(pAnalyseItem->wWeaveKind); j++)
|
|||
|
|
{
|
|||
|
|
WORD wWeaveKind = pAnalyseItem->wWeaveKind[j];
|
|||
|
|
bPengCard = ((wWeaveKind&(WIK_GANG | WIK_PENG)) != 0) ? true : bPengCard;
|
|||
|
|
bLianCard = ((wWeaveKind&(WIK_CHI)) != 0) ? true : bLianCard;
|
|||
|
|
}
|
|||
|
|
bGerman = (pAnalyseItem->cbWeaveKingReplace || pAnalyseItem->cbEyeKingReplace) ? false : bGerman;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
ASSERT((bLianCard == true) || (bPengCard == true));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>;
|
|||
|
|
if ((bLianCard == true) && (bPengCard == true))
|
|||
|
|
wChiHuKind |= CHK_JI_HU;
|
|||
|
|
if ((bLianCard == true) && (bPengCard == false))
|
|||
|
|
wChiHuKind |= CHK_JI_HU;
|
|||
|
|
if ((bLianCard == false) && (bPengCard == true))
|
|||
|
|
wChiHuKind |= CHK_PENG_PENG;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>һɫ<D2BB><C9AB><EFBFBD><EFBFBD>;
|
|||
|
|
if (IsZiYiSe(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard))
|
|||
|
|
{
|
|||
|
|
if (wChiHuKind == WIK_NULL)
|
|||
|
|
{ //û<><C3BB><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>Ƶ<EFBFBD><C6B5><EFBFBD>һɫ<D2BB><C9AB>Ȩλ;
|
|||
|
|
wChiHuRight |= CHR_INVALIDHU_ZIYISE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
wChiHuKind |= CHK_ZIYISE;
|
|||
|
|
wChiHuKind &= (~CHK_JI_HU);
|
|||
|
|
|
|||
|
|
ChiHuResult.wChiHuKind = wChiHuKind;
|
|||
|
|
ChiHuResult.wChiHuRight |= wChiHuRight;
|
|||
|
|
|
|||
|
|
return WIK_CHI_HU;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>һɫ<D2BB><C9AB><EFBFBD><EFBFBD>;
|
|||
|
|
if ((wChiHuKind != CHK_NULL) && IsQingYiSe(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard))
|
|||
|
|
{
|
|||
|
|
wChiHuKind |= CHK_QINYISE;
|
|||
|
|
wChiHuKind &= (~CHK_JI_HU);
|
|||
|
|
|
|||
|
|
ChiHuResult.wChiHuKind = wChiHuKind;
|
|||
|
|
ChiHuResult.wChiHuRight |= wChiHuRight;
|
|||
|
|
|
|||
|
|
return WIK_CHI_HU;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>һɫ<D2BB><C9AB><EFBFBD><EFBFBD>;
|
|||
|
|
if ((wChiHuKind != CHK_NULL) && IsHunYiSe(cbCardIndex, WeaveItem, cbWeaveCount, cbCurrentCard))
|
|||
|
|
{
|
|||
|
|
wChiHuKind |= CHK_HUNYISE;
|
|||
|
|
wChiHuKind &= (~CHK_JI_HU);
|
|||
|
|
|
|||
|
|
ChiHuResult.wChiHuKind = wChiHuKind;
|
|||
|
|
ChiHuResult.wChiHuRight |= wChiHuRight;
|
|||
|
|
|
|||
|
|
return WIK_CHI_HU;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (wChiHuKind == CHK_JI_HU)
|
|||
|
|
{ //ֻ<>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD>,<2C>Ͳ<EFBFBD><CDB2><EFBFBD>һ<EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>;
|
|||
|
|
wChiHuKind = CHK_NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>;
|
|||
|
|
if (wChiHuKind != CHK_NULL)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
|
|||
|
|
ChiHuResult.wChiHuKind = wChiHuKind;
|
|||
|
|
ChiHuResult.wChiHuRight = wChiHuRight;
|
|||
|
|
return WIK_CHI_HU;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return WIK_NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CGameLogic::IsCheckZhongSe(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], const BYTE cbItemCount, const BYTE cbCurrentCard, tagChiHuResult & ChiHuResult, BYTE cbRule, bool bTing)
|
|||
|
|
{
|
|||
|
|
if (ChiHuResult.wChiHuKind & CHK_ZIYISE)
|
|||
|
|
{
|
|||
|
|
if (IsZiYiSe(cbCardIndex, WeaveItem, cbItemCount, cbCurrentCard))
|
|||
|
|
{
|
|||
|
|
ChiHuResult.wChiHuRight &= (~CHR_INVALIDHU_ZIYISE);
|
|||
|
|
ChiHuResult.wChiHuRight |= CHR_GANG_ZHONGSE;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (ChiHuResult.wChiHuRight & CHR_INVALIDHU_ZIYISE)
|
|||
|
|
{ //û<>ܵ<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һɫ<D2BB><C9AB><EFBFBD>Ǻ<EFBFBD><C7BA><EFBFBD>(ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һɫ<D2BB><C9AB><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ϳɺ<CFB3><C9BA><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
ChiHuResult.wChiHuKind = WIK_NULL;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (!bTing)
|
|||
|
|
{
|
|||
|
|
ChiHuResult.wChiHuKind &= (~CHK_ZIYISE);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (ChiHuResult.wChiHuKind & (~CHK_ZIYISE))
|
|||
|
|
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>һɫȨλ;
|
|||
|
|
ChiHuResult.wChiHuKind &= (~CHK_ZIYISE);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD>һɫ<D2BB><C9AB><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
if (IsHunYiSe(cbCardIndex, WeaveItem, cbItemCount, cbCurrentCard))
|
|||
|
|
{
|
|||
|
|
ChiHuResult.wChiHuKind &= (~CHK_ZIYISE);
|
|||
|
|
ChiHuResult.wChiHuKind |= CHK_HUNYISE;
|
|||
|
|
ChiHuResult.wChiHuRight |= CHR_GANG_ZHONGSE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if(ChiHuResult.wChiHuKind & CHK_QINYISE)
|
|||
|
|
{
|
|||
|
|
if (IsQingYiSe(cbCardIndex, WeaveItem, cbItemCount, cbCurrentCard))
|
|||
|
|
{
|
|||
|
|
ChiHuResult.wChiHuRight |= CHR_GANG_ZHONGSE;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (!bTing)
|
|||
|
|
{
|
|||
|
|
ChiHuResult.wChiHuKind &= (~CHK_QINYISE);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (ChiHuResult.wChiHuKind & (~CHK_QINYISE))
|
|||
|
|
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>һɫȨλ;
|
|||
|
|
ChiHuResult.wChiHuKind &= (~CHK_QINYISE);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD>һɫ<D2BB><C9AB><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
if (IsHunYiSe(cbCardIndex, WeaveItem, cbItemCount, cbCurrentCard))
|
|||
|
|
{
|
|||
|
|
ChiHuResult.wChiHuKind &= (~CHK_QINYISE);
|
|||
|
|
ChiHuResult.wChiHuKind |= CHK_HUNYISE;
|
|||
|
|
ChiHuResult.wChiHuRight |= CHR_GANG_ZHONGSE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (ChiHuResult.wChiHuKind & CHK_HUNYISE)
|
|||
|
|
{
|
|||
|
|
if (IsHunYiSe(cbCardIndex, WeaveItem, cbItemCount, cbCurrentCard))
|
|||
|
|
{
|
|||
|
|
ChiHuResult.wChiHuRight |= CHR_GANG_ZHONGSE;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (!bTing)
|
|||
|
|
{
|
|||
|
|
ChiHuResult.wChiHuKind &= (~CHK_HUNYISE);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (ChiHuResult.wChiHuKind & (~CHK_HUNYISE))
|
|||
|
|
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>һɫȨλ;
|
|||
|
|
ChiHuResult.wChiHuKind &= (~CHK_HUNYISE);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (ChiHuResult.wChiHuKind == CHK_SERVEN)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>;
|
|||
|
|
BYTE cbCardIndexTemp[MAX_INDEX];
|
|||
|
|
CopyMemory(cbCardIndexTemp, cbCardIndex, sizeof(cbCardIndexTemp));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>;
|
|||
|
|
if (cbCurrentCard != 0)
|
|||
|
|
cbCardIndexTemp[SwitchToCardIndex(cbCurrentCard)]++;
|
|||
|
|
|
|||
|
|
//<2F>ٴ<EFBFBD><D9B4>ж<EFBFBD>ʱ,<2C><><EFBFBD><EFBFBD>ʱ<EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>㶼<EFBFBD><E3B6BC><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>滻<EFBFBD><E6BBBB>;
|
|||
|
|
|
|||
|
|
BYTE bGerman = 0;
|
|||
|
|
bool bZimo = false;
|
|||
|
|
bool bReal = ServenStar(cbCardIndexTemp, bGerman, cbCurrentCard, bZimo, true);
|
|||
|
|
if (!bReal)
|
|||
|
|
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
if (cbRule == eWNMJHURuleEnum_YiBianDaoHU)
|
|||
|
|
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
ChiHuResult.wChiHuKind = CHK_NULL;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{ //<2F><><EFBFBD><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD>;
|
|||
|
|
ChiHuResult.wChiHuKind = CHK_THIRTEEN;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ( ChiHuResult.wChiHuKind == CHK_NULL )
|
|||
|
|
{
|
|||
|
|
ChiHuResult.wChiHuRight = 0;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CGameLogic::CompareChiHuResult(tagChiHuResult& destChiHuResult, tagChiHuResult& tempChiHuResult)
|
|||
|
|
{
|
|||
|
|
if (destChiHuResult.wChiHuKind == CHK_NULL)
|
|||
|
|
{
|
|||
|
|
destChiHuResult = tempChiHuResult;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (destChiHuResult.wChiHuKind < tempChiHuResult.wChiHuKind)
|
|||
|
|
{
|
|||
|
|
if (tempChiHuResult.wChiHuKind >= CHK_HUNYISE)
|
|||
|
|
{
|
|||
|
|
if (tempChiHuResult.wChiHuRight & CHR_GANG_ZHONGSE)
|
|||
|
|
{
|
|||
|
|
destChiHuResult = tempChiHuResult;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
destChiHuResult = tempChiHuResult;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (destChiHuResult.wChiHuKind >= CHK_HUNYISE)
|
|||
|
|
{
|
|||
|
|
if (!(destChiHuResult.wChiHuRight & CHR_GANG_ZHONGSE))
|
|||
|
|
{
|
|||
|
|
destChiHuResult = tempChiHuResult;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|