📄 upgradelogic.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_HYDROGEN_BOMB 4 //氢弹
#define UG_DAO_HYDROGEN_BOMB 5 //刀氢弹
#define UG_ATOM 6 //原子
#define UG_DAO_ATOM 7 //刀原子
#define UG_DW_ATOM 8 //大王原子
#define UG_XW_ATOM 9 //小王原子
#define UG_BOMB 10 //炸弹
//升级逻辑类 (支持 2 副和 3 副扑克)
class CUpGradeGameLogic
{
//变量定义
private:
BYTE m_iDaoCard; //刀牌
int m_iStation[5]; //相对位置(方块,梅花,红桃,黑桃,主牌)
CPtrList m_ptrPSList;//牌列表
struct PSTypeNode
{
int mps,mcount;
PSTypeNode()
{
mps = -1;
mcount = 0;
}
};
//函数定义
public:
//构造函数
CUpGradeGameLogic(void);
//功能函数(公共函数)
public:
//设置刀牌
void SetDaoCard(BYTE iDaoCard);
//获取扑克数字
inline int GetCardNum(BYTE iCard) { return (iCard&UG_VALUE_MASK)+1; }
//获取扑克花色
BYTE GetCardHuaKind(BYTE iCard);
//排列扑克
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 IsHydrogenBomb(BYTE iCardList[], int iCardCount);
//是否刀氢弹
BOOL IsDaoHydrogenBomb(BYTE iCardList[], int iCardCount);
//是否原子
BOOL IsAtom(BYTE iCardList[], int iCardCount);
//是否刀原子
BOOL IsDaoAtom(BYTE iCardList[], int iCardCount);
//是否大王原子
BOOL IsDWAtom(BYTE iCardList[], int iCardCount);
//是否小王原子
BOOL IsXWAtom(BYTE iCardList[], int iCardCount);
//是否炸弹
BOOL IsBomb(BYTE iCardList[], int iCardCount);
//获取牌型
BYTE GetCardShape(BYTE iCardList[], int iCardCount);
//获取扑克相对大小
int GetCardBulk(BYTE iCard);
//对比单牌
BOOL CompareOnlyOne(int iFirstCard, int iNextCard);
//是否同花
BOOL IsSameHua(BYTE iCardList[], int iCardCount);
//其他函数
public:
//获取扑克
BYTE GetCardFromHua(int iHuaKind, int iNum);
//查找分数
int FindPoint(BYTE iCardList[], int iCardCount);
//服务器专用函数
public:
//混乱扑克
BYTE RandCard(BYTE iCard[], int iCardCount);
//客户端函数
public:
//自动出牌函数
BOOL AutoOutCard(BYTE iHandCard[], int iHandCardCount, BYTE iBaseCard[], int iBaseCardCount, BYTE iResultCard[], int & iResultCardCount, BOOL bFirstOut);
//是否可以出牌
BOOL CanOutCard(BYTE iOutCard[], int iOutCount, BYTE iBaseCard[], int iBaseCount, BYTE iHandCard[], int iHandCount);
//内部函数
private:
void SetCard(BYTE iCardList[], int iCardCount);
void ClearPSInfo();
//清除 0 位扑克
int RemoveNummCard(BYTE iCardList[], int iCardCount);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -