房卡麻将分析系列之"断线重连"
Posted 火云洞红孩儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了房卡麻将分析系列之"断线重连"相关的知识,希望对你有一定的参考价值。
”房卡“麻将研发技巧,尽在”红孩儿的游戏开发之路“,欢迎关注公众号!
房卡麻将分析系列之"断线重连"
大家好,我是红孩儿,“房卡”麻将分析系列继续进行中。
在进行游戏的过程中,人们往往会遇到“断线”情况,比如坐公车,地铁下班路上玩一局,下车转站时往往先关机,过一会儿再上线继续完,如果没有自动“断线重连”,则对于牌局的体验感影响会非常大,在“房卡”麻将中加入“断线重连”也成为了必要的技术指标。那么怎么做到呢?
首先,游戏服务器上要保存当前进行中的游戏的所有玩家信息。包括玩家名称,ID,头像地址,积分等等。除非解散房间,否则不因为玩家断线而清除房间里的玩家信息,只做玩家的在线状态切换。
然后,在客户端上线时,发送玩家登录请求,服务器在收到当前玩家的请求后,验证通过取得ID,并通过ID查询玩家是否在游戏房间中,如果在,则由对应房间向玩家发送房间信息,所有用户信息和手牌,打出的牌,起牌,操作提示等信息,并将掉线玩家的状态设为上线。
客户端在收到房间信息后进入房间,并显示相应其它玩家信息和重现牌局。总之,需要显示什么,服务器需要一股脑的都发回来并在客户端获取并设置显示。当然,这也并不是说一个消息就能发送完的,一般客户端会收到(1)登录成功(2)房间信息(3)游戏状态信息三个消息。
登录成功消息就不说了,收到登录成功后,客户端会收到更新用户信息消息,如果用户的房间ID有效,则说明在游戏中,直接切换到游戏房间界面,下面是房间信息和游戏状态信息的结构:
//私人场房间信息
struct CMD_GF_Private_Room_Info
{
byte bPlayCoutIdex; //玩家局数0 1, 8 或者16局
byte bGameTypeIdex; //游戏类型
dword bGameRuleIdex; //游戏规则
byte bStartGame; //游戏是否开始
dword dwPlayCout; //游戏局数
dword dwRoomNum; //房号
dword dwCreateUserID; //房主ID
dword dwPlayTotal; //总局数
byte cbRoomType; //公开房还是包房
std::vector<int> kWinLoseScore; //分数
};
//游戏状态
struct CMD_S_StatusPlay
{
//游戏变量
LONGLONG lCellScore; //单元积分
WORD wBankerUser; //庄家用户
WORD wCurrentUser; //当前用户
//状态变量
BYTE cbActionCard; //动作
BYTE cbActionMask; //动作掩码
BYTE cbLeftCardCount; //剩余数目
bool bTrustee[GAME_PLAYER]; //是否托管
WORD wWinOrder[GAME_PLAYER]; //胡牌排名
//出牌信息
WORD wOutCardUser; //出牌用户
BYTE cbOutCardData; //出牌
BYTE cbDiscardCount[GAME_PLAYER]; //丢弃数目
BYTE cbDiscardCard[GAME_PLAYER][60]; //丢弃记录
//数据
BYTE cbCardCount[GAME_PLAYER]; //牌的数目
BYTE cbCardData[MAX_COUNT]; //列表
BYTE cbSendCardData; //发送
//组合
BYTE cbWeaveCount[GAME_PLAYER]; //组合数目
XZDD_CMD_WeaveItem WeaveItemArray[GAME_PLAYER][MAX_WEAVE];
};
客户端在接收到这两个消息后,会按照消息数据进行房间信息,玩家信息,牌面信息的数据设置。这样牌局就被恢复了。
”房卡“麻将研发技巧,尽在”红孩儿的游戏开发之路“,欢迎关注公众号!
以上是关于房卡麻将分析系列之"断线重连"的主要内容,如果未能解决你的问题,请参考以下文章