161 lines
4.1 KiB
C++
161 lines
4.1 KiB
C++
#ifndef GAME_LOGIC_HEAD_FILE
|
|
#define GAME_LOGIC_HEAD_FILE
|
|
|
|
#pragma once
|
|
|
|
#include "Stdafx.h"
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//排序类型
|
|
#define ST_ORDER 0 //大小排序
|
|
#define ST_COUNT 1 //数目排序
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//数目定义;
|
|
#define MAX_COUNT 27 //最大数目;
|
|
#define FULL_COUNT 108 //全牌数目;
|
|
|
|
#define MAX_NO_JOKER_COUNT 26 //最大数目
|
|
#define NO_JOKER_COUNT 104 //全牌数目
|
|
|
|
//逻辑数目;
|
|
#define NORMAL_COUNT 27 //常规数目;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//数值掩码
|
|
#define MASK_COLOR 0xF0 //花色掩码
|
|
#define MASK_VALUE 0x0F //数值掩码
|
|
|
|
//扑克类型
|
|
enum CART_TYPE
|
|
{
|
|
CT_ERROR = 0, //错误类型
|
|
|
|
CT_SINGLE, //单牌类型
|
|
CT_DOUBLE, //对牌类型
|
|
CT_THREE_TAKE_TWO, //三条类型
|
|
CT_SINGLE_LINE, //单连类型
|
|
CT_DOUBLE_LINE, //对连类型
|
|
CT_THREE_LINE, //三连类型
|
|
CT_BOMB_4, //炸弹类型
|
|
CT_BOMB_5, //炸弹类型
|
|
CT_BOMB_6, //炸弹类型
|
|
CT_BOMB_7, //炸弹类型
|
|
CT_BOMB_8, //炸弹类型
|
|
CT_BOMB_9, //炸弹类型
|
|
CT_BOMB_10, //炸弹类型
|
|
|
|
CT_COUNT, //牌型数量
|
|
};
|
|
|
|
#define BOMB_TYPE_COUNT 7 //炸弹类型数量
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
#define MAX_BLOCK_COUNT 12 //一手牌最大张数
|
|
|
|
//分析结构
|
|
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]; //扑克数目
|
|
BYTE cbCardData[MAX_BLOCK_COUNT][MAX_COUNT]; //扑克数据
|
|
bool cbLaiZi;
|
|
};
|
|
|
|
//出牌结果
|
|
struct tagOutCardResult
|
|
{
|
|
BYTE cbCardCount; //扑克数目
|
|
BYTE cbResultCard[MAX_COUNT]; //结果扑克
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//游戏逻辑类
|
|
class CGameLogic
|
|
{
|
|
//变量定义
|
|
protected:
|
|
static const BYTE m_cbCardData[FULL_COUNT]; //扑克数据
|
|
static const BYTE m_cbNoJokerCardData[NO_JOKER_COUNT];
|
|
|
|
//函数定义
|
|
public:
|
|
//构造函数
|
|
CGameLogic();
|
|
//析构函数
|
|
virtual ~CGameLogic();
|
|
|
|
//类型函数
|
|
public:
|
|
//获取类型
|
|
int GetCardType(const BYTE cbCardData[], BYTE cbCardCount, bool isLastCard);
|
|
//获取数值
|
|
BYTE GetCardValue(BYTE cbCardData) { return cbCardData&MASK_VALUE; }
|
|
//获取花色
|
|
BYTE GetCardColor(BYTE cbCardData) { return cbCardData&MASK_COLOR; }
|
|
|
|
//控制函数
|
|
public:
|
|
//混乱扑克
|
|
void RandCardList(BYTE cbCardBuffer[], BYTE cbBufferCount);
|
|
//混乱扑克
|
|
void RandNoJokerCardList(BYTE cbCardBuffer[], BYTE cbBufferCount);
|
|
//排列扑克
|
|
void SortCardList(BYTE cbCardData[], BYTE cbCardCount, BYTE cbSortType);
|
|
//删除扑克
|
|
bool RemoveCard(const BYTE cbRemoveCard[], BYTE cbRemoveCount, BYTE cbCardData[], BYTE cbCardCount);
|
|
//随机扑克
|
|
BYTE GetRandomCard(void) ;
|
|
//排列扑克
|
|
void SortOutCardList(BYTE cbCardData[], BYTE cbCardCount, int nCardType, bool isLastCard);
|
|
|
|
//逻辑函数
|
|
public:
|
|
//有效判断
|
|
bool IsValidCard(BYTE cbCardData);
|
|
//逻辑数值
|
|
BYTE GetCardLogicValue(BYTE cbCardData);
|
|
//对比扑克
|
|
bool CompareCard(const CMD_C_OutCard* pFirstOutCard, CMD_C_OutCard* pNextOutCard);
|
|
//赖子数目
|
|
BYTE GetLaiZiCount(const BYTE cbHandCardData[], BYTE cbHandCardCount);
|
|
//是否癞子牌
|
|
bool IsLaiZiCard(BYTE cbCard);
|
|
|
|
//内部函数
|
|
public:
|
|
//分析扑克
|
|
void AnalysebCardData(const BYTE cbCardData[], BYTE cbCardCount, tagAnalyseResult & AnalyseResult);
|
|
//分析比较
|
|
bool AnalysebCompare(const BYTE cbCardData[], BYTE cbCardCount, BYTE cbMaxCardData[CT_COUNT], BYTE &cbBlockCount, int dCardType, bool isLastCard);
|
|
//牌组转换(将32张牌的使用情况转化为一个32位整型)
|
|
int TransListToInt(int iOldType,int iNewType);
|
|
//是否包含牌型
|
|
bool IsHasCardType(int iCardType, CART_TYPE ct_value);
|
|
|
|
private:
|
|
//获取类型结果
|
|
int GetType(tagAnalyseResult& AnalyseResult, const BYTE cbCardData[], BYTE cbCardCount, BYTE& cbMaxCardData, BYTE &cbBlockCount, bool isLastCard);
|
|
|
|
};
|
|
|
|
|
|
#endif
|