Files

167 lines
5.6 KiB
C
Raw Permalink Normal View History

2026-03-03 13:56:44 +08:00
#ifndef GAME_LOGIC_HEAD_FILE
#define GAME_LOGIC_HEAD_FILE
#pragma once
#include "Stdafx.h"
#include <vector>
////////////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ST_ORDER 0 //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
#define ST_COUNT 1 //<2F><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
////////////////////////////////////////////////////////////////////////////////////////
//<2F><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
#define MAX_COUNT 20 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
#define FULL_COUNT 54 //ȫ<><C8AB><EFBFBD><EFBFBD>Ŀ
#define BACK_COUNT 3 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
#define NORMAL_COUNT 17 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
#define GOOD_CARD_COUNT 38 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
////////////////////////////////////////////////////////////////////////////////////////
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
#define MASK_COLOR 0xF0 //<2F><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
#define MASK_VALUE 0x0F //<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
////////////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD>
struct tagAnalyseResult
{
BYTE cbFourCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
BYTE cbThreeCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
BYTE cbDoubleCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
BYTE cbSingleCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
BYTE cbFourCardData[MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BYTE cbThreeCardData[MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BYTE cbDoubleCardData[MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BYTE cbSingleCardData[MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
};
//<2F><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>
struct tagOutCardResult
{
BYTE cbCardCount; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
BYTE cbCardData[MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
};
//<2F><>ʾ<EFBFBD><CABE><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>
struct tagPromptCardResult
{
BYTE cbResultCount; //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
BYTE cbCardCount[MAX_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
BYTE cbCardData[MAX_COUNT][MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
};
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>
struct tagPromptCardInfo
{
tagPromptCardResult stRocketResult; //<2F><><EFBFBD><EFBFBD>
tagPromptCardResult stBombResult; //ը<><D5A8>
tagPromptCardResult stFourTwoResult; //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>
tagPromptCardResult cbPlaneResult; //<2F>ɻ<EFBFBD>
tagPromptCardResult stDoubleLineResult; //<2F><><EFBFBD>ö<EFBFBD>
tagPromptCardResult stSingleLineResult; //˳<><CBB3>
};
//<2F>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
struct LandCardList
{
std::vector<BYTE> vecLandListCard;
};
//////////////////////////////////////////////////////////////////////////
//<2F><>Ϸ<EFBFBD>߼<EFBFBD><DFBC><EFBFBD>
class CGameLogic
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
static const BYTE m_cbCardData[FULL_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
static const BYTE m_cbGoodcardData[GOOD_CARD_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
static std::vector<LandCardList> m_vecLandCard; //<2F>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CGameLogic();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CGameLogic();
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
static void LoadLandCard();
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
static bool RemoveAllCard(const BYTE cbRemoveCard[], BYTE cbRemoveCount, BYTE cbCardData[], BYTE cbCardCount);
//<2F><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
public:
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE GetBackCardType(const BYTE cbBackCardData[], bool bCheckLongTask=false);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
BYTE GetBackCardMulitple(const BYTE cbBackCardType);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
BYTE GetCardType(const BYTE cbCardData[], const BYTE cbCardCount);
//<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 RandCardList(BYTE cbCardBuffer[], BYTE cbBufferCount);
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
void SortCardList(BYTE cbCardData[], BYTE cbCardCount, BYTE cbSortType);
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
bool RemoveCard(const BYTE cbRemoveCard[], BYTE cbRemoveCount, BYTE cbCardData[], BYTE cbCardCount);
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
void GetGoodCardData(BYTE cbGoodCardData[NORMAL_COUNT]);
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool RemoveGoodCardData(BYTE cbGoodcardData[NORMAL_COUNT], BYTE cbGoodCardCount, BYTE cbCardData[FULL_COUNT], BYTE cbCardCount);
//<2F><><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>
void RandArrayBuffer(BYTE cbBufferData[], BYTE cbBufferCount);
//<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
void SortArrayBuffer(BYTE cbBufferData[], BYTE cbBufferCount);
//<2F>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><>Ч<EFBFBD>ж<EFBFBD>
bool IsValidCard(BYTE cbCardData);
//<2F><>Ч<EFBFBD>ж<EFBFBD>
bool IsValidCount(BYTE cbCardCount);
//<2F><>Ч<EFBFBD>ж<EFBFBD>
bool IsValidUser(WORD wChairID);
//<2F>߼<EFBFBD><DFBC><EFBFBD>ֵ
BYTE GetCardLogicValue(BYTE cbCardData);
//<2F>Ա<EFBFBD><D4B1>˿<EFBFBD>
bool CompareCard(const BYTE cbFirstCard[], const BYTE cbNextCard[], BYTE cbFirstCount, BYTE cbNextCount, BYTE cbRecordType=CT_ERROR);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool SearchOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbTurnCardData[], const BYTE cbTurnCardCount, tagOutCardResult &OutCardResult);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool SearchOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbTurnCardData[], const BYTE cbTurnCardCount, tagPromptCardResult &OutCardResult);
//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
bool AnalysebCardData(const BYTE cbCardData[], const BYTE cbCardCount, tagAnalyseResult &AnalyseResult);
//<2F><><EFBFBD><EFBFBD>ը<EFBFBD><D5A8>
void GetAllBombCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, BYTE cbBomCardData[], BYTE &cbBomCardCount);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void GetAllThreeCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, BYTE cbThreeCardData[], BYTE &cbThreeCardCount);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void GetAllDoubleCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, BYTE cbDoubleCardData[], BYTE &cbDoubleCardCount);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void GetAllSingleCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, BYTE cbSingleCardData[], BYTE &cbSingleCardCount, bool bOnlySingle);
//<2F><><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
void GetAllLineCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, BYTE cbLineCardData[], BYTE &cbLineCardCount);
//<2F><><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
void GetAllLineCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, tagPromptCardInfo &PromptCardInfo);
//<2F><>ȡ<EFBFBD><C8A1>Ϣ
void PromptHandCardEachType(const BYTE cbHandCardData[], const BYTE cbHandCardCount, tagPromptCardInfo &PromptCardInfo);
};
//////////////////////////////////////////////////////////////////////////
#endif