Files
wnmj/Classes/Games/WNMJ/WN_GameLogic.cpp

246 lines
5.4 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "WN_GameLogic.h"
#include "PlatformHeader.h"
using namespace WNMJ_SPACE;
WN_CGameLogic* WN_CGameLogic::s_configInstance = nullptr;
//////////////////////////////////////////////////////////////////////////
//<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
//<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
const uint8 WN_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>
void WN_CGameLogic::init()
{
memset(m_cbKingCardIndex, 0xFF, sizeof(m_cbKingCardIndex));
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void WN_CGameLogic::clear()
{
}
//<2F><>Ч<EFBFBD>ж<EFBFBD>
bool WN_CGameLogic::IsValidCard(uint8 cbCardData)
{
uint8 cbValue = (cbCardData&MASK_WN_VALUE);
uint8 cbColor = (cbCardData&MASK_WN_COLOR) >> 4;
return (((cbValue>=1)&&(cbValue<=9)&&(cbColor<=2))||((cbValue>=1)&&(cbValue<=7)&&(cbColor==3)));
}
//<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
uint8 WN_CGameLogic::GetCardCount(uint8 cbCardIndex[MAX_INDEX])
{
//<2F><>Ŀͳ<C4BF><CDB3>
uint8 cbCardCount=0;
for (uint8 i=0;i<MAX_INDEX;i++)
cbCardCount+=cbCardIndex[i];
return cbCardCount;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
uint8 WN_CGameLogic::GetWeaveCard(WORD cbWeaveKind, uint8 cbCenterCard, uint8 cbCardBuffer[4])
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
switch (cbWeaveKind)
{
case WIK_WN_PENG: //<2F><><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
cbCardBuffer[0]=cbCenterCard;
cbCardBuffer[1]=cbCenterCard;
cbCardBuffer[2]=cbCenterCard;
return 3;
}
case WIK_WN_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;
}
default:
{
ASSERT(FALSE);
}
}
return 0;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::string WN_CGameLogic::GetHuKind(WORD wChiHuKind)
{
std::string strHuKind = "";
if ((wChiHuKind&CHK_JI_HU)!= 0)
{
strHuKind = "ƽ<EFBFBD><EFBFBD>";
}
else if ((wChiHuKind&CHK_QI_DUI) && (wChiHuKind&CHK_HUNYISE))
{
strHuKind = "<EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>";
}
else if ((wChiHuKind&CHK_QI_DUI) && (wChiHuKind&CHK_QINYISE))
{
strHuKind = "<EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>";
}
else if ((wChiHuKind&CHK_QI_DUI) && (wChiHuKind&CHK_ZIYISE))
{
strHuKind = "<EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>";
}
else if ((wChiHuKind&CHK_QI_DUI) != 0)
{
strHuKind = "<EFBFBD>߶<EFBFBD>";
}
else if ((wChiHuKind&CHK_THIRTEEN) != 0)
{
strHuKind = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else if ((wChiHuKind&CHK_SERVEN) != 0)
{
strHuKind = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else if ((wChiHuKind&CHK_PENG_PENG) && (wChiHuKind&CHK_HUNYISE))
{
strHuKind = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else if ((wChiHuKind&CHK_PENG_PENG) && (wChiHuKind&CHK_QINYISE))
{
strHuKind = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else if ((wChiHuKind&CHK_PENG_PENG) && (wChiHuKind&CHK_ZIYISE))
{
strHuKind = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else if ((wChiHuKind&CHK_PENG_PENG) != 0)
{
strHuKind = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else if ((wChiHuKind&CHK_QINYISE) != 0)
{
strHuKind = "<EFBFBD><EFBFBD>һɫ";
}
else if ((wChiHuKind&CHK_HUNYISE) != 0)
{
strHuKind = "<EFBFBD><EFBFBD>һɫ";
}
else if ((wChiHuKind&CHK_ZIYISE) != 0)
{
strHuKind = "<EFBFBD><EFBFBD>һɫ";
}
return strHuKind;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>άȨ
std::string WN_CGameLogic::GetHuRight(WORD wChiHuRight)
{
std::string strHuRight = "";
if ((wChiHuRight&CHR_ZI_MO) != 0)
{
strHuRight = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else if ((wChiHuRight&CHR_QIANG_GANG) != 0)
{
strHuRight = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else if ((wChiHuRight&CHR_GANG_FLOWER) != 0)
{
strHuRight = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else if ((wChiHuRight&CHR_TIAN) != 0)
{
strHuRight = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else if ((wChiHuRight&CHR_DI) != 0)
{
strHuRight = "<EFBFBD>غ<EFBFBD>";
}
else if ((wChiHuRight&CHR_LIAN_GANG_FLOWER) != 0)
{
strHuRight = "<EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD>";
}
else if ((wChiHuRight&CHR_QIANG_LIAN_GANG) != 0)
{
strHuRight = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
return strHuRight;
}
//<2F>˿<EFBFBD>ת<EFBFBD><D7AA>
uint8 WN_CGameLogic::SwitchToCardData(uint8 cbCardIndex)
{
ASSERT(cbCardIndex<MAX_INDEX);
ASSERT(cbCardIndex<34);
return ((cbCardIndex/9)<<4)|(cbCardIndex%9+1);
}
//<2F>˿<EFBFBD>ת<EFBFBD><D7AA>
uint8 WN_CGameLogic::SwitchToCardIndex(uint8 cbCardData)
{
ASSERT(IsValidCard(cbCardData));
return ((cbCardData&MASK_WN_COLOR)>>4)*9+(cbCardData&MASK_WN_VALUE)-1;
}
//<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>
WORD WN_CGameLogic::AnalyseGangCard(uint8 cbCardIndex[MAX_INDEX], tagWeaveItem WeaveItem[], uint8 cbWeaveCount, tagGangCardResult & GangCardResult)
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
WORD wActionMask = WIK_WN_NULL;
zeromemory(&GangCardResult, sizeof(GangCardResult));
//<2F><><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>
for (uint8 i = 0; i < MAX_INDEX - 1; i++)
{
if (cbCardIndex[i] == 4)
{
wActionMask |= WIK_WN_GANG;
GangCardResult.cbCardData[GangCardResult.cbCardCount++] = SwitchToCardData(i);
}
}
//<2F><><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>
for (uint8 i = 0; i < cbWeaveCount; i++)
{
if (WeaveItem[i].wWeaveKind == WIK_WN_PENG)
{
if (cbCardIndex[SwitchToCardIndex(WeaveItem[i].cbCenterCard)] == 1)
{
wActionMask |= WIK_WN_GANG;
GangCardResult.cbCardData[GangCardResult.cbCardCount++] = WeaveItem[i].cbCenterCard;
}
}
}
return wActionMask;
}