新项目需要制作一个微棋游戏,并在网上搜索相关代码。
仅就完整性而言,优林国际象棋卡的开放源代码相对完整(cocos Creator客户端、节点Js服务器、数据库脚本)
实现了房卡麻将的基本功能(热更新、围心登陆共享、游戏回放),下面列出分析说明,希望对后面的人有所借鉴。
但最终,我放弃了从这个代码做二次开发,选择了Golang+mongodb服务器,如果对开发的相关方面感兴趣的朋友也可以添加我作为朋友来讨论。
ActudioServer /ActudioServer,JS处理版本获取,帐号注册,登陆
App.GET(‘/GETX版本',函数(REQ,RES));//返回版本信息和游戏大厅连接地址。
App.GET(‘/Cube',函数(REQ,RES)); / /处理访问者登陆
App.GET('/WaChigaAuth',函数(REQ,RES));//处理WeChat登陆
应用程序。获取('/BaseOnFipe,函数(REQ,RES));//Read用户帐户信息主要用于显示用户配置文件
-App.GET('/WeChigaAuth'),函数(REQ,RES);//WebActo登陆
CealTyAuthAudio(帐户、昵称、性别、HeaDiggURL、函数());
面向HARL服务器/client服务的JS面向客户端HTTP请求
App.GET(‘/Login',函数(REQ,RES));/处理登陆
App.GET('/CuraTyPrimeAudioLoad),函数(REQ,RES);//创建一个房间
App.GET('/StudioPrimeAudioLoo',函数(REQ,RES));//进入房间。
App.GET('/GETPoistyYyList',函数(REQ,RES));//GET游戏历史
App.GET('/GETY-GAMESHOFIOHORE),函数(REQ,RES); / 房间的游戏次数
App.GET('/GETXODELILIOFY游戏,函数(REQ,RES)); /游戏细节,回放播放。
App.GET('/GETHuiSeriStand),函数(REQ,RES); / /获取用户状态钻石的数量。
App.GET('/GET-MIGE},函数(REQ,RES);//GET通知消息
App.GET('/ISSServyOnLoad,函数(REQ,RES));//决定服务器是否在线。
Hall Server /ROM服务
-App.GET('/RealStursGs,函数(REQ,RES));/游戏服务器注册。
IsServerOnline();//确定服务器是否联机。
Choose Server AndEnter();选择具有最小负载的服务器进入
创建房间();创建房间 / /创建房间
-HTTPGET(ServInFo..IP,ServimoF.HtpPoT, CealeSyoLo);
客厅();
-HTTPGET(ServInFo.ip,ServimoF.HtpPoT, /AudioLoo);
Maigang-Server /App.js读取配置信息并启动相关服务。
//打开HTTP服务
HtpPixServices启动(CONFIG);
/打开外部网络套接字服务
SokTyService启动(CONFIG);
Maigang-Server /HTTPyServices
应用程序。获取('/GETHyServyFieln',函数(REQ,RES));//获取服务器中的所有房间和用户
-应用程序。获取('/CudioIdHoal',函数(REQ,RES));//Advices请求从大厅创建房间
应用程序。获取('/StudioLoo',函数(REQ,RES));//Advices请求从大厅接收
应用程序。获取(‘/ping',函数(REQ,RES));///OrdServer确定游戏室服务器是否在线。
应用程序。获取('/iSyRoMyRunEng',函数(REQ,RES));//Hall服务器确定游戏室服务器是否在线。
//心跳到大厅服务器注册游戏服务器。
更新当前服务器上的负载信息(房间数),如果已注册,以便于客户选择最佳房间
功能更新();
HTTPGET(CONT.HARLIPIP,CONT.HARLIPORT,RealStistgs
Maigang-Server /SockTyService .js侦听客户端发送的套接字事件。
Socket.on(登录),函数(数据);
Socket.on(准备好,函数(数据));
Socket.on(焕派),函数(数据);
Socket.on(丁克),函数(数据);
Socket.on(楚派),函数(数据);
Socket.on(彭),函数(数据);
Socket.on(刚,函数(数据));
Socket.on(胡),函数(数据);
Socket.on(郭),函数(数据);
Socket.on(聊天),功能(数据);
Socket.on(QuijyChAT),函数(数据);
Socket.on(Voice Smithg),函数(数据);
Socket.on(Enjy',函数(数据));
Socket.on(出口,函数(数据));
Socket.on(凹陷,函数(数据));
Socket.on(DelSOVEL请求,函数(数据));
Socket.on(DoSOVELION),函数(数据);
Socket.on(DoSovil拒绝,函数(数据));
Socket.on(断开,函数(数据));
Socket.on(GAMEMPIN,函数(数据));
Maigang-Server /ROOMMGR.JS实现与游戏相关的房间操作
函数GeaStudioMid();///随机生成6位ID
FunctionconstructRoomFromDb(DbDATA);/ /从数据库中获取房间信息数据并重建房间。
ExtudioStudio=函数(ROOMID,USEID,用户名,回调);
Exchange。CytReRoMon =函数(创建者,ROOMCONF,GEMS,IP,端口,回调);
ExpStudio.ExtReal=函数(USEID);
销毁=函数(ROOMID);
ExtPosialStudio =函数();
ExtStudio=函数(ROOMID);
ExsS.ISCudio=函数(ROOMID,USEID);
ExtReStay=函数(USER ID,value);
ExpStudio =函数(USERID);
ExtStudio.GuoStudioRe=函数(USER ID);
ExtPv.GETUSEReStab=函数(USER ID);
ExpTest.GETUsRealStices =函数();
MAGangangServer/GAMEMEGRXXZD.JS//麻将游戏的通用实现
函数GETMJType(ID);
功能洗牌(游戏);
Functionmopai(游戏,SeaDe指标);
/检查它是否可以被触摸。
FunctioncheckCanPeng(游戏,SEATDATA,TAGPAI);
/检查是否可以单击该栏。
功能检查CIDIANGANG(游戏,SEATDATA,TAGPAI);
/检查隐藏条是否可以隐藏。
FunctioncheckCanAnGang(游戏,SEATDATA);
/检查你是否能弯曲杆(当你触摸它)。
FunctioncheckCanWanGang(游戏,SEATDATA);
FunctioncheckCanHu(游戏,SEATDATA,TAGPAI);
功能清除选项(游戏,SEATDATA);
/检查听力卡。
FunctioncheckCanTingPai(游戏,SEATDATA);
函数索引(USEID);
FunctiongetGameByUserID(USERID);
功能操作(SEATDATA);
功能终端操作(游戏,SEATDATA,拜县);
FunctionmoveToNextUser(游戏,NeXeSt));
游戏功能(游戏);
FunctionisSameType(类型,ARR);
FunctionisQingYiSe(GAMESEATDATA);
官能清清(GAMESEATDATA);
FunctionisZhongZhang(GAMESEATDATA);
FunctionisJiangDui(GAMESEATDATA);
泛函(SEATDATA);
函数计算器(游戏,风扇);
FunctionfindMaxFanTingPai(TS);
功能发现播放器(游戏);
函数计算器(游戏,ROMOMIVER);
功能转换(游戏,用户ID,强制结束);
函数记录操作(游戏,SEATDATA,类型,目标);
Exvest.Stase=函数(ROOMID);/启动一个新的局。
ExpU.S.CUPAI =函数(USEID,拜县);
ExpP.PU=函数(USERID);
ExpS.ISPLAY =函数(USER ID);
FunctiondoGang(游戏,转座,SEATDATA,GANTYPE,NUMTFCNT,拜县));
Eng=函数(USEID,拜县);
Hux= HU=函数(USERID);
出口=功能(用户ID);
Exdos.doDeSt=函数(ROOMID);
Maigang-Server /MJUTULLS.JS//麻将相关辅助功能
FunctioncheckTingPai(SEATDATA,开始,结束);
FunctionmatchSingle(SEATDATA,选定);
FunctioncheckSingle(SEATDATA);
FunctioncheckCanHu(SEATDATA);
ExpTest.GETMJType =函数(PAI);
Maigang-Server /UrMGR.js/Band用户和Socket,发送消息
EXBET.BAND=函数(USER ID,Socket);
Del=函数(USER ID,Socket);
ExpS.GET=函数(USERID);
ExpS.ISNoL=函数(USERID);
ExtP.GETONLIN EncEnter =函数();
ExpS.sEnsMg=函数(USEID、事件、MSGDATA);
SOCKE.EMIT(事件,MSGDATA);
出口:功能(ROOMID);
ExpRest.BrasaStudioal=函数(事件、数据、发送者、包括发送者);
SOCKE.EMIT(事件,MSGDATA);
ma._server/tokenmgr.js/Token相关操作令牌的设计用于检查在进入房间期间是否发生超时。
ExpS.CRATATETKEN =函数(USER ID,生存期);//获取游戏室的信息并创建令牌。
ExtPv.GETToMeNe=函数(USER ID);
ExpTest.GETUSERID=函数(令牌);
Exist.SistOnEngule=函数(令牌);/当游戏服务器连接时,检查有效和超时吗
Extest.DelToMeC=函数(令牌);
App.GET('/StudioHoo');
RoomMgr.enterRoom(ROMID,USEID,名称,函数(RET){
ToKMGR.CRATATETKEN(USEID,5000);
C.Vv.GAMEnETMG.CelpToMeServer(RET);/Client
VaR SD= {{
令牌:数据令牌,
Roomid:Da.RooMID,
时间:数据时间,
符号:数据符号,
};
Cc.vv.net.send(登录
/Server
Socket.on(登录),函数(数据){
/检查令牌是否有效。
如果(TokMgR.istoEnnValm(令牌)=false){
SOCKE.EMIT('LogiNoRebug),{ErrCoC:3,ErrMSG:TokOutOutof To.};
返回;
}
}
具体过程分析
注册游戏服务器
Maigang-Server /HTTPyServices
/初始化房间。服务器地址为空。
Servip=;
GAMESSVERIN Foo.Load=ROOMMGR.GETToMoCuffes();
HTTPGET(Halip IP,HaliPurt,RealStistGGS)
//当注册服务器成功时,设置房间以将IP连接到此服务器IP。
Servip=DATA IP;
}
Hall Server /ROM服务
App.GET('/RealStursGs),函数(REQ,RES){
Hall Server /ROM服务
App.GET('/RealStursGs),函数(REQ,RES){
/服务器已注册。
如果(ServMAP {ID}){
/更新服务器负载信息
信息=负载=负载;
Http.send(0岁),好
返回;
}
/保存服务器信息到服务器阵列
ServMMAP{ID}= {
IP:
身份证:
CyclipP: CclitPp,
客户端:
HttpPort:
负载:负载
};
}
输入房间服务器选择
函数选择器(){
ValServer信息= NULL;
/选择服务器列表中最少的房间数。
对于(在服务器映射中的var){
VaR信息= ServMAP {S};
如果(ServEnvices==null){
服务器信息=信息;
}
否则{
如果(ServInFo.Load > iNo.Load){
服务器信息=信息;
}
}
}
返回服务器信息;
}
创建房间并进入房间流动
Hall/clitnService
创建一个房间
App.GET('/CuraTyPrimeAudioLoo');
办公用品();
房间();
加入房间
App.GET('/Studio PrimeAudioLoo');
房间();
Hall/RoMyService
ExtudioStudio=函数(用户ID、名称、ROMID、FNCALBACK){
//Hall服务器将HTTP请求传递给游戏服务器。
HTTPGET(ServInFo.ip,ServimoF.HtpPoT, /StudioLoo);
}
Maigang-Server /HTTPyServices
App.GET('/StudioLoo');
RoMMGR.Engern();
开源H5棋牌 cocos creator微信棋牌小游戏 幼麟棋牌服务端分析笔记
猜你喜欢
转载自www.cnblogs.com/h5qipaiyuanma/p/9779531.html
今日推荐
周排行