⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 upgradelogic.h

📁 添七,棋牌游戏源代码,功能齐全,稳定,适合用于棋牌游戏开发
💻 H
字号:

#pragma once

#include "StdAfx.h"

//操作掩码
#define	UG_HUA_MASK					0xF0			//1111 0000
#define	UG_VALUE_MASK				0x0F			//0000 1111

//扑克花色
#define UG_FANG_KUAI				0x00			//方块	0000 0000
#define UG_MEI_HUA					0x10			//梅花	0001 0000
#define UG_HONG_TAO					0x20			//红桃	0010 0000
#define UG_HEI_TAO					0x30			//黑桃	0011 0000
#define UG_NT_CARD					0x40			//主牌	0100 0000
#define UG_ERROR_HUA				0xF0			//错误  1111 0000

//扑克出牌类型
#define UG_ERROR_KIND				0				//错误
#define UG_ONLY_ONE					1				//单牌
#define UG_DOUBLE					2				//对牌
#define UG_THREE					3				//三条

#define UG_DOUBLE_TRACKOR			4				//两条拖拉机
#define UG_THREE_TARCKOR			5				//三条拖拉机
#define	UG_SHOW_CARD				6				//甩牌


#define UG_THREE_AND_ONE			7				//三带一
#define UG_SINGLE_CONTINUE			8				//单顺
#define UG_DOUBLE_CONTINUE			9				//双顺
#define UG_THREE_CONTINUE			10				//三顺
#define UG_PLANE_AND_WING			11				//飞机带翅膀
#define UG_FOUR_AND_TWO				12				//四带二
#define UG_510K_BOMB				13				//510K
#define UG_BOMB						14				//炸弹
#define UG_ROCKET					15				//火箭


//扑克分析结构	(只用于服务器对比扑克)
struct CardAnalyseStruct
{
	int		iSignedCount;					//单牌数目
	int		iDoubleCount;					//对牌数目
	int		iThreeCount;					//三条数目
	int		iDoubleTractorCount;			//两对拖拉机数目
	int		iThreeTractorCount;				//三条拖拉机数目
	BYTE	iCardHuaKind;					//扑克花色

	BYTE	iBigSignedCard;					//最大单牌
	BYTE	iLessSignedCard;				//最小单牌
	BYTE	iDoubleArray[19];				//对牌数组
	BYTE	iThreeArray[13];				//三条数组
	BYTE	iDoubleTractorArray[54];		//两对拖拉机数组 (0 分割,长度,拖拉机数据)
	BYTE	iThreeTractorArray[48];			//三对拖拉机数组 (0 分割,长度,拖拉机数据)
};

//升级逻辑类 (支持 2 副和 3 副扑克)
class CUpGradeGameLogic
{
	//变量定义
private:
	BYTE					m_iNTNum;							//主牌数字
	BYTE					m_iNTHuaKind;						//主牌花色
	int						m_iStation[5];						//相对位置(方块,梅花,红桃,黑桃,主牌)
	
	CPtrList				m_ptrPSList;//牌列表

	struct PSTypeNode
	{
		int mps,mcount;

		PSTypeNode()
		{
			mps = -1;
			mcount = 0;
		}
	};


	//函数定义
public:
	//构造函数
	CUpGradeGameLogic(void);

	//功能函数(公共函数)
public:
	//设置主牌花色
	void SetNTHuaKind(BYTE iNTHuaKind);
	//获取主牌花色
	inline BYTE GetNTHuaKind() { return m_iNTHuaKind; }
	//设置主牌数字
	inline void SetNTCardNum(BYTE iNTNum) { m_iNTNum=iNTNum; }
	//获取主牌数字
	inline BYTE GetNTCardNum() { return m_iNTNum; }
	//获取扑克数字
	inline int GetCardNum(BYTE iCard) { return (iCard&UG_VALUE_MASK)+1; }
	//获取扑克花色
	BYTE GetCardHuaKind(BYTE iCard, BOOL bTrueHua);
	//排列扑克
	BOOL SortCard(BYTE iCardList[], BYTE bUp[], int iCardCount);
	//删除扑克
	int RemoveCard(BYTE iRemoveCard[], int iRemoveCount, BYTE iCardList[], int iCardCount);

	//重新排序
	BOOL ReSortCard(BYTE iCardList[], int iCardCount);

