Files
wnmj-normal/Servers/游戏组件/斗地主/机器人服务/AndroidLogic.h

97 lines
4.8 KiB
C
Raw Normal View History

2026-03-03 13:56:44 +08:00
#ifndef AndroidLogic_h__
#define AndroidLogic_h__
#pragma once
#include "GameLogic.h"
#define MAX_TYPE_COUNT 254
////////////////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
struct tagOutCardTypeResult
{
BYTE cbCardType; //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
BYTE cbCardTypeCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
BYTE cbEachHandCardCount[MAX_TYPE_COUNT]; //ÿ<>ָ<EFBFBD><D6B8><EFBFBD>
BYTE cbEachHandCardData[MAX_TYPE_COUNT][MAX_COUNT]; ///ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
////////////////////////////////////////////////////////////////////////////////////////////
class CAndroidLogic : public CGameLogic
{
//AI<41><49><EFBFBD><EFBFBD>
public:
WORD m_wBankerUser; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LONG m_lBankerOutCardCount; //<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
BYTE m_cbHandCardData[GAME_PLAYER][MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BYTE m_cbHandCardCount[GAME_PLAYER]; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ŀ
BYTE m_cbBackCardData[BACK_COUNT]; //<2F><><EFBFBD><EFBFBD>
BYTE m_cbAllCardOutCount[18]; //<2F><><EFBFBD>Ƽ<EFBFBD>¼ 0,1,2<>±겻<C2B1><EAB2BB>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CAndroidLogic(void);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
~CAndroidLogic(void);
public:
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
void ResetAllData(bool bConstruct=false);
//<2F><><EFBFBD><EFBFBD>ׯ<EFBFBD><D7AF>
void SetBankerUser(const WORD wBankerUser);
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
void SetUserCard(const WORD wChairID, const BYTE cbCardData[], const BYTE cbCardCount);
//<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>
void SetBackCard(const BYTE cbCardData[], const BYTE cbCardCount);
//<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>
void SetBackCard(const WORD wChairID, const BYTE cbCardData[], const BYTE cbCardCount);
//ɾ<><C9BE><EFBFBD>˿<EFBFBD>
void RemoveUserCard(const WORD wChairID, const BYTE cbRemoveCardData[], const BYTE cbRemoveCardCount);
//<2F>з<EFBFBD><D0B7>ж<EFBFBD>
BYTE LandScore(const WORD wMeChairID, const BYTE cbCurrentLandScore);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD>
void Combination(BYTE cbCombineCardData[], BYTE cbResComLen, BYTE cbResultCardData[254][5], BYTE &cbResCardLen, BYTE cbSrcCardData[], BYTE cbCombineLen1, BYTE cbSrcLen, const BYTE cbCombineLen2);
//<2F><><EFBFBD><EFBFBD><EFBFBD>
void Permutation(BYTE *list, int m, int n, BYTE result[][4], BYTE &len);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
bool IsLargestCard(const WORD wChairID, const BYTE cbWantOutCardData[], const BYTE cbWantOutCardCount);
//<2F>ų<EFBFBD>ը<EFBFBD><D5A8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool IsLargestCardWithOutBomb(const WORD wMeChairID, const BYTE cbWantOutCardData[], const BYTE cbWantOutCardCount);
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Analyse4D2CardType(const WORD wMeChairID, const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbHandCardType, tagOutCardResult &OutCardResult);
//<2F><><EFBFBD><EFBFBD>ֻʣһ<CAA3><D2BB><EFBFBD><EFBFBD>ʱ<EFBFBD>ij<EFBFBD><C4B3>Ʋ<EFBFBD><C6B2><EFBFBD>
void AnalyseEnemyLastOneCard(const WORD wMeChairID, const BYTE cbHandCardData[], const BYTE cbHandCardCount, const tagOutCardTypeResult CardTypeResult[13], tagOutCardResult &OutCardResult);
//<2F><><EFBFBD><EFBFBD>ֻʣ<D6BB><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ij<EFBFBD><C4B3>Ʋ<EFBFBD><C6B2><EFBFBD>
void AnalyseEnemyLastTwoCard(const WORD wMeChairID, const BYTE cbHandCardData[], const BYTE cbHandCardCount, const tagOutCardTypeResult CardTypeResult[13], tagOutCardResult &OutCardResult);
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
protected:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>ã<EFBFBD>
void AnalyseOutCardType(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbTurnCardData[], const BYTE cbTurnCardCount, tagOutCardTypeResult OutCardTypeResult[12+1]);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3>ȳ<EFBFBD><C8B3>Ƶ<EFBFBD><C6B5>ã<EFBFBD>
void AnalyseOutCardType(const BYTE cbHandCardData[], const BYTE cbHandCardCount, tagOutCardTypeResult OutCardTypeResult[12+1]);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƹ<EFBFBD><C6B8><EFBFBD>
BYTE AnalyseSinleCardCount(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbWantOutCardData[], const BYTE cbWantOutCardCount, BYTE cbSingleCardData[]=NULL);
//<2F><><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool SearchOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbTurnCardData[], const BYTE cbTurnCardCount, const WORD wMeChairID, const WORD wOutCardUser, tagOutCardResult &OutCardResult);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3>ȳ<EFBFBD><C8B3>ƣ<EFBFBD>
void BankerOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const WORD wMeChairID, tagOutCardResult &OutCardResult);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
void BankerOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbTurnCardData[], const BYTE cbTurnCardCount, const WORD wMeChairID, const WORD wOutCardUser, tagOutCardResult &OutCardResult);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ϼң<CFBC><D2A3>ȳ<EFBFBD><C8B3>ƣ<EFBFBD>
void UpsideOfBankerOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const WORD wMeChairID, tagOutCardResult &OutCardResult);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ϼң<CFBC><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
void UpsideOfBankerOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbTurnCardData[], const BYTE cbTurnCardCount, const WORD wMeChairID, const WORD wOutCardUser, tagOutCardResult &OutCardResult);
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼ң<C2BC><D2A3>ȳ<EFBFBD><C8B3>ƣ<EFBFBD>
void UndersideOfBankerOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const WORD wMeChairID, tagOutCardResult &OutCardResult);
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼ң<C2BC><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
void UndersideOfBankerOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbTurnCardData[], const BYTE cbTurnCardCount, const WORD wMeChairID, const WORD wOutCardUser, tagOutCardResult &OutCardResult);
};
#endif // AndroidLogic_h__