项目6实现业务逻辑模块.ppt
《项目6实现业务逻辑模块.ppt》由会员分享,可在线阅读,更多相关《项目6实现业务逻辑模块.ppt(50页珍藏版)》请在三一办公上搜索。
1、腾讯云游戏应用开发,实现业务逻辑模块,项目6,学习目标,实现游戏的几个重要业务逻辑 掌握CS模式下协议的使用 掌握登录注册功能的基本实现方法,1,实现登录功能,1.实现客户端请求登录方法,当用户在登录界面中单击“登录”按钮后,后台尝试与服务器建立连接,连接成功后发送登录协议,协议格式为login;id;password;。修改LoginPanel.cs脚本中的OnLoginClick方法,代码如下。,/*登录按钮事件*/publicvoidOnLoginClick()if(idInput.text=|pwInput.text=)/*打开提示框*/PanelMgr.instance.OpenPa
2、nel(用户名密码不能为空!);return;/如果服务器没有连接,连接服务器)NetMgr.instance.proto=newProtocolStr();/*连接*/if(!NetMgr.instance.Connect()PanelMgr.instance.OpenPanel(连接服务器失败!);,1,实现登录功能,1.实现客户端请求登录方法,/发送登录协议ProtocolStrprotocol=newProtocolStr();protocol.AddString(login);protocol.AddString(idInput.text);protocol.AddString(pw
3、Input.text);/*一次性监听*/NetMgr.instance.Send(protocol,OnLoginBack);,1,实现登录功能,2.实现服务端登录协议处理方法,在HandleConnMsg类中添加Msglogin方法,当服务端收到login协议时,分发给Mgslogin方法处理,publicvoidMsglogin(Connconn,ProtocolBaseprotoBase)stringid,pw;ProtocolStrprotocol=(ProtocolStr)protoBase;id=protocol.GetString(1);pw=protocol.GetStrin
4、g(2);/*构建返回协议*/ProtocolStrprotocolRet=newProtocolStr();protocolRet.AddString(login);/*数据库校验*/如果用户名密码校验失败if(!DataMgr.instance.CheckPassWord(id,pw)Console.WriteLine(Msglogin登录失败:用户名和密码错误+conn.GetAddress();protocolRet.AddInt(-1);/返回失败结果conn.Send(protocolRet);return;,1,实现登录功能,2.实现服务端登录协议处理方法,if(!ServNet
5、.instance.KickOff(id)/如果踢下线失败Console.WriteLine(Msglogin登录失败:挤下线失败+conn.player.id);/返回失败结果protocolRet.AddInt(-1);conn.Send(protocolRet);return;PlayerDataplayerData=DataMgr.instance.GetPlayerData(id);/获取玩家数据if(playerData=null)Console.WriteLine(Msglogin登录失败:获取账户信息失败+conn.player.id);protocolRet.AddInt(-
6、1);/返回失败结果conn.Send(protocolRet);return;conn.player=newPlayer(id,conn,playerData);/登入账户,加载数据protocolRet.AddInt(0);/返回成功结果conn.Send(protocolRet);,1,实现登录功能,3.实现客户端处理回发结果方法,添加OnLoginBack方法,/*登录协议回执*/publicvoidOnLoginBack(ProtocolBaseprotocol)/*构建协议*/ProtocolStrproto=(ProtocolStr)protocol;/*校验登录结果*/intr
7、esult=proto.GetInt(1);if(result=0)GameMgr.instance.id=idInput.text;/保存账号IDPanelMgr.instance.OpenPanel(登录成功!);PanelMgr.instance.OpenPanel();/*进入游戏大厅*/PanelMgr.instance.ClosePanel(this);elseNetMgr.instance.Close();/断开连接PanelMgr.instance.OpenPanel(登录失败,请检查用户名密码!);,1,实现登录功能,4.实现踢下线模块,如果该角色在游戏中,则把它踢下线。并且
8、发送Logout协议,向被踢下线的客户端发送通知。在ServNet中添加KickOff方法,代码如下。,/*如果某id已经在线就踢下线*/publicboolKickOff(stringid)for(inti=0;iconns.Length;i+)if(connsi=null)continue;if(!connsi.isUse)continue;if(connsi.player=null)continue;/*如果该玩家已经在线*/if(connsi.player.id=id)lock(connsi.player)Console.WriteLine(检查到+id+已在线,踢下线);/*通知客户
9、端下线*/ProtocolStrprotocolLogout=newProtocolStr();protocolLogout.AddString(logout);connsi.Send(protocolLogout);returnconnsi.player.Logout();returntrue;,2,实现获取自身数据功能,1.实现客户端发送请求方法,在LobbyPanel.cs脚本的OnShowing方法的最后添加相关代码,如下。,/*请求加载自身数据*/ProtocolStrproto=newProtocolStr();proto.AddString(getachieve);/发送协议,并
10、注册接收方法NetMgr.instance.Send(proto,RecvGetAchieve);,2,实现获取自身数据功能,2.实现服务端处理协议的方法,当服务端接收到协议时,分发给对应的方法,将玩家的胜负场次写入协议返回给玩家。在HandlePlayerMsg类中添加协议处理方法Msggetachieve方法,代码如下。,/*获取玩家自身数据*/*返回协议getachieve,win,lost,*/publicvoidMsggetachieve(Playerplayer,ProtocolBaseprotoBase)ProtocolStrprotocolRet=newProtocolStr(
11、);protocolRet.AddString(getachieve);protocolRet.AddString(player.id);protocolRet.AddInt(player.playerData.win);protocolRet.AddInt(player.playerData.fail);player.conn.Send(protocolRet);return;,2,实现获取自身数据功能,3.实现客户端处理回发结果,客户端收到返回协议并更新到UI上,代码如下。,/*个人信息协议接收*/publicvoidRecvGetAchieve(ProtocolBaseprotocol)
12、/*解析协议*/ProtocolStrproto=(ProtocolStr)protocol;IDtext.text=玩家:;IDtext.text+=proto.GetString(1);IDtext.text+=,胜场:;IDtext.text+=proto.GetInt(2);IDtext.text+=,负场:;IDtext.text+=proto.GetInt(3);,3,实现注册功能,1.实现客户端请求注册方法,当用户在注册界面中单击“注册”按钮后,后台尝试与服务器建立连接,连接成功后发送注册协议,协议格式为register;id;password;。修改RegPanel.cs脚本中
13、的OnRegClick方法,代码如下。,/*注册按钮事件*/publicvoidOnRegClick()/*本地校验*/用户名密码为空if(idInput.text=|pwInput.text=)PanelMgr.instance.OpenPanel(用户名密码不能为空!);return;/两次密码不同if(pwInput.text!=repInput.text)PanelMgr.instance.OpenPanel(两次输入的密码不同!);return;,3,实现注册功能,1.实现客户端请求注册方法,/连接服务器if(NetMgr.instance.status!=NetMgr.Status
14、.Connected)NetMgr.instance.proto=newProtocolStr();if(!NetMgr.instance.Connect()PanelMgr.instance.OpenPanel(连接服务器失败!);/构建协议ProtocolStrprotocol=newProtocolStr();protocol.AddString(register);protocol.AddString(idInput.text);protocol.AddString(pwInput.text);/发送NetMgr.instance.Send(protocol,OnRegBack);,3
15、,实现注册功能,2.实现服务端注册协议处理方法,当服务端收到register协议时,分发给Msgregister方法处理。该方法首先解析协议中的用户名和密码。调用GetXXX是获取协议数值的一种方法。然后调用向user中表添加数据,如果添加失败,则通过protocol.AddInt(0)构造参数为0的返回协议。最后通过CreatePlayer创建角色,并返回协议给客户端,代码如下。,/*注册协议*/publicvoidMsgregister(Connconn,ProtocolBaseprotoBase)/*解析协议*/stringid,pw;ProtocolStrprotocol=(Proto
16、colStr)protoBase;id=protocol.GetString(1);pw=protocol.GetString(2);Console.WriteLine(Msgregister处理注册协议:+conn.GetAddress()+用户名:+id+密码:+pw);/*注册*/boolresult=DataMgr.instance.Register(id,pw);,3,实现注册功能,2.实现服务端注册协议处理方法,/构建返回协议ProtocolStrprotocolRet=newProtocolStr();protocolRet.AddString(register);if(resu
17、lt)Console.WriteLine(Msgregister注册成功+conn.GetAddress();protocolRet.AddInt(0);elseConsole.WriteLine(Msgregister注册失败+conn.GetAddress();protocolRet.AddInt(-1);/返回协议给客户端conn.Send(protocolRet);,3,实现注册功能,3.实现客户端处理回发结果方法,服务端处理协议后,会返回处理结果,格式为register;result;。result为0表示成功,-1表示失败。客户端收到返回协议再做出响应。注册成功则关闭注册界面。注册
18、失败则提示注册失败。添加OnRegBack方法,代码如下。,/*注册协议回执*/publicvoidOnRegBack(ProtocolBaseprotocol)/*解析协议*/ProtocolStrproto=(ProtocolStr)protocol;intresult=proto.GetInt(1);if(result=0)PanelMgr.instance.OpenPanel(注册成功!);/*返回登录界面*/PanelMgr.instance.ClosePanel(this);elseNetMgr.instance.Close();PanelMgr.instance.OpenPane
19、l(注册失败,请更换用户名!);,4,实现匹配功能,1.实现客户端的匹配请求,单击“匹配”按钮,发送相关协议。在LobbyPanel.cs中添加新字段,代码如下。,/*匹配状态*/enumMatchStateMatching,NoneMatchStatestate=MatchState.None;,4,实现匹配功能,1.实现客户端的匹配请求,修改LobbyPanel.cs中的OnMatchClick方法,代码如下。,/匹配按钮事件publicvoidOnMatchClick()if(state=MatchState.None)ProtocolStrprotocol=newProtocolStr
20、();protocol.AddString(matchin);NetMgr.instance.Send(protocol);state=MatchState.Matching;btnText.text=匹配中n(点击取消);elseProtocolStrprotocol=newProtocolStr();protocol.AddString(matchout);NetMgr.instance.Send(protocol);state=MatchState.None;btnText.text=匹配n(点击开始);,4,实现匹配功能,2.创建服务端匹配管理类MatchMgr,MatchMgr类主要
21、负责以下工作:定义匹配队列。当匹配队列满足人数要求时,创建房间,并将这些玩家添加到房间的玩家列表里。定义游戏开始要求的人数。当队列满足人数要求的时候,将队列最前面的几个人放到一个新建的房间类里。控制队列的进入与离开。添加MatchMgr匹配管理类,代码如下。,usingSystem;/*匹配管理*/usingSystem.Collections.Generic;publicclassMatchMgr/单例publicstaticMatchMgrinstance;/匹配列表publicListlist=newList();/开始游戏需要的人数publicintbeginNum=4;,4,实现匹配
22、功能,2.创建服务端匹配管理类MatchMgr,/*构造方法*/publicMatchMgr()instance=this;/*判断匹配队列中是否已经足够开局*/publicvoidCanBegin()if(list.Count=beginNum)Console.WriteLine(匹配成功,创建房间);Roomroom=newRoom();for(inti=0;ibeginNum;i+)room.AddPlayer(list0);list.Remove(list0);/*通知所有匹配上的玩家进入房间*/room.MatchOK();,4,实现匹配功能,2.创建服务端匹配管理类MatchMgr
23、,publicvoidAddPlayer(Playerplayer)lock(list)if(list.Contains(player)return;list.Add(player);player.tempData.status=PlayerTempData.Status.Matching;Console.WriteLine(Msgmatchin进入匹配队列+player.id);CanBegin();/*将玩家移出匹配队列*/publicvoidRemovePlayer(Playerplayer)lock(list)if(!list.Contains(player)return;player
24、.tempData.status=PlayerTempData.Status.None;list.Remove(player);Console.WriteLine(Msgmatchout离开匹配队列+player.id);,4,实现匹配功能,3.创建服务端房间类Room,Room类主要负责以下工作:当匹配队列满足人数要求时,创建房间,并将这些玩家添加到房间的玩家列表里。创建房间时,向房间中所有玩家发送匹配成功协议。分配队伍,以错开的方式,比如135是红队、246是蓝队。添加Room房间类,代码如下。,usingSystem;usingSystem.Collections.Generic;usi
25、ngSystem.Linq;/房间publicclassRoom/状态publicenumStatus/*准备中*/Prepare=1,/*游戏中*/Fight=2,4,实现匹配功能,3.创建服务端房间类Room,publicStatusstatus=Status.Prepare;publicintmaxPlayers=2;/玩家/*已准备的玩家*/intreadyNum=0;/*玩家列表*/publicDictionaryplayerlist=newDictionary();/*座位数组*/publicRoom();publicboolAddPlayer(Playerplayer)/添加玩家
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 项目 实现 业务 逻辑 模块
链接地址:https://www.31ppt.com/p-5888720.html