#ifndef GAME_DATA_HEAD_FILE #define GAME_DATA_HEAD_FILE ////////////////////////////////////////////////////////////////////////// #pragma once #include "Stdafx.h" ////////////////////////////////////////////////////////////////////////// //麻将类型 #define OneStepLaiYou 0x00 //一脚癞油 #define BanLai 0x02 //半癞 #define WuLaiDaoDi 0x01 //无赖到底 #define CXZOneStepLaiYou 0x03 //撮虾子一脚癞油 #define CXZBanLai 0x05 //撮虾子半癞 #define CXZWuLaiDaoDi 0x04 //撮虾子无赖到底 #define XueLiu 0x0A //血流成河 ////////////////////////////////////////////////////////////////////////// //逻辑掩码 #define MASK_COLOR 0xF0 //花色掩码 #define MASK_VALUE 0x0F //数值掩码 ////////////////////////////////////////////////////////////////////////// //动作定义 //动作标志 #define WIK_NULL 0x00000 //没有类型 #define WIK_LEFT 0x00001 //左吃类型,不许用 #define WIK_CENTER 0x00002 //中吃类型,不许用 #define WIK_RIGHT 0x00004 //右吃类型 #define WIK_PENG 0x00008 //碰牌类型 #define WIK_GANG 0x00010 //杠牌类型 #define WIK_DUO_PAO 0x00020 //吃牌类型,一炮多项 血流 #define WIK_CHI_HU 0x00040 //吃胡类型,血流 #define WIK_ZI_MO 0x00080 //自摸 #define WIK_RUAN_ZIMO 0x00100 //软自摸 #define WIK_YING_ZIMO 0x00200 //硬自摸 #define WIK_RUAN_LAIYOU 0x00400 //软癞油 #define WIK_YING_LAIYOU 0x00800 //硬癞油 #define WIK_AN_GANG 0x01000 //暗杠 #define WIK_BU_GANG 0x02000 //补杠 #define WIK_MING_GANG 0x04000 //明杠 #define WIK_AN_PIGANG 0x08000 //皮子暗杠 #define WIK_MING_PIGANG 0x10000 //皮子明杠 #define WIK_CHU_PAI 0x20000 //出牌 #define WIK_HUA_ZHU 0x80000 //花猪 ////////////////////////////////////////////////////////////////////////// //胡牌定义 #define WIK_DUI 0x01 //对牌类型 #define WIK_SAN_ZHAO 0x02 //三招一类型 #define WIK_QI_TA 0x04 //三个连一起的类型 #define WIK_SI_ZHAO 0x08 //补招 #define WIK_SI_TONG 0x10 //四统类型 #define WIK_WU_TONG 0x20 //五统类型 #define WIK_BH_WJCP 0x100 //庄家手牌可以出牌通知掩码 //胡牌 #define CHK_NULL 0x00 //非胡类型 #define CHK_CHI_HU 0x01 //胡类型 #define CHK_PENGPENG 0x02 //碰碰胡 #define CHR_QING_YI_SE 0x04 //清一色 #define CHR_QING_DUI 0x08 //清对 #define CHR_MEN_QIAN_QING 0x10 //门前清 #define CHR_HUA_ZHU 0x02 //花猪 #define CHR_CHA_JIAO 0x01 //查叫 #define DIAN_PAO 0x01 //点炮 #define CHI_HU 0x02 //吃胡 #define ZI_MO 0x03 //自摸 #define BEI_ZIMO 0x04 //被自摸 #define CHA_JIAO 0x05 //查叫 #define BEI_CHAJIAO 0x06 //被查叫 #define HUA_ZHU 0x07 //花猪 #define BEI_HUAZHU 0x08 //被花猪 //#define CHR_QIANG_GANG 0x00000001 //抢杠 //#define CHR_GANG_SHANG_PAO 0x00000002 //杠上炮 //#define CHR_GANG_KAI 0x00000004 //杠上花 //#define CHR_TIAN_HU 0x00000008 //天胡 //#define CHR_DI_HU 0x00000010 //地胡 //#define CHR_DA_DUI_ZI 0x00000020 //大对子 //#define CHR_QING_YI_SE 0x00000040 //清一色 //#define CHR_QI_XIAO_DUI 0x00000080 //暗七对 //#define CHR_DAI_YAO 0x00000100 //带幺 //#define CHR_JIANG_DUI 0x00000200 //将对 //#define CHR_SHU_FAN 0x00000400 //素番 //#define CHR_QING_DUI 0x00000800 //清对 //#define CHR_LONG_QI_DUI 0x00001000 //龙七对 //#define CHR_QING_QI_DUI 0x00002000 //清七对 //#define CHR_QING_YAO_JIU 0x00004000 //清幺九 //#define CHR_QING_LONG_QI_DUI 0x00008000 //清龙七对 //#define CHR_HAI_DI_LAO_YUE 0x00010000 //海底捞月 //#define CHR_HAI_DI_PAO 0x00020000 //海底炮 //#define CHR_DA_DAN_DIAO 0x00040000 //大单吊 //#define CHR_MEN_QIAN_QING 0x00080000 //门前清 //#define CHR_ZHONG_ZHANG 0x00100000 //中张 //#define CHR_RUAN_ZIMO 0x00110000 //软自摸 //#define CHR_YING_ZIMO 0x00120000 //硬自摸 //#define CHR_RUAN_LAIYOU 0x00130000 //软癞油 //#define CHR_YING_LAIYOU 0x00140000 //硬癞油 ////////////////////////////////////////////////////////////////////////// #define ZI_PAI_COUNT 7 #pragma pack(1) //类型子项 struct tagKindItem { INT cbWeaveKind; //组合类型 BYTE cbCenterCard; //中心扑克 BYTE cbCardIndex[3]; //扑克索引 BYTE cbValidIndex[3]; //实际扑克索引 }; //类型子项 struct tagKindItem_hua { BYTE cbWeaveKind; //组合类型 BYTE cbCenterCard; //中心扑克索引 BYTE cbCardIndex[5]; //扑克索引 BYTE cbCardCount; //扑克数量 }; //组合子项 struct tagWeaveItem { INT cbWeaveKind; //组合类型 BYTE cbCenterCard; //中心扑克 BYTE cbPublicCard; //公开标志 WORD wProvideUser; //供应用户 }; struct tagWeaveItem_Hua { INT cbWeaveKind; //组合类型 BYTE cbCenterCard; //中心扑克 BYTE cbPublicCard; //公开标志 WORD wProvideUser; //供应用户 BYTE cbMargicOffset[4]; //组合花牌个数 }; //杠牌结果 struct tagGangCardResult { BYTE cbCardCount; //扑克数目 BYTE cbCardData[4]; //扑克数据 }; //杠牌结果 struct tagGangCardResult_Hua { BYTE cbCardCount; //扑克数目 BYTE cbCardData[6]; //扑克数据 }; //分析子项 struct tagAnalyseItem { BYTE cbCardEye; //牌眼扑克 bool bMagicEye; //牌眼是否是王霸 INT cbWeaveKind[4]; //组合类型 BYTE cbCenterCard[4]; //中心扑克 BYTE cbCardData[4][4]; //实际扑克 }; //分析子项 struct tagAnalyseItem_hua { BYTE cbCardEye[2]; //丫口索引 BYTE cbWeaveKind[8]; //组合类型 BYTE cbCenterCard[8]; //中心扑克 WORD cbPoint; //组合牌的最佳点数 BYTE cbGoldCard; //选定的主金 //调试时用的信息 BYTE cbGoldPoint[3]; //保存五种主金计算出来的分数 BYTE cbKindPoint[8]; //每一种胡牌组合中每一个组合项的点数 }; //胡牌结果 struct tagHuCardResult { bool IsHu; //是否可以胡牌 BYTE HuScore; //胡牌的分数 WORD bHuPoint; //胡点 BYTE bRealGold; //主金 tagAnalyseItem_hua AnalyseItem; //胡牌时最佳组合 }; #pragma pack() ////////////////////////////////////////////////////////////////////////// #define MASK_CHI_HU_RIGHT 0x0fffffff /* // 权位类。 // 注意,在操作仅位时最好只操作单个权位.例如 // CChiHuRight chr; // chr |= (chr_zi_mo|chr_peng_peng),这样结果是无定义的。 // 只能单个操作: // chr |= chr_zi_mo; // chr |= chr_peng_peng; */ class CChiHuRight { //静态变量 private: static bool m_bInit; static DWORD m_dwRightMask[MAX_RIGHT_COUNT]; //权位变量 private: DWORD m_dwRight[MAX_RIGHT_COUNT]; public: //构造函数 CChiHuRight(); //运算符重载 public: //赋值符 CChiHuRight & operator = (DWORD dwRight); //与等于 CChiHuRight & operator &= (DWORD dwRight); //或等于 CChiHuRight & operator |= (DWORD dwRight); //与 CChiHuRight operator & (DWORD dwRight); CChiHuRight operator & (DWORD dwRight) const; //或 CChiHuRight operator | (DWORD dwRight); CChiHuRight operator | (DWORD dwRight) const; //功能函数 public: //是否权位为空 bool IsEmpty(); //设置权位为空 void SetEmpty(); //获取权位数值 BYTE GetRightData(DWORD dwRight[], BYTE cbMaxCount); //设置权位数值 bool SetRightData(const DWORD dwRight[], BYTE cbRightCount); private: //检查权位是否正确 bool IsValidRight(DWORD dwRight); }; //效验类型 enum enEstimatKind { EstimatKind_OutCard, //出牌效验 EstimatKind_GangCard, //杠牌效验 }; //杠牌得分 struct tagGangScore { BYTE cbGangCount; //杠个数 LONGLONG lScore[MAX_WEAVE][GAME_PLAYER]; //每个杠得分 }; struct tagChihu { BYTE action; //点炮,吃胡,自摸,被自摸 BYTE chr; //胡的牌型,清一色,碰碰胡 BYTE Fanshu; //翻数 BYTE cbChihuCard; //胡的牌值 BYTE wProvideUser; //关系 int Score; //胡牌分数 }; struct tagChiCard { BYTE action; //吃胡,自摸,一炮多向 BYTE wProvideUser; //关系 BYTE cbChihuCard; //胡的牌值 }; struct tagActionLast //当前时,最后一个动作吃胡,自摸,记录最后动作的人,code,card { BYTE action; //吃胡,自摸,一炮多向 BYTE wProvideUser; //关系 BYTE cbChihuCard; //胡的牌值 }; ////////////////////////////////////////////////////////////////////////// //数组说明 typedef CWHArray CAnalyseItemArray; //数组说明 typedef CWHArray CAnalyseItemArray_hua; #endif