想要查看内容赶紧注册登陆吧!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
#ifndef GAME_LOGIC_HEAD_FILE
#define GAME_LOGIC_HEAD_FILE
#pragma once
#include "Stdafx.h"
//////////////////////////////////////////////////////////////////////////
//排序类型
#define ST_ORDER 0 //大小排序
#define ST_COUNT 1 //数目排序
#define ST_CUSTOM 2 //自定排序
//////////////////////////////////////////////////////////////////////////
//分析结构
struct tagAnalyseResult
{
BYTE cbBlockCount[4]; //扑克数目
BYTE cbCardData[4][MAX_COUNT]; //扑克数据
};
//出牌结果
struct tagOutCardResult
{
BYTE cbCardCount; //扑克数目
BYTE cbResultCard[MAX_COUNT]; //结果扑克
};
//分布信息
struct tagDistributing
{
BYTE cbCardCount; //扑克数目
BYTE cbDistributing[15][6]; //分布信息
};
#define MAX_TYPE_COUNT 254
struct tagOutCardTypeResult
{
BYTE cbCardType; //扑克类型
BYTE cbCardTypeCount; //牌型数目
BYTE cbEachHandCardCount[MAX_TYPE_COUNT];//每手个数
BYTE cbCardData[MAX_TYPE_COUNT][MAX_COUNT];//扑克数据
};
//////////////////////////////////////////////////////////////////////////
//游戏逻辑类
class CGameLogic
{
//变量定义
protected:
static const BYTE m_cbCardData[FULL_COUNT]; //扑克数据
//AI变量
public:
static const BYTE m_cbGoodcardData[GOOD_CARD_COUTN]; //好牌数据
BYTE m_cbAllCardData[GAME_PLAYER][MAX_COUNT];//所有扑克
BYTE m_cbLandScoreCardData[MAX_COUNT]; //叫牌扑克
BYTE m_cbUserCardCount[GAME_PLAYER]; //扑克数目
WORD m_wBankerUser; //地主玩家
//函数定义
public:
//构造函数
CGameLogic();
//析构函数
virtual ~CGameLogic();
//类型函数
public:
//获取类型
BYTE GetCardType(const BYTE cbCardData[], BYTE cbCardCount);
//获取数值
BYTE GetCardValue(BYTE cbCardData) { return cbCardData&MASK_VALUE; }
//获取花色
BYTE GetCardColor(BYTE cbCardData) { return cbCardData&MASK_COLOR; }
//控制函数
public:
//混乱扑克
VOID RandCardList(BYTE cbCardBuffer[], BYTE cbBufferCount);
//排列扑克
VOID SortCardList(BYTE cbCardData[], BYTE cbCardCount, BYTE cbSortType);
//删除扑克
bool RemoveCard(const BYTE cbRemoveCard[], BYTE cbRemoveCount, BYTE cbCardData[], BYTE cbCardCount);
//逻辑函数
public:
//有效判断
bool IsValidCard(BYTE cbCardData);
//逻辑数值
BYTE GetCardLogicValue(BYTE cbCardData);
//对比扑克
bool CompareCard(const BYTE cbFirstCard[], const BYTE cbNextCard[], BYTE cbFirstCount, BYTE cbNextCount);
//出牌搜索
bool SearchOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, const BYTE cbTurnCardData[], BYTE cbTurnCardCount, tagOutCardResult & OutCardResult);
//内部函数
public:
//构造扑克
BYTE MakeCardData(BYTE cbValueIndex, BYTE cbColorIndex);
//分析扑克
VOID AnalysebCardData(const BYTE cbCardData[], BYTE cbCardCount, tagAnalyseResult & AnalyseResult);
//分析分布
VOID AnalysebDistributing(const BYTE cbCardData[], BYTE cbCardCount, tagDistributing & Distributing);
//////////////////////////////////////////////////////////////////////////
//AI函数
//设置函数
public:
//设置扑克
VOID SetUserCard(WORD wChairID, BYTE cbCardData[], BYTE cbCardCount) ;
//设置底牌
VOID SetBackCard(WORD wChairID, BYTE cbBackCardData[], BYTE cbCardCount) ;
//设置庄家
VOID SetBanker(WORD wBanker) ;
//叫牌扑克
VOID SetLandScoreCardData(BYTE cbCardData[], BYTE cbCardCount) ;
//删除扑克
VOID RemoveUserCardData(WORD wChairID, BYTE cbRemoveCardData[], BYTE cbRemoveCardCount) ;
//辅助函数
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) ;
//分析炸弹
VOID GetAllBomCard(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE cbBomCardData[], BYTE &cbBomCardCount);
//分析顺子
VOID GetAllLineCard(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE cbLineCardData[], BYTE &cbLineCardCount);
//分析三条
VOID GetAllThreeCard(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE cbThreeCardData[], BYTE &cbThreeCardCount);
//分析对子
VOID GetAllDoubleCard(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE cbDoubleCardData[], BYTE &cbDoubleCardCount);
//分析单牌
VOID GetAllSingleCard(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE cbSingleCardData[], BYTE &cbSingleCardCount);
//主要函数
public:
//分析牌型(后出牌调用)
VOID AnalyseOutCardType(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE const cbTurnCardData[], BYTE const cbTurnCardCount, tagOutCardTypeResult CardTypeResult[12+1]);
//分析牌牌(先出牌调用)
VOID AnalyseOutCardType(BYTE const cbHandCardData[], BYTE const cbHandCardCount, tagOutCardTypeResult CardTypeResult[12+1]);
//单牌个数
BYTE AnalyseSinleCardCount(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE const cbWantOutCardData[], BYTE const cbWantOutCardCount, BYTE cbSingleCardData[]=NULL);
//出牌函数
public:
//地主出牌(先出牌)
VOID BankerOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, tagOutCardResult & OutCardResult) ;
//地主出牌(后出牌)
VOID BankerOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, WORD wOutCardUser, const BYTE cbTurnCardData[], BYTE cbTurnCardCount, tagOutCardResult & OutCardResult) ;
//地主上家(先出牌)
VOID UpsideOfBankerOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, WORD wMeChairID,tagOutCardResult & OutCardResult) ;
//地主上家(后出牌)
VOID UpsideOfBankerOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, WORD wOutCardUser, const BYTE cbTurnCardData[], BYTE cbTurnCardCount, tagOutCardResult & OutCardResult) ;
//地主下家(先出牌)
VOID UndersideOfBankerOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, WORD wMeChairID,tagOutCardResult & OutCardResult) ;
//地主下家(后出牌)
VOID UndersideOfBankerOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, WORD wOutCardUser, const BYTE cbTurnCardData[], BYTE cbTurnCardCount, tagOutCardResult & OutCardResult) ;
//出牌搜索
bool SearchOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, const BYTE cbTurnCardData[], BYTE cbTurnCardCount, WORD wOutCardUser, WORD wMeChairID, tagOutCardResult & OutCardResult);
//叫分函数
public:
//叫分判断
BYTE LandScore(WORD wMeChairID, BYTE cbCurrentLandScore) ;
};
//////////////////////////////////////////////////////////////////////////
#endif
|