|
- #ifndef GAME_DATA_HEAD_FILE
- #define GAME_DATA_HEAD_FILE
- //////////////////////////////////////////////////////////////////////////
-
- #pragma once
- #include "Stdafx.h"
- /////////////////////////////////////////////////////////////////////////
- //#define FengDingTaiNum 5
- //#define MaxTaiNum 7
-
- //////////////////////////////////////////////////////////////////////////
- //麻将类型
- #define HongZhong 0x14 //红中晃晃
- #define FaCai 0x15 //发财晃晃
- #define DuoLaiHongZhong 0x16 //红中晃晃多癞子
- #define DuoLaiFaCai 0x17 //发财晃晃多癞子
- //////////////////////////////////////////////////////////////////////////
- //逻辑掩码
-
- #define MASK_COLOR 0xF0 //花色掩码
- #define MASK_VALUE 0x0F //数值掩码
-
- //////////////////////////////////////////////////////////////////////////
- //动作定义
-
- //动作标志
- #define WIK_NULL 0x00000000 //没有类型
- #define WIK_SHUANG_CAICHI 0x00000001 //双财吃
- #define WIK_SHUANG_PENG 0x00000002 //双财碰
- #define WIK_DAN_CHI 0x00000004 //单财吃
- #define WIK_DAN_PENG 0x00000008 //单财碰
- #define WIK_LEFT 0x00000010 //左吃类型
- #define WIK_CENTER 0x00000020 //中吃类型
- #define WIK_RIGHT 0x00000040 //右吃类型
- #define WIK_PENG 0x00000080 //碰牌类型
- #define WIK_DAN_BU_GANG 0x00000100 //补杠,财神补杠
- #define WIK_BU_GANG 0x00000200 //补杠,正补
- #define WIK_SAN_MING_GANG 0x00000400 //明杠,全财神明杠
- #define WIK_SHUANG_MING_GANG 0x00000800 //明杠,双财神明杠
- #define WIK_DAN_MING_GANG 0x00001000 //明杠,单财神明杠
- #define WIK_MING_GANG 0x00002000 //明杠
- #define WIK_QUANG_AN_GANG 0x00004000 //暗杠,全财神暗杠
- #define WIK_SAN_AN_GANG 0x00008000 //暗杠,三财神暗杠
- #define WIK_SHUANG_AN_GANG 0x00010000 //暗杠,双财神暗杠
- #define WIK_DAN_AN_GANG 0x00020000 //暗杠,单财神暗杠
- #define WIK_AN_GANG 0x00040000 //暗杠
-
- #define WIK_CHI_HU 0x00080000 //吃胡类型
- #define WIK_ZI_MO 0x00100000 //自摸
- #define WIK_TIAN_ZI_MO 0x00200000 //天胡
- #define WIK_DI_CHIHU 0x00400000 //地胡
- #define WIK_ZAHU 0x00800000 //咋胡
-
- #define WIK_CAIDIAO 0x01000000 //财吊
- #define WIK_SI_CAIHU 0x02000000 //四财胡
- #define WIK_GANG_SHANG_KAI 0x04000000 //杠上开花
- #define WIK_Qiang_GANG 0x08000000 //抢杠
- #define WIK_CanDingMagic 0x10000000 //定财神 专用,是否可以定财神
-
- #define WIK_GANG_GANG 0x0007C000 //表示暗杠的所有掩码之和
- #define WIK_PENG_PENG 0x0000008A //表示碰的所有掩码之和
- //////////////////////////////////////////////////////////////////////////
- //胡牌定义
- //台数-胡法
- #define ZJ_TAI_ZFB 0x0001 //中发白
- #define ZJ_TAI_HunYiSe 0x0002 //混一色
- #define ZJ_TAI_PengPeng 0x0004 //碰碰胡
- #define ZJ_TAI_QuanShun 0x0008 //全顺
- #define ZJ_TAI_GangKai 0x0010 //杠上开花
- #define ZJ_TAI_QiangGang 0x0020 //抢杠胡
- #define ZJ_TAI_Gang 0x0040 //这个是干什么的,占时作为中发白刻 //定财神 此值 当作单财胡
- #define ZJ_TAI_WuMagic 0x0080 //无财神牌
- #define ZJ_TAI_DongFeng 0x0100 //东风刻字
- #define ZJ_TAI_QingYiSe 0x0200 //清一色
- #define ZJ_TAI_TianHu 0x0400 //天胡
- #define ZJ_TAI_DiHu 0x0800 //地胡
- #define ZJ_TAI_QuanZi 0x1000 //全字 辣子胡
- #define ZJ_TAI_WuMagicFengJiangHunYise 0x2000 //无财神 东 中发白 做将 的混一色
- #define ZJ_TAI_ZHAHU 0x4000 //炸胡 包三家 包家有胡不胡。
- ///---------------tdh怎加
- #define ZJ_TAI_CaiDiao 0x04000 //财吊
- #define ZJ_TAI_SiCaiHu 0x08000 //四财胡 推倒胡
- // #define ZJ_TAI_KEGANG 0x10000 //刻杠 这2 越界了 胡法之用了16个位
- // #define ZJ_TAI_danMagic 0x20000 //单财胡
- //////////////////////////////////////////////////////////////////////////
-
- #define ZI_PAI_COUNT 7
-
- #pragma pack(1)
- //类型子项
- struct tagKindItem
- {
- INT cbWeaveKind; //组合类型
- BYTE cbCenterCard; //中心扑克
- BYTE cbCardIndex[3]; //扑克索引
- BYTE cbValidIndex[3]; //实际扑克索引
- };
-
- //组合子项
- struct tagWeaveItem
- {
- INT cbWeaveKind; //组合类型
- BYTE cbCenterCard; //中心扑克
- BYTE cbPublicCard; //公开标志
- WORD wProvideUser; //供应用户
- BYTE cbMargicOffset[4]; //如果有财神参与组合,财神的位置 1-4 ,该位置存储实际是那张财神的index
- //BYTE ShenYuCard[3]; //组合的剩余牌值
- };
-
- //杠牌结果
- struct tagGangCardResult
- {
- BYTE cbCardCount; //扑克数目
- WORD cbCardData[6]; //扑克数据
- };
-
- //分析子项
- struct tagAnalyseItem
- {
- BYTE cbCardEye; //牌眼扑克
- bool bMagicEye; //牌眼是否是王霸
- INT cbWeaveKind[4]; //组合类型
- BYTE cbCenterCard[4]; //中心扑克
- BYTE cbCardData[4][4]; //实际扑克
- };
-
- #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;
-
- //异或
- //异或等于
- CChiHuRight & operator -= (DWORD dwRight);
-
- //功能函数
- 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;
- #endif
|