欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > 微信开发 > 如何将单机下棋游戏改造成联网实时对战下棋小游戏

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:738

高端HTML5响应式企业通用网

2020-05-06   浏览:519

html5响应式外贸网站英文版

2020-05-08   浏览:506

HTML5自适应律师工作室类网

2020-04-04   浏览:502

HTML5影视传媒文化公司类网

2020-05-12   浏览:496

如何将单机下棋游戏改造成联网实时对战下棋小游戏

发布时间:2020-10-24  

单机的棋牌类游戏开发起来比较简单,甚至网络上直接有源码下载,但是,想要改造成联网实时对战的下棋小游戏,就需要涉及到熟悉网络协议栈、掌握后端知识以及面对服务器带来的高额成本等难题。

那么,如何避免这些难题,快速的开发出联网实时对战的小游戏呢?

下面我将详细阐述,如何借助第三方Bmob Game SDK 将单机下棋游戏改造成联网实时对战下棋小游戏的过程。

1. 获取 比目游戏云服务(https://game.bmob.cn/) (下称 官网)的账号; 2. 在官网下载 微信小游戏SDK,导入到原有的单机下棋项目中; 3. 初始化sdk,第一个参数修改为官网获取的 AppKey,第二个参数可先不填,要做第四个步骤获得。

import BGS from '../../js/bmobgamesdk/bgsapi';//根据你自己的存放路径更改 let model = BGS.instance; model.Init('3f729baax0', 'ws://139.159.220.251:29175', function (succ, msg) { if (succ) { // 用bmob小程序sdk进行登录注册 // _getUser(listener); } else{ // 提醒失败,并给重新init的按钮 } });

4. 创建房间,获得Bgs.instance.Init的第二个参数

import BGS from '../../js/bmobgamesdk/bgsapi';//根据你自己的存放路径更改 let model = BGS.instance; var userId = Bmob.User.current().id; model.CreateRoom(userId, 2, function(isOK, res) { console.log("res >", res); if (isOK) { var roomInfo = res.roomInfo; console.log('对战开房成功', _data); // 创建房间成功,跳转游戏房间页面,别忘了把房间信息roomInfo传递过去 } else { common.showModal('对战开房失败,' + res); } });

运行游戏,打开network抓包,创建一个房间,查看这个操作的返回结果,返回结果为

{ "address": "a.b.c.d", // 服务器ip "roomInfo": { "ports": { "websocket": efgh // 服务器端口 }, "rid": xxx, // 房间id "joinKey": yyy // 房间密匙 } }

 

这样,你就获得了初始化sdk的第二个参数,是 ws://a.b.c.d:efgh 这样的格式

    5. 加入房间,初始化监听器

import BGS from '../../js/bmobgamesdk/bgsapi';//根据你自己的存放路径更改 let model = BGS.instance; if (this.isConnected) return; t('连接房间'); this.mRoomActListener = this.onRoomAction.bind(this); this.mOfflineListener = this.onOffline.bind(this); model.RegistRoomActListener(this.mRoomActListener);// 注册系统通知监听,详细参考官网下载的demo model.RegistOfflineListener(this.mOfflineListener);// 注册掉线通知监听 let emptyFun = function() {}; model.SetGameRuntimeListeners( emptyFun,//这三个监听器本游戏中没有涉及 emptyFun, emptyFun, this.onTransfer.bind(this),// 玩家间交互信息的监听器 this.onCloudNotify.bind(this)//云端代码通知的监听器 ); // 加入房间 // 这里的roomData就是创建房间时让你保存的roomInfo啦 model.JoinRoom(that.roomData.rid, that.roomData.joinKey, userId, model.get('seatKey'), function(isOK, data) { if (isOK) { common.toast('加入房间成功'); console.log("房间信息:", data); let playerCount = data.playerCount, no = data.no, isPlaying = data.isPlaying, players = data.players, masterId = data.master; // 根据返回的房间信息做些保存或处理,这里不详细写出来,大家根据自己的情况灵活变通... if (data.seatKey) model.set('seatKey', data.seatKey); that.isConnected = true; return; } //加入房间失败 if (data.indexOf("204") > -1) data = "房间已关闭"; else if (data.indexOf("206") > -1) data = "房间已满员"; else if (data.indexOf("201") > -1) data = "未知错误"; else if (data.indexOf("203") > -1) data = "没有登陆"; else if (data.indexOf("208") > -1) data = "游戏中"; else if (data.indexOf("204") > -1) data = "房间不存在"; else if (data.indexOf("202") > -1) data = "参数错误"; console.log('加入房间失败:', data); }.bind(this)); // 收到客户端的回调 onTransfer(no, res) { console.log("收到客户端的回调:" + no, res) let flag = res.shift(); switch (flag) { case 1: // 下棋 t('收到客户端的下棋数据'); t(res); break; case 2: // 被请求悔棋 // ... } }, // 收到云端代码服务端的回调 onCloudNotify(notify) { notify = JSON.parse(model.bytesToString(notify, 0, notify.length)); console.log("收到服务器的回调:", notify); // ... },

 

6. 实现下棋数据的实时交互