房卡麻将分析系列之”断线重连”

大家好,我是红孩儿, “房卡” 麻将分析系列继续进行中。

在进行游戏的过程中,人们往往会遇到 “断线” 情况,比如坐公车,地铁下班路上玩一局,下车转站时往往先关机,过一会儿再上线继续完,如果没有自动 “断线重连” ,则对于牌局的体验感影响会非常大,在“房卡”麻将中加入 “断线重连” 也成为了必要的技术指标。那么怎么做到呢?

首先,游戏服务器上要保存当前进行中的游戏的所有玩家信息。包括玩家名称,ID,头像地址,积分等等。除非解散房间,否则不因为玩家断线而清除房间里的玩家信息,只做玩家的在线状态切换。

然后,在客户端上线时,发送玩家登录请求,服务器在收到当前玩家的请求后,验证通过取得ID,并通过ID查询玩家是否在游戏房间中,如果在,则由对应房间向玩家发送房间信息,所有用户信息和手牌,打出的牌,起牌,操作提示等信息,并将掉线玩家的状态设为上线。

客户端在收到房间信息后进入房间,并显示相应其它玩家信息和重现牌局。总之,需要显示什么,服务器需要一股脑的都发回来并在客户端获取并设置显示。当然,这也并不是说一个消息就能发送完的,一般客户端会收到 (1)登录成功(2)房间信息(3)游戏状态信息 三个消息。

登录成功消息就不说了,收到登录成功后,客户端会收到更新用户信息消息,如果用户的房间ID有效,则说明在游戏中,直接切换到游戏房间界面,下面是房间信息和游戏状态信息的结构:

//私人场房间信息

struct CMD_GF_Private_Room_Info

{

bytebPlayCoutIdex;//玩家局数0 1, 8 或者16局

bytebGameTypeIdex;//游戏类型

dwordbGameRuleIdex;//游戏规则

bytebStartGame;//游戏是否开始

dworddwPlayCout;//游戏局数

dworddwRoomNum;//房号

dworddwCreateUserID;//房主ID

dworddwPlayTotal;//总局数

bytecbRoomType;//公开房还是包房

std::vectorkWinLoseScore; //分数

};

//游戏状态

struct CMD_S_StatusPlay

{

//游戏变量

LONGLONGlCellScore;//单元积分

WORDwBankerUser;//庄家用户

WORDwCurrentUser;//当前用户

//状态变量

BYTEcbActionCard;//动作

BYTEcbActionMask;//动作掩码

BYTEcbLeftCardCount;//剩余数目

boolbTrustee[GAME_PLAYER];//是否托管

WORDwWinOrder[GAME_PLAYER];//胡牌排名

//出牌信息

WORDwOutCardUser;//出牌用户

BYTEcbOutCardData;//出牌

BYTEcbDiscardCount[GAME_PLAYER];//丢弃数目

BYTEcbDiscardCard[GAME_PLAYER][60];//丢弃记录

//数据

BYTEcbCardCount[GAME_PLAYER];//牌的数目

BYTEcbCardData[MAX_COUNT];//列表

BYTEcbSendCardData;//发送

//组合

BYTEcbWeaveCount[GAME_PLAYER];//组合数目

XZDD_CMD_WeaveItemWeaveItemArray[GAME_PLAYER][MAX_WEAVE];

};

客户端在接收到这两个消息后,会按照消息数据进行房间信息,玩家信息,牌面信息的数据设置。这样牌局就被恢复了。

”房卡“麻将研发技巧,尽在 ”红孩儿的游戏开发之路“ ,欢迎关注公众号!

eae52073f7852caf70c786ce23c412ec

红孩儿的游戏编程之路稿源:红孩儿的游戏编程之路 (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 综合编程 » 房卡麻将分析系列之”断线重连”

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录