#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 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