#pragma once #include "cocos2d.h" #include "ui/CocosGUI.h" #include "WN_CMD_Sparrow.h" #include "WN_WeaveCard.h" #include "WN_GameLogic.h" #include "WN_CNotifyDlg.h" #include "WN_SparrowCard.h" USING_NS_CC; using namespace ui; using namespace std; namespace WNMJ_SPACE{ ////////////////////////////////////////////////////////////////////////// //麻将管理类 class WN_CardManager : public cocos2d::Layer { // 用户信息 public: WORD m_wCurrentUser; // 当前用户 bool m_IsGameRecord; // 是否是录像模式; bool m_bOutCardStatus; // 是否是可出牌状态; WORD m_wRealChairCount; // 真实玩家数量; ///<坐标变量(客户端椅子号保存) public: Point m_ptStartCard[GAME_PLAYER]; // 每个玩家第一张手牌 Point m_ptOutCard[GAME_PLAYER]; // 每个玩家第一张出牌 Point m_ptCurrentCard[GAME_PLAYER]; // 每个玩家当前出牌 Point m_ptWeaveCard[GAME_PLAYER]; // 每个玩家组合牌坐标 Point m_ptKingCard[2]; // 精牌坐标 ///<麻将列表(客户端椅子号保存) public: WN_SparrowCard* m_pLastHandCard[GAME_PLAYER]; // 第十四张牌 std::list m_OppHandCardList; // 对家 std::list m_RightHandCardList; // 右手边 std::list m_SelfHandCardList; // 自己 std::list m_LeftHandCardList; // 左手边 std::list m_pOutCardSprite; // 每个玩家出牌 WN_WeaveCard* m_pWeaveCard[GAME_PLAYER][MAX_WEAVE]; // 每个玩家组合牌 WN_SparrowCard* m_pCurrentOutCard; // 当前玩家打出的牌 WN_SparrowCard* m_pKingCardSprite[2]; // 精牌位置 uint8 m_cbHandCardCount[GAME_PLAYER]; // 每个玩家手牌数量 uint8 m_cbOutCarCount[GAME_PLAYER]; // 每个玩家出牌数量 uint8 m_cbWeaveCount[GAME_PLAYER]; // 每个玩家组合牌数量 bool m_bActiveStatus[GAME_PLAYER]; //玩家状态; WN_NotifyDlg* m_pNoticelayer; // 高级操作 // //组合牌数据 //public: // CMD_S_OperateNotify m_OperateNotify; // 操作信息 ///<函数定义 public: WN_CardManager(); ~WN_CardManager(); CREATE_FUNC(WN_CardManager); virtual bool init(); // 初始化 void ResetAll(); // 重置 void SetCurrentUser(WORD wChairID); // 设置当前玩家 void SetGameRecord(bool isGameRecord); // 设置录像模式; void SetActiveStatus(bool bActiveStatus[], WORD wArrViewChairID[], WORD wRealChairCount); // 控制函数 public: float SetAllCard(uint8 cbCardData[], WORD wStartID); // 发所有牌 float SendAllCard(WORD wStartID); // 发所有牌 void SendCard(uint8 cbCardData, WORD wGetCardUser); // 发牌 void SubOutCard(uint8 cbCardData, WORD wOutCardUser, bool isShow = true); // 用户出牌(视图椅子号) void SubWeaveCard(CMD_S_OperateResult *pOperateResult); // 组合牌 void SetGangWeave(CMD_S_OperateResult *pOperateResult); // 杠组合 void SetPengWeave(CMD_S_OperateResult *pOperateResult); // 碰组合 void SortSelfCard(WORD wChairID = SELF_VIEW_CHAIRID); // 自己手牌排序 void ShowCurrentCard(WORD wChairID, uint8 cbCardData); // 显示当前打出的牌 void DelOutCard(WORD wChairID, uint8 cbCardData); // 删除出牌 void ResetHandCard(WORD wChairID); // 重置手牌坐标 Point GetWaveCardPoint(WORD wChairID); // 组合牌坐标 Point GetCardPoint(WORD wChairID, uint8 cbIndex); // 得到手牌坐标 Point GetOutPoint(WORD wViewChairID); // 出牌坐标 // 场景恢复函数 public: void SceneWeaveCard(WORD wViewChairID, uint8 cbWeaveCount, tagWeaveItem WeaveItemArray[MAX_WEAVE], WORD wArrViewChairID[GAME_PLAYER]); // 组合牌处理 void SceneHandCard(WORD wViewChairID, uint8 cbCardCount, uint8 cbCardData[]); // 玩家手牌 void SceneOutCard(WORD wViewChairID, uint8 cbCardCount, uint8 cbOutCardData[]); // 玩家出牌 // 游戏结束显示函数 public: // 显示最后一张牌 void ShowLastCard(uint8 cbCardData, WORD wGetCardUser, uint8 cbDirection); // 显示所有手牌; void ShowAllHandCard(WORD wChairID, uint8 cbCardCount, const uint8 cbCardData[MAX_COUNT]); // 高级操作界面 public: void HideNoticeDlg(); // 隐藏高级操作界面; void SetNoticeData(CMD_S_OperateNotify &OperateNotify); // 设置高级操作界面; bool IsHaveOperateCard(DWORD dwUserAction); // 是否有高级操作; bool CheckOperateCard(uint8 cbOperateCard); // 检查操作牌是否是杠牌; // 玩家操作 public: bool onSendCardEvent(cocos2d::Ref *pSender, Vec2 pos); // 点击出牌; private: std::list* GetCardList(WORD wChairID); void ClearCardList(WORD wChairID); }; }