struct GameRecordPlayer
{
DWORD dwUserID;
std::string kHead;
std::string kNickName;
std::vector<BYTE> cbCardData;
void StreamValue(datastream& kData, bool bSend)
{
Stream_VALUE(dwUserID);
Stream_VALUE(kHead);
Stream_VALUE(kNickName);
Stream_VECTOR(cbCardData);
}
};
struct GameRecordOperateResult
{
enum Type
{
TYPE_NULL,
TYPE_OperateResult,
TYPE_SendCard,
TYPE_OutCard,
TYPE_ChiHu,
};
GameRecordOperateResult()
{
cbActionType = 0;
wOperateUser = 0;
wProvideUser = 0;
cbOperateCode = 0;
cbOperateCard = 0;
}
BYTE cbActionType;
WORD wOperateUser; //操作用户
WORD wProvideUser; //供应用户
BYTE cbOperateCode; //操作代码
BYTE cbOperateCard; //操作扑克
void StreamValue(datastream& kData, bool bSend)
{
Stream_VALUE(cbActionType);
Stream_VALUE(wOperateUser);
Stream_VALUE(wProvideUser);
Stream_VALUE(cbOperateCode);
Stream_VALUE(cbOperateCard);
}
};
struct GameRecord
{
std::vector<GameRecordPlayer> kPlayers;
std::vector<GameRecordOperateResult> kAction;
void StreamValue(datastream& kData, bool bSend)
{
StructVecotrMember(GameRecordPlayer, kPlayers);
StructVecotrMember(GameRecordOperateResult, kAction);
}
void CleanUp()
{
kPlayers.clear();
kAction.clear();
}
};
#define Stream_VALUE(Name) \
if(bSend) \
{ \
kData.pushValue(Name);\
}\
else\
{\
kData.popValue(Name);\
}\
//游戏开始
void CTableFrameSink::GameStart()
{
...
//填充四个玩家的基础信息
for (int i = 0; i < 4; i++)
{
GameRecordPlayer tNewRecordPlayer;
tagUserInfo * tpUserInfo = m_pITableFrame->GetTableUserItem(i)->GetUserInfo();
tNewRecordPlayer.dwUserID = tpUserInfo->dwUserID;
tNewRecordPlayer.kNickName = tpUserInfo->szNickName;
//取得手牌信息
BYTE cbCardData[MAX_COUNT];
m_GameLogic.SwitchAllToCardData(m_cbCardIndex[i], cbCardData);
for (int j = 0; j < MAX_COUNT ; j++)
{
tNewRecordPlayer.cbCardData.push_back(cbCardData[j]);
}
//存储到当前记录结构中的玩家信息容器。
m_sGameRecord.kPlayers.push_back(tNewRecordPlayer);
}
}
//用户出牌
bool CTableFrameSink::OnUserOutCard(WORD wChairID, BYTE cbCardData)
{
...
//记录动作数据
GameRecordOperateResult tNewRecordOperateResult;
tNewRecordOperateResult.cbActionType = GameRecordOperateResult::TYPE_OutCard;
tNewRecordOperateResult.cbOperateCard = cbCardData;
tNewRecordOperateResult.cbOperateCode = WIK_NULL;
tNewRecordOperateResult.wOperateUser = wChairID;
tNewRecordOperateResult.wProvideUser = wChairID;
m_sGameRecord.kAction.push_back(tNewRecordOperateResult);
...
}
//用户操作
bool CTableFrameSink::OnUserOperateCard(WORD wChairID, BYTE cbOperateCode, BYTE cbOperateCard)
{
...
//记录动作数据
GameRecordOperateResult tNewRecordOperateResult;
tNewRecordOperateResult.cbActionType = XZDDGameRecordOperateResult::TYPE_OperateResult;
tNewRecordOperateResult.cbOperateCard = cbOperateCard;
tNewRecordOperateResult.cbOperateCode = cbOperateCode;
tNewRecordOperateResult.wOperateUser = wChairID;
tNewRecordOperateResult.wProvideUser = m_wProvideUser;
m_sGameRecord.kAction.push_back(tNewRecordOperateResult);
...
}
//游戏结束
bool CTableFrameSink::OnEventGameConclude(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason)
{
switch (cbReason)
{
case GER_NORMAL: //常规结束
{
...
//将记录转化为数据流。
datastream kDataStream;
m_sGameRecord.StreamValue(kDataStream, true);
//除去写分等处理,这里最后一个参数即是数据流。
m_pITableFrame->WriteTableScore(ScoreInfoArray, CountArray(ScoreInfoArray), kDataStream);
...
}
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有