120 lines
4.6 KiB
C++
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);
|
|
};
|
|
} |