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

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

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

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

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

首先,游戏服务器上要保存当前进行中的游戏的所有玩家信息。包括玩家名称,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];
};

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

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

时间: 2024-12-25 13:07:10

房卡麻将分析系列之"断线重连"的相关文章

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

持续放出房卡麻将设计与研发讲解.敬请关注微信共众号:红孩儿的游戏开发之路 房卡麻将分析系列 "牌局回放" 之 播放处理 昨天红孩儿给大伙讲了讲"牌局回放"的数据记录处理,有了数据的存储,下面就是数据的显示了. 实话讲,好久没用过 SQL Server 来做数据库了, 网狐的服务器是基于WIN,IOCP,  SQL Server 这套路子.配置好后,可以在QPTreasureDB数据库中看到三个牌局相关的表. 其中dbo.PrivateGameRecord是存储当前游

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

大家好,经过一段时间的努力,在填平了大部分源码框架中的坑后,我们的"大赢家"红中麻将总算完成了1.0版本,虽然仍然有诸多问题,但总归算是有一个好的开始,希望后续诸事顺利,能够早日跑出流水,也欢迎各位合作商积极与我联系. 回顾开发过程,我深深的体会到,一个有多年摸牌经验的服务器主程是有多么重要!记得年前帮一家公司做房卡麻将项目,对方从上到下,基本没人会玩麻将,诸事都需要请教麻友,这样的情况我觉得上线的产品应该也不太会好吧,没爱的设计~!不过我可是8岁就上牌桌,八十年代家里就有了一幅竹制麻

房卡麻将分析之&quot;一键入局&quot;

地方棋牌,VR,AR技术,请关注公众号:"红孩儿的游戏开发之路". 房卡麻将分析之"一键入局" 房卡麻将通过微信邀请好友加入房间进行游戏,大大方便了玩家进行麻将游戏.这也凸显了微信对于游戏引流导量的强大平台作用.本次我们就给大家讲一下"一键入局"的技术原理. 首先,我们先来疏理一下整个过程: 玩家打开游戏,创建房间,并将房间信息(房间说明和房间号码)生成链接通过微信SDK的分享到好友或朋友圈.其它玩家看到这个链接并点击后,如果已经安装游戏,会提示

MySQL微信房卡麻将棋牌源码全套实现原理

在MyS微信房卡麻将棋牌源码全套( h5.super-mans.com Q:2012035031)微信房卡麻将棋牌源码全套的事务隔离级别. 读未提交:一个事务可以读取到另一个事务未提交的修改.这会带来脏读.幻读.不可重复读问题.(基本没用) 读已提交:一个事务只能读取另一个事务已经提交的修改.其避免了脏读,但仍然存在不可重复读和幻读问题. 可重复读:同一个事务中多次读取相同的数据返回的结果是一样的.其避免了脏读和不可重复读问题,但幻读依然存在. 串行化:事务串行执行.避免了以上所有问题. 以上是

cocos Creator js 房卡麻将/血战/H5四川麻将源码下载搭建

房卡麻将/血战/H5四川麻将 源码 支持iOS/Android/H5 完整源码 1.基于NODEJS+MYSQL的服务器,成熟的技术方案,高效稳定,且方便Windows开发,Linux平台布署,节约服务器运转成本. 2.采用最新版本的cocos引擎,cocos creator开发,可快速的进行界面调整.且能够快速地发布iOS,Android版本. 3.如需H5版本,只需针对H5平台进行资源优化即可. 4.成熟可靠的房卡式设计,能满足大部分用户使用体验. 5.产品经过大量测试,可以运转稳定. 测试

Cocos2d-x山西推倒胡+扣点房卡麻将下载架设教程

1.数据库还原修改后台数据库jeefwtwo 表:sys_user8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 密码(123456)修改游戏数据库 QPPlatformDB表:DataBaseInfo  SQL的地址端口账号密码表:GameRoomInfo  修改服务器的机器标示 PS,搭建的源码必须完整,本文测试源码来自 Cocos2d-x山西推倒胡+扣点房卡麻将maliwl.com 2.执行脚本每个脚本都要执

房卡麻将源码下载十三水房卡麻将源码搭建教程

代码中需修改的地方:1.cocos2d-x-3.14.1\cocos\Android.mk 里面 #$(call import-module,curl/prebuilt/android)修改成$(call import-module,curl/prebuilt/android) 2.cocos2d-x-3.14.1\extensions\Android.mk 添加如下  目的是为了支持外部静态curl库LOCAL_STATIC_LIBRARIES += cocos_network_staticL

微信房卡麻将棋牌架设之游戏服务器架构的详细设计(一) 内核设计

题目:微信房卡麻将棋牌架设之游戏服务器架构的详细设计(一) 内核设计 今天向大家介绍一下游戏服务器的设计,着重讲解一下微信房卡麻将棋牌架设(aqiulian.com)的服务器搭建,如果有什么不懂得可以咨询我Q_212303635,欢迎大家的咨询.那么我们开始进去主题吧. 内核的几个组件被设计成Service,也就是说这几个模块都要实现如下接口: 图1  IService接口 Start方法用来启动服务. Stop 方法用来关闭服务. IsService 方法用于查询当前服务是否正在工作. 内核中

手游房卡麻将被流量攻击了怎么办

Anti防御是针对客户端在遭受大流量的DDoS攻击后导致服务不可用的情况下,推出的付费增值服务,用户可以通过配置Anti防御,将攻击流量引流到Anti防御节点上,确保源站的稳定可靠. 用户购买Anti防御,把域名解析到Anti防御记录值上并配置源站IP:所有公网流量都会走高防机房,通过端口协议转发的方式将用户的访问通过Anti防御节点转发到源站IP,同时将恶意攻击流量在Anti防御节点上进行清洗过滤后将正常流量返回给源站IP,从而确保源站IP稳定访问的防护服务.发生DDoS攻击时不需要做流量牵引