206 lines
9.3 KiB
C++
206 lines
9.3 KiB
C++
#ifndef _13S_GAME_LOGIC_HEAD_FILE_
|
|
#define _13S_GAME_LOGIC_HEAD_FILE_
|
|
|
|
#pragma once
|
|
|
|
#include "13S_CMD.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//扑克类型;
|
|
#define SSS_CT_INVALID 0 //错误类型;
|
|
#define SSS_CT_SINGLE 1 //单牌类型;
|
|
#define SSS_CT_ONE_DOUBLE 2 //只有一对;
|
|
#define SSS_CT_FIVE_TWO_DOUBLE 3 //两对牌型;
|
|
#define SSS_CT_THREE 4 //三张牌型;
|
|
#define SSS_CT_FIVE_MIXED_FLUSH_NO_A 5 //没A杂顺;
|
|
#define SSS_CT_FIVE_MIXED_FLUSH_FIRST_A 6 //A在前顺子;
|
|
#define SSS_CT_FIVE_MIXED_FLUSH_BACK_A 7 //A在后顺子;
|
|
#define SSS_CT_FIVE_FLUSH 8 //同花五牌;
|
|
#define SSS_CT_FIVE_THREE_DEOUBLE 9 //葫芦(三条一对);
|
|
#define SSS_CT_FIVE_FOUR_ONE 10 //铁支(四带一张);
|
|
#define SSS_CT_FIVE_STRAIGHT_FLUSH_NO_A 11 //没A同花顺;
|
|
#define SSS_CT_FIVE_STRAIGHT_FLUSH_FIRST_A 12 //A在前同花顺;
|
|
#define SSS_CT_FIVE_STRAIGHT_FLUSH_BACK_A 13 //A在后同花顺;
|
|
#define SSS_CT_FIVE_BOMB 44 //五同类型;
|
|
|
|
//特殊牌型;
|
|
#define SSS_CT_THREE_STRAIGHT 14 //三顺子(三墩都是单顺);
|
|
#define SSS_CT_THREE_FLUSH 15 //三同花(三墩都是同花);
|
|
#define SSS_CT_SIXPAIR 16 //六对半(六个对子余一张);
|
|
#define SSS_CT_FIVEPAIR_THREE 17 //五对冲三(五个对子,其余三张相同);
|
|
#define SSS_CT_FOUR_THREESAME 18 //四套冲三(四个三张相同余一张);
|
|
#define SSS_CT_SAME_COLOR 19 //凑一色(都是方块红心或黑桃梅花);
|
|
#define SSS_CT_ALL_SMALL 20 //全小(2-8);
|
|
#define SSS_CT_ALL_BIG 21 //全大(8-A);
|
|
#define SSS_CT_THREE_BOMB 22 //三分天下(三套炸弹);
|
|
#define SSS_CT_THREE_STRAIGHTFLUSH 23 //三同花顺;
|
|
#define SSS_CT_TWELVE_KING 24 //十二皇族(全是J、Q、K、A);
|
|
#define SSS_CT_THIRTEEN 25 //十三水,一条龙( A至K齐全);
|
|
#define SSS_CT_THIRTEEN_FLUSH 26 //同花十三水,至尊青龙(同花且A至K齐全的牌);
|
|
|
|
//数值掩码;
|
|
#define SSS_CARD_MASK_COLOR 0xF0 //花色掩码;
|
|
#define SSS_CARD_MASK_VALUE 0x0F //数值掩码;
|
|
|
|
#define SSS_CARD_DW 16
|
|
#define SSS_CARD_XW 15
|
|
|
|
//扑克数目
|
|
#define SSS_CARD_COUNT 54 //扑克数目
|
|
|
|
//分析结构
|
|
struct tag13SAnalyseData
|
|
{
|
|
uint8 bOneCount; //单张数目
|
|
uint8 bTwoCount; //两张数目
|
|
uint8 bThreeCount; //三张数目
|
|
uint8 bFourCount; //四张数目
|
|
uint8 bFiveCount; //五张数目
|
|
uint8 bOneFirst[13]; //单牌位置
|
|
uint8 bTwoFirst[13]; //对牌位置
|
|
uint8 bThreeFirst[13]; //三条位置
|
|
uint8 bFourFirst[13]; //四张位置
|
|
uint8 bFiveFirst[13]; //五张位置
|
|
bool bStraight; //是否顺子
|
|
};
|
|
|
|
//分析结构
|
|
struct tag13SAnalyseResult
|
|
{
|
|
uint8 cbFourCount; //四张数目
|
|
uint8 cbThreeCount; //三张数目
|
|
uint8 cbDoubleCount; //两张数目
|
|
uint8 cbSignedCount; //单张数目
|
|
uint8 cbFourCardData[13]; //四张扑克
|
|
uint8 cbThreeCardData[13]; //三张扑克
|
|
uint8 cbDoubleCardData[13]; //两张扑克
|
|
uint8 cbSignedCardData[13]; //单张扑克
|
|
};
|
|
|
|
//分析结构
|
|
struct tag13SAnalyseType
|
|
{
|
|
bool bOnePare; //有一对
|
|
bool bTwoPare; //有两对
|
|
bool bThreeSame; //有三条
|
|
bool bStraight; //有顺子
|
|
bool bFlush; //有同花
|
|
bool bGourd; //有葫芦
|
|
bool bFourSame; //有铁支
|
|
bool bStraightFlush; //有同花顺
|
|
bool bFiveSame; //有五相
|
|
|
|
uint8 cbOnePare[100]; //一对的序号
|
|
uint8 cbTwoPare[100]; //两对的序号
|
|
uint8 cbThreeSame[100]; //三条的序号
|
|
uint8 cbStraight[100]; //顺子的序号
|
|
uint8 cbFlush[100]; //同花的序号
|
|
uint8 cbGourd[100]; //葫芦的序号
|
|
uint8 cbFourSame[100]; //铁支的序号
|
|
uint8 cbStraightFlush[100]; //同花顺的序号
|
|
uint8 cbFiveSame[100]; //五相的序号
|
|
|
|
bool bbOnePare[20]; //所有一对标志弹起
|
|
bool bbTwoPare[20]; //所有二对标志弹起
|
|
bool bbThreeSame[20]; //所有三条标志弹起
|
|
bool bbStraight[20]; //所有顺子标志弹起
|
|
bool bbFlush[20]; //所有同花标志弹起
|
|
bool bbGourd[20]; //所有葫芦标志弹起
|
|
bool bbFourSame[20]; //所有铁支标志弹起
|
|
bool bbStraightFlush[20]; //所有同花顺标志弹起
|
|
bool bbFiveSame[20]; //所有五相标志弹起
|
|
|
|
uint8 btOnePare; //一对的数量 单独
|
|
uint8 btThreeSame; //三条数量 单独
|
|
uint8 btTwoPare; //两对的数量
|
|
uint8 btStraight; //顺子的数量
|
|
uint8 btFlush; //同花的数量
|
|
uint8 btGourd; //葫芦的数量
|
|
uint8 btFourSame; //铁支的数量
|
|
uint8 btStraightFlush; //同花顺的数量
|
|
uint8 btFiveSame; //五相的数量
|
|
};
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//排列类型
|
|
enum en13SSortCardType
|
|
{
|
|
enDescend, //降序类型
|
|
enAscend, //升序类型
|
|
enColor //花色类型
|
|
};
|
|
|
|
//游戏逻辑类
|
|
class C13SGameLogic
|
|
{
|
|
//变量定义
|
|
protected:
|
|
static const uint8 m_bCardListData[SSS_CARD_COUNT]; //扑克数据;
|
|
bool m_bClassicRule; //经典规则;
|
|
|
|
//函数定义
|
|
public:
|
|
//构造函数
|
|
C13SGameLogic();
|
|
//析构函数
|
|
virtual ~C13SGameLogic();
|
|
uint8 btCardSpecialData[13];
|
|
//类型函数
|
|
public:
|
|
//获取类型
|
|
uint8 GetCardType(uint8 bCardData[], uint8 bCardCount, uint8 btSpecialCard[]);
|
|
//获取数值
|
|
uint8 GetCardValue(uint8 bCardData) { return bCardData&SSS_CARD_MASK_VALUE; } //十六进制前面四位表示牌的数值
|
|
//获取花色
|
|
uint8 GetCardColor(uint8 bCardData) { return (bCardData&SSS_CARD_MASK_COLOR) >> 4; } //十六进制后面四位表示牌的花色
|
|
//设置是否是经典规则;
|
|
void setClassicRule(bool bFlag) { m_bClassicRule=bFlag; }
|
|
|
|
//控制函数
|
|
public:
|
|
//排列扑克
|
|
void SortCardList(uint8 bCardData[], uint8 bCardCount, en13SSortCardType SortCardType = enDescend);
|
|
//混乱扑克
|
|
void RandCardList(uint8 bCardBuffer[], uint8 bBufferCount);
|
|
//删除扑克
|
|
bool RemoveCard(const uint8 bRemoveCard[], uint8 bRemoveCount, uint8 bCardData[], uint8 bCardCount);
|
|
//添加扑克
|
|
bool AppendCard(const uint8 bAppendCard[], uint8 bAppendCount, uint8 bCardData[], uint8 &bCardCount);
|
|
//得到牌的数量
|
|
uint8 GetCardCount(uint8 bCardData[]);
|
|
|
|
//逻辑函数
|
|
public:
|
|
//逻辑数值
|
|
uint8 GetCardLogicValue(uint8 bCardData);
|
|
//对比扑克
|
|
uint8 CompareCard(uint8 bInFirstList[], uint8 bInNextList[], uint8 bFirstCount, uint8 bNextCount, bool bComperWithOther);
|
|
//获得8种类型
|
|
tag13SAnalyseType GetType(uint8 bCardData[], uint8 bCardCount);
|
|
|
|
//内部函数
|
|
public:
|
|
//分析扑克
|
|
void AnalyseCard(const uint8 bCardDataList[], const uint8 bCardCount, tag13SAnalyseData& AnalyseData);
|
|
//分析扑克
|
|
void AnalysebCardData(const uint8 cbCardData[], uint8 cbCardCount, tag13SAnalyseResult & AnalyseResult);
|
|
//最好的一敦
|
|
void TheBestCard(tag13SAnalyseType tagCardType, uint8 btHandCardData[], uint8 btHandCardCount, uint8 btFrontCard[], uint8 btMidCard[], uint8 btBackCard[]);
|
|
//三敦总共的水数
|
|
uint8 ThreeDunAllShuiShu(uint8 btFrontCard[],uint8 btMidCard[],uint8 btBackCard[]);
|
|
//是否比前面的大
|
|
bool IsBiggerThanFront(uint8 btFrontFrontCard[],uint8 btFrontMidCard[],uint8 btFrontBackCard[],uint8 btFrontCard[],uint8 btMidCard[],uint8 btBackCard[]);
|
|
//牌数据是否一样
|
|
bool IsSameCardData(uint8 btFirstCard[], uint8 btNextCard[], uint8 btFirstCount, uint8 btNextCount);
|
|
//是否同花
|
|
bool IsFlush(const uint8 cbCardData[], const uint8 cbCardCount, uint8 cbMaxCardData[], uint8 & bMaxCardCount, uint8 bNeedCCount = 5);
|
|
|
|
|
|
// 获取牌型图片路径;
|
|
static std::string getCardTypeImagePath(uint8 cbCardType);
|
|
// 获取牌型声音路径;
|
|
static std::string getCardTypeSoundPath(uint8 cbGender, uint8 cbCardType);
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
#endif |