|
- #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<tagAnalyseItem, tagAnalyseItem &> CAnalyseItemArray;
- //数组说明
- typedef CWHArray<tagAnalyseItem_hua, tagAnalyseItem_hua &> CAnalyseItemArray_hua;
- #endif
|