165 lines
4.2 KiB
C++
165 lines
4.2 KiB
C++
#ifndef GAME_LOGIC_HEAD_FILE
|
|
#define GAME_LOGIC_HEAD_FILE
|
|
|
|
#pragma once
|
|
|
|
#include "cocos2d.h"
|
|
#include "ui/CocosGUI.h"
|
|
#include "Define.h"
|
|
|
|
#include "WN_CMD_Sparrow.h"
|
|
|
|
USING_NS_CC;
|
|
|
|
namespace WNMJ_SPACE{
|
|
|
|
//逻辑掩码
|
|
enum WNMJ_MASK
|
|
{
|
|
MASK_WN_COLOR = 0xF0, //花色掩码
|
|
MASK_WN_VALUE = 0x0F, //数值掩码
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//动作定义
|
|
|
|
enum WN_WIK_TYPE
|
|
{
|
|
WIK_WN_NULL = 0x0000, //没有类型
|
|
WIK_WN_LEFT = (1 << 0), //左吃类型
|
|
WIK_WN_CENTER = (1 << 1), //中吃类型
|
|
WIK_WN_RIGHT = (1 << 2), //右吃类型
|
|
WIK_WN_PENG = (1 << 3), //碰牌类型
|
|
WIK_WN_GANG = (1 << 4), //杠牌类型
|
|
WIK_WN_CHI_HU = (1 << 5), //吃胡类型
|
|
WIK_WN_DNBL = (1 << 6), //东南北左
|
|
WIK_WN_DNBC = (1 << 7), //东南北中
|
|
WIK_WN_DNBR = (1 << 8), //东南北右
|
|
WIK_WN_DXBL = (1 << 9), //东西北左
|
|
WIK_WN_DXBC = (1 << 10), //东西北中
|
|
WIK_WN_DXBR = (1 << 11), //东西北右
|
|
WIK_WN_CHI = (WIK_WN_RIGHT | WIK_WN_CENTER | WIK_WN_LEFT | WIK_WN_DNBL | WIK_WN_DNBC | WIK_WN_DNBR | WIK_WN_DXBL | WIK_WN_DXBC | WIK_WN_DXBR), //吃牌类型
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//胡牌定义
|
|
enum WNMJ_HU_TYPE
|
|
{
|
|
//非胡类型
|
|
CHK_NULL = 0x0000, //非胡类型
|
|
|
|
//胡牌类型
|
|
CHK_JI_HU = 0x0001, //基本胡
|
|
CHK_QI_DUI = 0x0002, //七对
|
|
CHK_THIRTEEN = 0x0004, //13乱
|
|
CHK_SERVEN = 0x0008, //七星
|
|
CHK_PENG_PENG = 0x0010, //碰碰胡;
|
|
CHK_HUNYISE = 0x0020, //混一色;
|
|
CHK_QINYISE = 0x0040, //清一色;
|
|
CHK_ZIYISE = 0x0080, //字一色;
|
|
|
|
//胡牌权位
|
|
CHR_ZI_MO = 0x0001, //自摸权位
|
|
CHR_QIANG_GANG = 0x0002, //抢杠权位
|
|
CHR_GANG_FLOWER = 0x0004, //杠上开花
|
|
CHR_HAS_KING = 0x0008, //有宝权位
|
|
CHR_GERMAN = 0x0010, //德国权位
|
|
CHR_TIAN = 0x0020, //天胡权位
|
|
CHR_DI = 0x0040, //地胡权位
|
|
CHR_LIAN_GANG_FLOWER = 0x0080, //连杠胡权位;
|
|
CHR_QIANG_LIAN_GANG = 0x0100, //抢连杠胡权位;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//类型子项
|
|
struct tagKindItem
|
|
{
|
|
uint8 cbWeaveKingReplace; //王牌替换
|
|
WORD wWeaveKind; //组合类型
|
|
uint8 cbCenterCard; //中心扑克
|
|
uint8 cbCardIndex[3]; //扑克索引
|
|
};
|
|
|
|
//胡牌结果
|
|
struct tagChiHuResult
|
|
{
|
|
WORD wChiHuKind; //吃胡类型
|
|
WORD wChiHuRight; //胡牌权位
|
|
};
|
|
|
|
|
|
|
|
//分析子项
|
|
struct tagAnalyseItem
|
|
{
|
|
uint8 cbEyeKingReplace; //精牌替换
|
|
uint8 cbWeaveKingReplace; //精牌替换
|
|
uint8 cbCardEye; //牌眼扑克
|
|
WORD wWeaveKind[MAX_WEAVE]; //组合类型
|
|
uint8 cbCenterCard[MAX_WEAVE]; //中心扑克
|
|
};
|
|
|
|
enum EN_KING_TYPE
|
|
{
|
|
KT_MAIN = 0, // 正
|
|
KT_VICE, // 副
|
|
KT_KING, // 精
|
|
KT_NULL, // 普通牌
|
|
};
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//数组说明
|
|
typedef CArrayTemplate<tagAnalyseItem, tagAnalyseItem &> CAnalyseItemArray;
|
|
|
|
//游戏逻辑类
|
|
class WN_CGameLogic
|
|
{
|
|
CREATE_SINGLETON_MUTEX_CLEAR(WN_CGameLogic, s_configInstance, nullptr);
|
|
|
|
private:
|
|
static WN_CGameLogic *s_configInstance;
|
|
|
|
private:
|
|
void init();
|
|
void clear();
|
|
|
|
//变量定义
|
|
protected:
|
|
static const uint8 m_cbCardDataArray[MAX_REPERTORY]; //扑克数据
|
|
uint8 m_cbKingCardIndex[2]; //王牌
|
|
|
|
//辅助函数
|
|
public:
|
|
|
|
//有效判断
|
|
static bool IsValidCard(uint8 cbCardData);
|
|
//扑克数目
|
|
uint8 GetCardCount(uint8 cbCardIndex[MAX_INDEX]);
|
|
//组合扑克
|
|
uint8 GetWeaveCard(WORD cbWeaveKind, uint8 cbCenterCard, uint8 cbCardBuffer[4]);
|
|
//获取数值
|
|
static uint8 GetCardValue(uint8 cbCardData) { return (cbCardData&MASK_WN_VALUE); }
|
|
//获取花色
|
|
static uint8 GetCardColor(uint8 cbCardData) { return ((cbCardData&MASK_WN_COLOR) >> 4); }
|
|
//获取胡牌类型
|
|
std::string GetHuKind(WORD wChiHuKind);
|
|
//获取胡牌维权
|
|
std::string GetHuRight(WORD wChiHuRight);
|
|
|
|
//转换函数
|
|
public:
|
|
//扑克转换
|
|
uint8 SwitchToCardData(uint8 cbCardIndex);
|
|
//扑克转换
|
|
uint8 SwitchToCardIndex(uint8 cbCardData);
|
|
|
|
//动作判断
|
|
public:
|
|
//杠牌分析
|
|
WORD AnalyseGangCard(uint8 cbCardIndex[MAX_INDEX], tagWeaveItem WeaveItem[], uint8 cbWeaveCount, tagGangCardResult & GangCardResult);
|
|
};
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
#endif |