Files

161 lines
4.1 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"
//////////////////////////////////////////////////////////////////////////
//<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 27 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ;
#define FULL_COUNT 108 //ȫ<><C8AB><EFBFBD><EFBFBD>Ŀ;
#define MAX_NO_JOKER_COUNT 26 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
#define NO_JOKER_COUNT 104 //ȫ<><C8AB><EFBFBD><EFBFBD>Ŀ
//<2F>߼<EFBFBD><DFBC><EFBFBD>Ŀ;
#define NORMAL_COUNT 27 //<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><CBBF><EFBFBD><EFBFBD><EFBFBD>
enum CART_TYPE
{
CT_ERROR = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_SINGLE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_DOUBLE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_THREE_TAKE_TWO, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_SINGLE_LINE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_DOUBLE_LINE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_THREE_LINE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_BOMB_4, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_BOMB_5, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_BOMB_6, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_BOMB_7, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_BOMB_8, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_BOMB_9, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_BOMB_10, //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CT_COUNT, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
#define BOMB_TYPE_COUNT 7 //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//////////////////////////////////////////////////////////////////////////
#define MAX_BLOCK_COUNT 12 //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><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 tagAnalyseResult
{
BYTE cbBlockCount[MAX_BLOCK_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
BYTE cbCardData[MAX_BLOCK_COUNT][MAX_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
bool cbLaiZi;
};
//<2F><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>
struct tagOutCardResult
{
BYTE cbCardCount; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
BYTE cbResultCard[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_cbCardData[FULL_COUNT]; //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
static const BYTE m_cbNoJokerCardData[NO_JOKER_COUNT];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CGameLogic();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CGameLogic();
//<2F><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
public:
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
int 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 RandCardList(BYTE cbCardBuffer[], BYTE cbBufferCount);
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
void RandNoJokerCardList(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><EFBFBD><EFBFBD>˿<EFBFBD>
BYTE GetRandomCard(void) ;
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
void SortOutCardList(BYTE cbCardData[], BYTE cbCardCount, int nCardType, bool isLastCard);
//<2F>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><>Ч<EFBFBD>ж<EFBFBD>
bool IsValidCard(BYTE cbCardData);
//<2F>߼<EFBFBD><DFBC><EFBFBD>ֵ
BYTE GetCardLogicValue(BYTE cbCardData);
//<2F>Ա<EFBFBD><D4B1>˿<EFBFBD>
bool CompareCard(const CMD_C_OutCard* pFirstOutCard, CMD_C_OutCard* pNextOutCard);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
BYTE GetLaiZiCount(const BYTE cbHandCardData[], BYTE cbHandCardCount);
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool IsLaiZiCard(BYTE cbCard);
//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
void AnalysebCardData(const BYTE cbCardData[], BYTE cbCardCount, tagAnalyseResult & AnalyseResult);
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD>
bool AnalysebCompare(const BYTE cbCardData[], BYTE cbCardCount, BYTE cbMaxCardData[CT_COUNT], BYTE &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);
private:
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
int GetType(tagAnalyseResult& AnalyseResult, const BYTE cbCardData[], BYTE cbCardCount, BYTE& cbMaxCardData, BYTE &cbBlockCount, bool isLastCard);
};
#endif