Files
wnmj/Classes/Games/PDK/PDK_GameLogic.h

166 lines
5.4 KiB
C
Raw Normal View History

2026-02-13 14:34:15 +08:00
#ifndef GAME_PDK_LOGIC_HEAD_FILE
#define GAME_PDK_LOGIC_HEAD_FILE
#pragma once
#include "Types.h"
#include "Macro.h"
#include "CardDefine.h"
#include "PDK_CMD.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PDK_ST_ORDER 1 //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
#define PDK_ST_COUNT 2 //<2F><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
#define PDK_ST_CUSTOM 3 //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
#define PDK_MASK_COLOR 0xF0 //<2F><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
#define PDK_MASK_VALUE 0x0F //<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
//<2F>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
#define PDK_CT_ERROR 0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PDK_CT_SINGLE 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PDK_CT_DOUBLE 2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PDK_CT_SINGLE_LINE 4 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PDK_CT_DOUBLE_LINE 5 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PDK_CT_THREE_LINE 6 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>ɻ<EFBFBD>);
#define PDK_CT_THREE_TAKE_TWO 7 //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
#define PDK_CT_FOUR_TAKE_THREE 8 //<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
#define PDK_CT_BOMB_CARD 9 //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PDK_CT_3A_BOMB_CARD 10 //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PDK_ST_HIDE 100
#define PDK_ST_DEAL_CARD 101
#define PDK_ST_PASS 102
#define PDK_ST_CALL 103
#define PDK_ST_CLICK_CARD 104
#define PDK_ST_OUT_CARD 105
#define PDK_ST_LEFT_ONE_CARD 106
#define PDK_ST_WIN 107
#define PDK_ST_LOSE 108
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD>
struct tagPDKAnalyseResult
{
uint8 cbBlockCount[4]; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
uint8 cbCardData[4][PDK_MAX_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
};
//<2F><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>
struct tagPDKOutCardResult
{
uint8 cbCardCount; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
uint8 cbResultCard[PDK_MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
};
//<2F>ֲ<EFBFBD><D6B2><EFBFBD>Ϣ
struct tagPDKDistributing
{
uint8 cbCardCount; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
uint8 cbDistributing[18][6]; //<2F>ֲ<EFBFBD><D6B2><EFBFBD>Ϣ(<28><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>ֵ)
};
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct tagPDKSearchCardResult
{
uint8 cbSearchCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
uint8 cbCardCount[PDK_MAX_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
uint8 cbResultCard[PDK_MAX_COUNT][PDK_MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
};
//////////////////////////////////////////////////////////////////////////////////
//<2F><>Ϸ<EFBFBD>߼<EFBFBD><DFBC><EFBFBD>
class CPDKGameLogic
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
static const BYTE m_cbCardData16[PDK_FULL_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
static const BYTE m_cbCardData15[PDK_FULL_COUNT_15]; //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
uint32 m_dwGameRule; //<2F><><EFBFBD>͹<EFBFBD><CDB9><EFBFBD>;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CPDKGameLogic();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CPDKGameLogic();
void SetCardRule(DWORD dwGameRule) { m_dwGameRule = dwGameRule; }
bool IsHasGameRule(ePDKRuleEnum eType)
{
return (m_dwGameRule & eType) > 0;
}
//<2F><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
public:
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
uint8 GetCardType(const uint8 cbCardData[], uint8 cbCardCount, bool isLastCard);
//<2F><>ȡ<EFBFBD><C8A1>ֵ
uint8 GetCardValue(uint8 cbCardData) { return cbCardData&PDK_MASK_VALUE; }
//<2F><>ȡ<EFBFBD><C8A1>ɫ
uint8 GetCardColor(uint8 cbCardData) { return cbCardData&PDK_MASK_COLOR; }
//<2F><><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
void SortCardList(uint8 cbCardData[], uint8 cbCardCount, uint8 cbSortType);
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
bool RemoveCardList(const uint8 cbRemoveCard[], uint8 cbRemoveCount, uint8 cbCardData[], uint8 cbCardCount);
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
bool RemoveCard(const uint8 cbRemoveCard[], uint8 cbRemoveCount, uint8 cbCardData[], uint8 cbCardCount);
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
void SortOutCardList(uint8 cbCardData[], uint8 cbCardCount, bool isLastCard);
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BYTE SortOutCardList(BYTE cbCardData[], BYTE cbCardCount, BYTE cbCardType, BYTE cbBlockCount);
//<2F>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><>Ч<EFBFBD>ж<EFBFBD>
bool IsValidCard(BYTE cbCardData);
//<2F>߼<EFBFBD><DFBC><EFBFBD>ֵ
uint8 GetCardLogicValue(uint8 cbCardData);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
uint8 GetMaxLogicValue(const BYTE cbHandCardData[], BYTE cbHandCardCount);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
uint8 GetMaxCardData(const BYTE cbHandCardData[], BYTE cbHandCardCount);
//<2F>Ա<EFBFBD><D4B1>˿<EFBFBD>
bool CompareCard(const uint8 cbFirstCard[], const uint8 cbNextCard[], uint8 cbFirstCount, uint8 cbNextCount, bool isLastCard);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 SearchOutCard( const uint8 cbHandCardData[], uint8 cbHandCardCount, const uint8 cbTurnCardData[], uint8 cbTurnCardCount, tagPDKSearchCardResult *pSearchCardResult );
//ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 SearchSameCard( const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbReferCard, uint8 cbSameCardCount, tagPDKSearchCardResult *pSearchCardResult );
//<2F><><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD>;
bool SearchMustOutCard(const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbMustOutCard);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳;
uint8 SearchSingleLine(const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbReferCard, uint8 cbLineCount, tagPDKSearchCardResult *pSearchCardResult);
//<2F><><EFBFBD><EFBFBD>˫˳;
uint8 SearchDoubleLine(const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbReferCard, uint8 cbLineCount, tagPDKSearchCardResult *pSearchCardResult);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
uint8 SearchThreeTakeTwo(const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbReferCard, tagPDKSearchCardResult *pSearchCardResult);
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>;
uint8 SearchFourTakeThree(const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbReferCard, tagPDKSearchCardResult *pSearchCardResult);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɻ<EFBFBD>;
uint8 SearchThreeLineTakeTwo(const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbReferCard, uint8 cbBlockCount, tagPDKSearchCardResult *pSearchCardResult);
//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
uint8 MakeCardData(uint8 cbValueIndex, uint8 cbColorIndex);
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
void AnalysebCardData(const uint8 cbCardData[], uint8 cbCardCount, tagPDKAnalyseResult & AnalyseResult);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>
void AnalysebDistributing(const uint8 cbCardData[], uint8 cbCardCount, tagPDKDistributing & Distributing);
};
//////////////////////////////////////////////////////////////////////////////////
#endif