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

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];
};


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


                              



         

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

                                                                                      


以上是关于房卡麻将分析系列之"断线重连"的主要内容,如果未能解决你的问题,请参考以下文章

房卡麻将分析系列 "牌局回放" 之 播放处理

房卡麻将分析系列之"千里传音"

房卡麻将分析系列之"架构选型"

房卡麻将分析系列之"发牌器"算法设计

房卡麻将分析系列 "牌局回放" 之 播放处理

房卡麻将分析系列之"发牌器"算法设计