	//辅助函数
public:
	//是否单牌
	inline BOOL IsOnlyOne(BYTE iCardList[], int iCardCount) { return iCardCount==1; };
	//是否对牌
	BOOL IsDouble(BYTE iCardList[], int iCardCount);
	//是否三条
	BOOL IsThree(BYTE iCardList[], int iCardCount);
	//是否拖拉机逻辑
	BOOL IsTrackorRule(BYTE iFirstCard, BYTE iNextCard);
	//是否拖拉机(两条)
	BOOL IsDoubleTrackor(BYTE iCardList[], int iCardCount);
	//是否拖拉机(三条)
	BOOL IsThreeTrackor(BYTE iCardList[], int iCardCount);
	//是否甩牌
	BOOL IsShowCard(BYTE iCardList[], int iCardCount);
	//得到牌列花色
	BYTE GetCardListHua(BYTE iCardList[], int iCardCount);
    //获取牌型
	BYTE GetCardShape(BYTE iCardList[], int iCardCount);
	//获取扑克相对大小
	int GetCardBulk(BYTE iCard, BOOL bExtVol);
	//对比单牌
	BOOL CompareOnlyOne(BYTE iFirstCard, BYTE iNextCard);

	//是否三带一
	BOOL IsThreeAndOne(BYTE iCardList[], int iCardCount);
	//是否单顺
	BOOL IsSingleContinue(BYTE iCardList[], int iCardCount);
	//是否双顺
	BOOL IsDoubleContinue(BYTE iCardList[], int iCardCount);
	//是否三顺
	BOOL IsThreeContinue(BYTE iCardList[], int iCardCount);
	//是否飞机带翅膀
	BOOL IsPlaneAndWing(BYTE iCardList[], int iCardCount);
	//是否四带二
	BOOL IsFourAndTwo(BYTE iCardList[], int iCardCount);
	//是否炸弹
	BOOL IsBomb(BYTE iCardList[], int iCardCount);
	//是否火箭
	BOOL IsRocket(BYTE iCardList[], int iCardCount);
	//是否510K
	BOOL Is510KBomb(BYTE iCardList[], int iCardCount);
	//是否同花
	BOOL IsSameHua(BYTE iCardList[], int iCardCount);

	//其他函数
public:
	//获取扑克
	BYTE GetCardFromHua(int iHuaKind, int iNum);
	//查找分数
	int FindPoint(BYTE iCardList[], int iCardCount);
	//分析函数
	BOOL AnalyseCard(BYTE iCardList[], int iCardCount, CardAnalyseStruct & Analyse);

	//服务器专用函数
public:
	//对比函数
	int CompareCard(BYTE * iCardListArray[], int iCardCount);
	//对比甩牌
	int CompareShowCard(BYTE * iCardListArray[], int iCardCount);
	//是否可以甩牌
	BOOL CanShowCard(BYTE iOutCard[], int iOutCardCount, int iOutStation, BYTE * iCardArray[], int iCardArrayCount, BYTE iResultCard[], int & iResultCardCount);
	//混乱扑克
	BYTE RandCard(BYTE iCard[], int iCardCount);
	//变化扑克格式
	BOOL FixCardType(BYTE iCardList[], int iCardCount, CardAnalyseStruct & BaseAnalyse, CardAnalyseStruct & OutAnalyse);

	//客户端函数
public:
	//自动出牌函数
	int AutoOutCard(BYTE iHandCard[], int iHandCardCount, BYTE iBaseCard[][13], BYTE iBaseCardCount[], BYTE iResultCard[], int & iResultCardCount, BOOL bFirstOut);
	//是否可以出牌
	int CanOutCard(BYTE iOutCard[], int iOutCount, BYTE iBaseCard[][13], BYTE iBaseCount[], BYTE iHandCard[], int iHandCount);

	//内部函数
private:

	void SetCard(BYTE iCardList[], int iCardCount);
	void ClearPSInfo();

	//清除 0 位扑克
	int RemoveNummCard(BYTE iCardList[], int iCardCount);
	//提取对牌函数
	int TackOutDouble(BYTE iCardList[], int iCardCount, BYTE iDoubleBuffer[], BOOL bRemoveCard);
	//提取两条拖拉机函数
	int TackOutDoubleTrackor(BYTE iCardList[], int iCardCount, BYTE iDoubleBuffer[], BOOL bRemoveCard);
	//提取三条函数
	int TackOutThree(BYTE iCardList[], int iCardCount, BYTE iThreeBuffer[], BOOL bRemoveCard);
	//提取三条拖拉机函数
	int TackOutThreeTrackor(BYTE iCardList[], int iCardCount, BYTE iThreeBuffer[], BOOL bRemoveCard);
	//提取同一花色扑克
	int TackOutCardByHua(BYTE iCardList[], int iCardCount, BYTE iHuaKind, BYTE iCardBuffer[], BOOL bRemoveCard);
	//查找最长的拖拉机
	int	MaxThreeTractorLong(BYTE iCardList[], int iCardCount, BYTE iTrackorBuffer[]);
	//查找最长的拖拉机
	int	MaxDoubleTractorLong(BYTE iCardList[], int iCardCount, BYTE iTrackorBuffer[]);
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -