init
This commit is contained in:
97
Servers/游戏组件/斗地主/机器人服务/AndroidLogic.h
Normal file
97
Servers/游戏组件/斗地主/机器人服务/AndroidLogic.h
Normal file
@@ -0,0 +1,97 @@
|
||||
#ifndef AndroidLogic_h__
|
||||
#define AndroidLogic_h__
|
||||
#pragma once
|
||||
|
||||
#include "GameLogic.h"
|
||||
|
||||
#define MAX_TYPE_COUNT 254
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//出牌类型结果
|
||||
struct tagOutCardTypeResult
|
||||
{
|
||||
BYTE cbCardType; //扑克类型
|
||||
BYTE cbCardTypeCount; //牌型数目
|
||||
BYTE cbEachHandCardCount[MAX_TYPE_COUNT]; //每手个数
|
||||
BYTE cbEachHandCardData[MAX_TYPE_COUNT][MAX_COUNT]; ///每手数据
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////
|
||||
class CAndroidLogic : public CGameLogic
|
||||
{
|
||||
//AI变量
|
||||
public:
|
||||
WORD m_wBankerUser; //地主玩家
|
||||
LONG m_lBankerOutCardCount; //出牌次数
|
||||
BYTE m_cbHandCardData[GAME_PLAYER][MAX_COUNT]; //所有扑克
|
||||
BYTE m_cbHandCardCount[GAME_PLAYER]; //扑克数目
|
||||
BYTE m_cbBackCardData[BACK_COUNT]; //底牌
|
||||
BYTE m_cbAllCardOutCount[18]; //出牌记录 0,1,2下标不用
|
||||
|
||||
public:
|
||||
//构造函数
|
||||
CAndroidLogic(void);
|
||||
//析构函数
|
||||
~CAndroidLogic(void);
|
||||
|
||||
public:
|
||||
//重置变量
|
||||
void ResetAllData(bool bConstruct=false);
|
||||
//设置庄家
|
||||
void SetBankerUser(const WORD wBankerUser);
|
||||
//设置扑克
|
||||
void SetUserCard(const WORD wChairID, const BYTE cbCardData[], const BYTE cbCardCount);
|
||||
//设置底牌
|
||||
void SetBackCard(const BYTE cbCardData[], const BYTE cbCardCount);
|
||||
//设置底牌
|
||||
void SetBackCard(const WORD wChairID, const BYTE cbCardData[], const BYTE cbCardCount);
|
||||
//删除扑克
|
||||
void RemoveUserCard(const WORD wChairID, const BYTE cbRemoveCardData[], const BYTE cbRemoveCardCount);
|
||||
//叫分判断
|
||||
BYTE LandScore(const WORD wMeChairID, const BYTE cbCurrentLandScore);
|
||||
|
||||
//辅助函数
|
||||
public:
|
||||
//组合算法
|
||||
void Combination(BYTE cbCombineCardData[], BYTE cbResComLen, BYTE cbResultCardData[254][5], BYTE &cbResCardLen, BYTE cbSrcCardData[], BYTE cbCombineLen1, BYTE cbSrcLen, const BYTE cbCombineLen2);
|
||||
//排列算法
|
||||
void Permutation(BYTE *list, int m, int n, BYTE result[][4], BYTE &len);
|
||||
//最大牌型判断
|
||||
bool IsLargestCard(const WORD wChairID, const BYTE cbWantOutCardData[], const BYTE cbWantOutCardCount);
|
||||
//排除炸弹,一定是最大牌型
|
||||
bool IsLargestCardWithOutBomb(const WORD wMeChairID, const BYTE cbWantOutCardData[], const BYTE cbWantOutCardCount);
|
||||
//分析四带二牌型
|
||||
void Analyse4D2CardType(const WORD wMeChairID, const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbHandCardType, tagOutCardResult &OutCardResult);
|
||||
//分析只剩一张牌时的出牌策略
|
||||
void AnalyseEnemyLastOneCard(const WORD wMeChairID, const BYTE cbHandCardData[], const BYTE cbHandCardCount, const tagOutCardTypeResult CardTypeResult[13], tagOutCardResult &OutCardResult);
|
||||
//分析只剩两张牌时的出牌策略
|
||||
void AnalyseEnemyLastTwoCard(const WORD wMeChairID, const BYTE cbHandCardData[], const BYTE cbHandCardCount, const tagOutCardTypeResult CardTypeResult[13], tagOutCardResult &OutCardResult);
|
||||
|
||||
//主要函数
|
||||
protected:
|
||||
//分析牌型(后出牌调用)
|
||||
void AnalyseOutCardType(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbTurnCardData[], const BYTE cbTurnCardCount, tagOutCardTypeResult OutCardTypeResult[12+1]);
|
||||
//分析牌牌(先出牌调用)
|
||||
void AnalyseOutCardType(const BYTE cbHandCardData[], const BYTE cbHandCardCount, tagOutCardTypeResult OutCardTypeResult[12+1]);
|
||||
//分析单牌个数
|
||||
BYTE AnalyseSinleCardCount(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbWantOutCardData[], const BYTE cbWantOutCardCount, BYTE cbSingleCardData[]=NULL);
|
||||
|
||||
//出牌函数
|
||||
public:
|
||||
//出牌搜索
|
||||
bool SearchOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbTurnCardData[], const BYTE cbTurnCardCount, const WORD wMeChairID, const WORD wOutCardUser, tagOutCardResult &OutCardResult);
|
||||
//地主出牌(先出牌)
|
||||
void BankerOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const WORD wMeChairID, tagOutCardResult &OutCardResult);
|
||||
//地主出牌(后出牌)
|
||||
void BankerOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbTurnCardData[], const BYTE cbTurnCardCount, const WORD wMeChairID, const WORD wOutCardUser, tagOutCardResult &OutCardResult);
|
||||
//地主上家(先出牌)
|
||||
void UpsideOfBankerOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const WORD wMeChairID, tagOutCardResult &OutCardResult);
|
||||
//地主上家(后出牌)
|
||||
void UpsideOfBankerOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const BYTE cbTurnCardData[], const BYTE cbTurnCardCount, const WORD wMeChairID, const WORD wOutCardUser, tagOutCardResult &OutCardResult);
|
||||
//地主下家(先出牌)
|
||||
void UndersideOfBankerOutCard(const BYTE cbHandCardData[], const BYTE cbHandCardCount, const WORD wMeChairID, tagOutCardResult &OutCardResult);
|
||||
//地主下家(后出牌)
|
||||
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__
|
||||
Reference in New Issue
Block a user