146 lines
4.7 KiB
C
146 lines
4.7 KiB
C
|
|
#ifndef GAME_LOGIC_HEAD_FILE
|
|||
|
|
#define GAME_LOGIC_HEAD_FILE
|
|||
|
|
|
|||
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#include "Stdafx.h"
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define ST_ORDER 1 //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
|
|||
|
|
#define ST_COUNT 2 //<2F><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
|
|||
|
|
#define ST_CUSTOM 3 //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ
|
|||
|
|
struct tagAnalyseResult
|
|||
|
|
{
|
|||
|
|
BYTE cbBlockCount[4]; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
|
|||
|
|
BYTE cbCardData[4][MAX_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>
|
|||
|
|
struct tagOutCardResult
|
|||
|
|
{
|
|||
|
|
BYTE cbCardCount; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
|
|||
|
|
BYTE cbResultCard[MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//<2F>ֲ<EFBFBD><D6B2><EFBFBD>Ϣ
|
|||
|
|
struct tagDistributing
|
|||
|
|
{
|
|||
|
|
BYTE cbCardCount; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
|
|||
|
|
BYTE cbDistributing[18][6]; //<2F>ֲ<EFBFBD><D6B2><EFBFBD>Ϣ
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
struct tagSearchCardResult
|
|||
|
|
{
|
|||
|
|
BYTE cbSearchCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
BYTE cbCardCount[MAX_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
|
|||
|
|
BYTE cbResultCard[MAX_COUNT][MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><>Ϸ<EFBFBD><EFBFBD><DFBC><EFBFBD>
|
|||
|
|
class CGameLogic
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
static const BYTE m_cbCardData16[FULL_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
static const BYTE m_cbCardData15[FULL_COUNT_15]; //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
DWORD m_dwGameRule; //<2F><><EFBFBD><EFBFBD><CDB9><EFBFBD>;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CGameLogic();
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual ~CGameLogic();
|
|||
|
|
|
|||
|
|
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>
|
|||
|
|
BYTE GetCardType(const BYTE cbCardData[], BYTE cbCardCount, bool isLastCard);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>ֵ
|
|||
|
|
BYTE GetCardValue(BYTE cbCardData) { return cbCardData&MASK_VALUE; }
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>ɫ
|
|||
|
|
BYTE GetCardColor(BYTE cbCardData) { return cbCardData&MASK_COLOR; }
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
VOID RandCard16List(BYTE cbCardBuffer[], BYTE cbBufferCount);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
void RandCard15List(BYTE cbCardBuffer[], BYTE cbBufferCount);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
VOID SortCardList(BYTE cbCardData[], BYTE cbCardCount, BYTE cbSortType);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
VOID SortOutCardList(BYTE cbCardData[], BYTE cbCardCount, bool isLastCard);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
BYTE SortOutCardList(BYTE cbCardData[], BYTE cbCardCount, BYTE cbCardType, BYTE cbBlockCount);
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
|
|||
|
|
bool RemoveCardList(const BYTE cbRemoveCard[], BYTE cbRemoveCount, BYTE cbCardData[], BYTE cbCardCount);
|
|||
|
|
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
|
|||
|
|
bool RemoveCard(const BYTE cbRemoveCard[], BYTE cbRemoveCount, BYTE cbCardData[], BYTE cbCardCount);
|
|||
|
|
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
|
|||
|
|
bool RemoveCardEx(const BYTE cbRemoveCard[], BYTE cbRemoveCount, BYTE cbCardData[], BYTE cbCardCount);
|
|||
|
|
|
|||
|
|
//<2F><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><>Ч<EFBFBD>ж<EFBFBD>
|
|||
|
|
bool IsValidCard(BYTE cbCardData);
|
|||
|
|
//<2F><EFBFBD><DFBC><EFBFBD>ֵ
|
|||
|
|
BYTE GetCardLogicValue(BYTE cbCardData);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
BYTE GetMaxLogicValue(const BYTE cbHandCardData[], BYTE cbHandCardCount);
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1>˿<EFBFBD>
|
|||
|
|
bool CompareCard(const BYTE cbFirstCard[], const BYTE cbNextCard[], BYTE cbFirstCount, BYTE cbNextCount, bool isLastCard);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE SearchOutCard( const BYTE cbHandCardData[], BYTE cbHandCardCount, const BYTE cbTurnCardData[], BYTE cbTurnCardCount,
|
|||
|
|
tagSearchCardResult *pSearchCardResult );
|
|||
|
|
//ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE SearchSameCard( const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbReferCard, BYTE cbSameCardCount,
|
|||
|
|
tagSearchCardResult *pSearchCardResult );
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD>;
|
|||
|
|
bool SearchMustOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbMustOutCard);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳;
|
|||
|
|
BYTE SearchSingleLine(const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbReferCard, BYTE cbLineCount, tagSearchCardResult *pSearchCardResult);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>˫˳;
|
|||
|
|
BYTE SearchDoubleLine(const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbReferCard, BYTE cbLineCount, tagSearchCardResult *pSearchCardResult);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
BYTE SearchThreeTakeTwo(const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbReferCard, tagSearchCardResult *pSearchCardResult);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>;
|
|||
|
|
BYTE SearchFourTakeThree(const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbReferCard, tagSearchCardResult *pSearchCardResult);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɻ<EFBFBD>;
|
|||
|
|
BYTE SearchThreeLineTakeTwo(const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbReferCard, BYTE cbBlockCount, tagSearchCardResult *pSearchCardResult);
|
|||
|
|
|
|||
|
|
//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
BYTE MakeCardData(BYTE cbValueIndex, BYTE cbColorIndex);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
VOID AnalysebCardData(const BYTE cbCardData[], BYTE cbCardCount, tagAnalyseResult & AnalyseResult);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>
|
|||
|
|
VOID AnalysebDistributing(const BYTE cbCardData[], BYTE cbCardCount, tagDistributing & Distributing);
|
|||
|
|
////<2F>õ<EFBFBD><C3B5>ɻ<EFBFBD><C9BB>Ŀ<EFBFBD><C4BF><EFBFBD>С;
|
|||
|
|
//BYTE GetThreeLineBlockCount(const BYTE cbCardData[], BYTE cbCardCount, bool isLastCard);
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
#endif
|