204 lines
6.3 KiB
C
204 lines
6.3 KiB
C
|
|
#ifndef DZ_GAME_LOGIC_HEAD_FILE
|
|||
|
|
#define DZ_GAME_LOGIC_HEAD_FILE
|
|||
|
|
|
|||
|
|
#pragma once
|
|||
|
|
#include "Types.h"
|
|||
|
|
#include "Macro.h"
|
|||
|
|
#include "CardDefine.h"
|
|||
|
|
#include "DZ_CMD.h"
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define DZ_ST_ORDER 0 //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
|
|||
|
|
#define DZ_ST_COUNT 1 //<2F><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
//<2F><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>;
|
|||
|
|
#define DZ_MAX_COUNT 27 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ;
|
|||
|
|
#define DZ_FULL_COUNT 108 //ȫ<><C8AB><EFBFBD><EFBFBD>Ŀ;
|
|||
|
|
|
|||
|
|
#define DZ_MAX_NO_JOKER_COUNT 26 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
#define NO_JOKER_COUNT 104 //ȫ<><C8AB><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD><DFBC><EFBFBD>Ŀ;
|
|||
|
|
#define DZ_NORMAL_COUNT 27 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ;
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|||
|
|
#define DZ_MASK_COLOR 0xF0 //<2F><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
|||
|
|
#define DZ_MASK_VALUE 0x0F //<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
enum CART_TYPE
|
|||
|
|
{
|
|||
|
|
DZ_CT_ERROR = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
DZ_CT_SINGLE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DZ_CT_DOUBLE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DZ_CT_THREE_TAKE_TWO, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DZ_CT_SINGLE_LINE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DZ_CT_DOUBLE_LINE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DZ_CT_THREE_LINE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DZ_CT_BOMB_4, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DZ_CT_BOMB_5, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DZ_CT_BOMB_6, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DZ_CT_BOMB_7, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DZ_CT_BOMB_8, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DZ_CT_BOMB_9, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DZ_CT_BOMB_10, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
DZ_CT_COUNT, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#define DZ_ST_HIDE 100
|
|||
|
|
#define DZ_ST_DEAL_CARD 101
|
|||
|
|
#define DZ_ST_PASS 102
|
|||
|
|
#define DZ_ST_CALL 103
|
|||
|
|
#define DZ_ST_CLICK_CARD 104
|
|||
|
|
#define DZ_ST_OUT_CARD 105
|
|||
|
|
#define DZ_ST_LEFT_ONE_CARD 106
|
|||
|
|
#define DZ_ST_WIN 107
|
|||
|
|
#define DZ_ST_LOSE 108
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
#define DZ_MAX_BLOCK_COUNT 12 //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
enum CARD_BLOCK_INDEX
|
|||
|
|
{
|
|||
|
|
BLOCK_ONE = 0,
|
|||
|
|
BLOCK_TWO,
|
|||
|
|
BLOCK_THREE,
|
|||
|
|
BLOCK_FOUR,
|
|||
|
|
BLOCK_FIVE,
|
|||
|
|
BLOCK_SIX,
|
|||
|
|
BLOCK_SEVEN,
|
|||
|
|
BLOCK_EIGHT,
|
|||
|
|
BLOCK_NINE,
|
|||
|
|
BLOCK_TEN,
|
|||
|
|
BLOCK_ELEVEN,
|
|||
|
|
BLOCK_TWELVE
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
struct tagDZAnalyseResult
|
|||
|
|
{
|
|||
|
|
uint8 cbBlockCount[DZ_MAX_BLOCK_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
|
|||
|
|
uint8 cbCardData[DZ_MAX_BLOCK_COUNT][DZ_MAX_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool cbLaiZi;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>
|
|||
|
|
struct tagDZOutCardResult
|
|||
|
|
{
|
|||
|
|
uint8 cbCardCount; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
|
|||
|
|
uint8 cbResultCard[DZ_MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//<2F>ֲ<EFBFBD><D6B2><EFBFBD>Ϣ
|
|||
|
|
struct tagDZDistributing
|
|||
|
|
{
|
|||
|
|
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 tagDZSearchCardResult
|
|||
|
|
{
|
|||
|
|
uint8 cbSearchCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
uint8 cbCardCount[DZ_MAX_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
|
|||
|
|
uint8 cbResultCard[DZ_MAX_COUNT][DZ_MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><>Ϸ<EFBFBD><EFBFBD><DFBC><EFBFBD>
|
|||
|
|
class DZ_CGameLogic
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
static const uint8 m_cbCardData[DZ_FULL_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
static const uint8 m_cbNoJokerCardData[DZ_NO_JOKER_COUNT];
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
DZ_CGameLogic();
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual ~DZ_CGameLogic();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
int GetCardType(const uint8 cbCardData[], uint8 cbCardCount, bool isLastCard);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>ֵ
|
|||
|
|
uint8 GetCardValue(uint8 cbCardData) { return cbCardData&DZ_MASK_VALUE; }
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>ɫ
|
|||
|
|
uint8 GetCardColor(uint8 cbCardData) { return cbCardData&DZ_MASK_COLOR; }
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
void RandCardList(uint8 cbCardBuffer[], uint8 cbBufferCount);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
void RandNoJokerCardList(uint8 cbCardBuffer[], uint8 cbBufferCount);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
void SortCardList(uint8 cbCardData[], uint8 cbCardCount, uint8 cbSortType);
|
|||
|
|
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
|
|||
|
|
bool RemoveCard(const uint8 cbRemoveCard[], uint8 cbRemoveCount, uint8 cbCardData[], uint8 cbCardCount);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
uint8 GetRandomCard(void) ;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
void SortOutCardList(uint8 cbCardData[], uint8 cbCardCount, int nCardType, bool isLastCard);
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><>Ч<EFBFBD>ж<EFBFBD>
|
|||
|
|
bool IsValidCard(uint8 cbCardData);
|
|||
|
|
//<2F><EFBFBD><DFBC><EFBFBD>ֵ
|
|||
|
|
uint8 GetCardLogicValue(uint8 cbCardData);
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1>˿<EFBFBD>(<28>Ƚ<EFBFBD>ǰ<EFBFBD><C7B0>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>ͺϷ<CDBA>);
|
|||
|
|
bool CompareCard(const DZ_CMD_C_OutCard* pFirstOutCard, const DZ_CMD_C_OutCard* pNextOutCard);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
uint8 GetLaiZiCount(const uint8 cbHandCardData[], uint8 cbHandCardCount);
|
|||
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool IsLaiZiCard(uint8 cbCard);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
uint8 SearchOutCard(const uint8 cbHandCardData[], uint8 cbHandCardCount, const DZ_CMD_C_OutCard* pFirstOutCard, tagDZSearchCardResult *pSearchCardResult);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
uint8 SearchSingle(const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbReferCard, tagDZSearchCardResult *pSearchCardResult);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
uint8 SearchDouble(const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbReferCard, tagDZSearchCardResult *pSearchCardResult);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳;
|
|||
|
|
uint8 SearchSingleLine(const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbReferCard, uint8 cbLineCount, tagDZSearchCardResult *pSearchCardResult);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>˫˳;
|
|||
|
|
uint8 SearchDoubleLine(const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbReferCard, uint8 cbLineCount, tagDZSearchCardResult *pSearchCardResult);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
uint8 SearchThreeTakeTwo(const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbReferCard, tagDZSearchCardResult *pSearchCardResult);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɻ<EFBFBD>;
|
|||
|
|
uint8 SearchThreeLineTakeTwo(const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbReferCard, uint8 cbBlockCount, tagDZSearchCardResult *pSearchCardResult);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ը<EFBFBD><D5A8>;
|
|||
|
|
uint8 SearchBomb(const uint8 cbHandCardData[], uint8 cbHandCardCount, uint8 cbReferCard, uint8 cbReferCount, int iReferCardType, tagDZSearchCardResult *pSearchCardResult, uint8 &cbResultCount);
|
|||
|
|
|
|||
|
|
//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
void AnalysebCardData(const uint8 cbCardData[], uint8 cbCardCount, tagDZAnalyseResult & AnalyseResult);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD>
|
|||
|
|
bool AnalysebCompare(const uint8 cbCardData[], uint8 cbCardCount, uint8 cbMaxCardData[DZ_CT_COUNT], uint8 &cbBlockCount, int dCardType, bool isLastCard);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>(<28><>32<33><32><EFBFBD>Ƶ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊһ<CEAA><D2BB>32λ<32><CEBB><EFBFBD><EFBFBD>)
|
|||
|
|
int TransListToInt(int iOldType,int iNewType);
|
|||
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool IsHasCardType(int iCardType, CART_TYPE ct_value);
|
|||
|
|
//<2F>Dz<EFBFBD><C7B2><EFBFBD>ը<EFBFBD><D5A8>;
|
|||
|
|
bool IsBombType(int iCardType);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>
|
|||
|
|
void AnalysebDistributing(const uint8 cbCardData[], uint8 cbCardCount, tagDZDistributing & Distributing);
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
|
|||
|
|
int GetType(tagDZAnalyseResult& AnalyseResult, const uint8 cbCardData[], uint8 cbCardCount, uint8& cbMaxCardData, uint8 &cbBlockCount, bool isLastCard);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
uint8 MakeCardData(uint8 cbLogicValue, uint8 cbColorIndex);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#endif
|