Files
wnmj/Classes/Games/WNMJ/WN_CardManager.h
2026-02-13 14:34:15 +08:00

120 lines
4.6 KiB
C++

#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<WN_SparrowCard*> m_OppHandCardList; // 对家
std::list<WN_SparrowCard*> m_RightHandCardList; // 右手边
std::list<WN_SparrowCard*> m_SelfHandCardList; // 自己
std::list<WN_SparrowCard*> m_LeftHandCardList; // 左手边
std::list<WN_SparrowCard*> 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<WN_SparrowCard*>* GetCardList(WORD wChairID);
void ClearCardList(WORD wChairID);
};
}